CPort 설치 방법

Test 환경: Windows2000, C++ Builder 6.0

1.먼저 CPort 3.0 (cport-3.0.zip)을 다운로드 받는다.
   http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=component&no=366


2. 압축을 풀면 다음과 같은 파일이 생긴다.
    source.zip
    examples.zip
    help.zip
    locale.zip
  
3. 위의 4개 압축 파일을 차례대로 압축을 푼다.
   (ex)D:\DLTS_C\Component\CPort 3.0 이 디렉토리 하부에 풀었음.

4. C++ Builder를 기동하고 Source의 디렉토리의 bpk 파일을 연다
   본 PC에서는
  
   D:\DLTS_C\Component\CPort 3.0\sources\source\DsgnCPortCB6.bpk
   D:\DLTS_C\Component\CPort 3.0\sources\source\CPortLibCB6.bpk
  
   * 여러 개의 bpk 파일 나오는데.. 6.0에 해당하는 것은 이놈들인 것 같고..
   문제없다면 DsgnCPortCB6.bpk로 문제없는데.. 간혹 인스톨시 뭐라고 에러 나오는데..
   이 두개 파일을 번갈아 열어서 컴파일/인소톨하면 해결 됩니다. -.- 왜 그런 지는 저두 -.-;;

5. Compile하고 install 한다. install까지 정상적이라면 컴포넌트 갤러리 창에 새로운
   탭이 하나 더 생기고 몇 개의 아이콘이 보일 것이다. 그리고,

   C:\Program Files\Borland\CBuilder6\Projects\Bpl
   C:\Program Files\Borland\CBuilder6\Projects\Lib

   디렉토리에 CPort관련 bli, lib 파일들이 생성된다.

6. 다음 파일을 수정한다. 수정하지 않으면 컴파일 시, 링크 시 낭패를 보게 된다.

   D:\DLTS_C\Component\CPort 3.0\sources\source\CPort.hpp
   D:\DLTS_C\Component\CPort 3.0\sources\source\CPortCtl.hpp

   파일을 수정한다. 수정없이 사용하면
   동일한 함수가 두번 정의됐다는 메세지와 함께 에러가 발생한다.

   [CPort.hpp]
          // 1. 파일 맨 윗부분에 다음을 추가한다.

       // Borland C++ Builder
       // Copyright (c) 1995, 2002 by Borland Software Corporation
       // All rights reserved

       // (DO NOT EDIT: machine generated header) 'CPort.pas' rev: 6.00

       #undef SetPort       // <= 이부분 추가 : 안하면 ComPort->SetPort("COM1");
                //                  이런 문장에서 Link 에러 발생


       // 2. 다음 2개의 함수를 주석 처리한다. (680라인 정도에 있음)
       /* Exception.CreateRes */ inline __fastcall EComPort(int Ident)/* overload */ : Sysutils::Exception(Ident) { }
       /* Exception.CreateResHelp */ inline __fastcall EComPort(int Ident, int AHelpContext)/* overload */ : Sysutils::Exception(Ident, AHelpContext) { }


   [CPortCtl.hpp]
           // 아래의 부분을 주석으로 처리 (240라인 정도에 있음)
       //typedef TBitmap TLedBitmap;
       //;

7. 두 개의 파일을 수정하였으면 Source 디렉토리에 있는 모든 *.hpp 파일을
   C:\Program Files\Borland\CBuilder6\Include\Vcl 로 복사

   이렇게 하면 일단 설치가 완료됨.


8. 이 후 프로젝트에서 Cport를 이용하려 할 때 다음과 같이 한다.
    8.1 Project -> Option 에서 Directories/Conditionals 탭을 연다.
    8.2 Library Path에
        D:\DLTS_C\Component\CPort 3.0\sources\source\ 디렉토리를 추가하여 준다.

    이거 안 해주면 또 xxxx.DFM 파일이 없네...뭐 어쩌내 하면서 링커 에러 또 나옴.

    8.3 Library Path에 추가시키면 그냥 사용하면 됨.

9. 참고로 볼란드 포럼에 CPort에 관한 많은 Q/A가 있으므로 이 것을 토대로 코딩하면
   될 것 같음.
  
* 참고
상기의 7,8,9번은 컴파일/링크 시 헤더 파일과 리소스 파일의 디렉토리를 어떤 식으로든 컴파일러에
알려 주기만 하면 됩니다.
  즉, install하고 난 후 header 파일 고치고(xxxx.hpp), 관련된 모든 파일을 자신이 개발하는
소스 디렉토리에 몽땅 카피하고, include 와 lib 디렉토리에 현재 디렉토리를 정해주면 문제없이
됩니다.
  즉, xxxx.hpp 파일, xxxx.dfm 파일, xxxx.res 파일(CPortImg.res)을 현재 개발 소스가 있는
디렉토리에 모두 복사하고, Project -> Option 에서 Directories/Conditionals 탭에서 include와
lib 디렉토리를 현재 디렉토리를 추가(default로 현재 디렉토리가 있음)하면 됩니다. 이 방법이
위의 7,8번의 과정을 거치지 않아서 좀더 간편한 방법 같습니다.
  아니면 모든 연관된 파일을 Program Files\Borland 쪽으로 가져다 놓는 것인데.. Builder 다시 깔고
뭐 이리 저리 왔다갔다 하는 과정에서 보니-제경우 좀 불편한 면이 있어서요..
  아뭏튼 구미에 맞게 사용하시길...

**
참고로 Cport-3.0.zip에 있는 CBuilder용 example은 5.0으로 되어 있으며 6.0에서
컴파일 시 이런 저런 에러가 발생하였으며 Lib 파일도 5.0으로 빌드된 파일을 찾고 해서,
이래 저래 실행해보지 못했음. 단, 코드 정도는 참고할 정도가 됨.

-볼랜드포럼에서 발췌 -

'S/W 개발 > Embarcadero' 카테고리의 다른 글

Edit 창에 숫자만 입력 받기..  (0) 2007.12.26
Cport 설정 방법  (0) 2007.12.06
Delphi 2007 키오류 수정방법  (0) 2007.12.06
[펌]윈도우 프로그램에서 printf 사용하기  (0) 2007.12.06
1) Uninstall Delphi 2007.

2) Remove the Program Files\CodeGear\RAD Studio\5.0 directory.

For Windows Vista:

3a) Remove the Program Data\CodeGear\RAD Studio\5.0 directory.

3b) Remove the Program Data\{AB3EC276... directory.

3c) Remove the User\All Users\CodeGear\RAD Studio\5.0 directory.

For pre-Vista Windows OS:

3a) Remove the Documents and Setting\All Users\Application Data\CodeGear\RAD Studio\5.0 directory.

3b) Remove the Documents and Setting\All Users\Application Data\{AB3EC276... directory.

4) If you had the Trial or Enterprise version installed and are now installing the Professional version, then run Regedit and remove the key: HKEY_CURRENT_USER\Software\Borland\BDS\5.0

5) Re-install Delphi 2007.

'S/W 개발 > Embarcadero' 카테고리의 다른 글

Cport 설정 방법  (0) 2007.12.06
Delphi 2007 키오류 수정방법  (0) 2007.12.06
[펌]윈도우 프로그램에서 printf 사용하기  (0) 2007.12.06
사용자 메시지 박스 만들기  (0) 2007.12.06
윈도우 프로그램을 짜면서 제일 짜증나는 부분이 printf 를 제대로 쓸수 없다는 것이다.
printf 는 표준 화면으로 출력을 내보내기 때문에...
그래서 Memo 로 출력할때 IntToStr , StrToInt 등을 무진장 써야된다.
하지만 sprintf 를 쓰면 Dos 에서 printf 를 쓰듯이 모든 형식지정자를 다 사용할 수 있으며
간단히 메모장으로 출력을 할 수 있다.


또는


와 같이 해도 된다.

하지만 다른 C program 과의 호환성을 생각해 보면 Ansistring 의 Method
쓰는것은 별로 좋지 않을듯...

볼랜드포럼 향기님 글에서 발췌...


메시지 다이얼로그가 매일 같은것만 보기가 싫어서 조금 변경해 보았다..

전역 함수로 놔두고 쓰면 괜찮을듯.

인자 처리만 몇개 더 처리하면 편할듯...

#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164064862089986280348253421170679821480865132823066479384460955058231725

double tmpA, tmpB,tmpC;
tmpB = edtX2->Text.ToDouble() - edtX1->Text.ToDouble();
tmpC = edtY2->Text.ToDouble() - edtY1->Text.ToDouble();
tmpA = sqrt(pow(tmpB, 2) + pow(tmpC, 2));

lblA->Caption = "빗변 :" + (String)tmpA;
lblB->Caption = "
밑변 :" + (String)tmpB;
lblC->Caption = "
높이 :" + (String)tmpC;

// 직각
lblAngleA->Caption =  "각도 A : " + (String)((atan2(tmpB, tmpC) + atan2(tmpC, tmpB)) * 180 / PI);

// 밑변에 인접한 각    tmpB tmpA의 각
lblAngleB->Caption =  "각도 B : " + (String)(atan2(tmpB, tmpC) * 180 / PI);

// 높이에 인접한 각    tmpC  tmpA의 인법한 각
lblAngleC->Caption =  "각도 C : " + (String)(atan2(tmpC, tmpB) * 180 / PI);


---------------------------------------------------------------------------------------------

한변과 한 각을 알때 처리..


밑변이 x 이고 한각이 a 이고 다른 한각이 90도일때의

높이 구하는 방법은

? = x * tan(a) ;

간단히 구할수 있음...

컴포넌트를 작성하거나 남이 만든 컴포넌트를 사용하다보면 아이콘이 맘에 들지 않거나 없는 경우가 많이 있다.

이럴 경우 X박스를 그냥 써도 되나..

존심상 나타나게 하고 싶을때..는

다음과 같은 방법을 사용하면 된다..

만약 소스에 dcr이나 res 파일이 있다면 그 파일을 사용하면 된다..
이 경우 이름이 같으면 된다(뭐.. 이름이 다르다면 소스와 같은 이름으로 만들면 된다..
가끔씩 이름만 같아도 안 되는 경우가 있다..
이럴때는 Resource 에디터를 이용해 리소스를 열어보면 리소스 명이 소스명과 다를 경우가 태반이다..
리소스명을 소스와 같은 파일로 작성해 준다..(어렵지도 않음)

compile과 make 작업을 다시 해주면 짜잔~~ 하고 나타날 것이다.. (가끔은 해당 컴포넌트를 제거하고 재설치 해야 되는 경우도 있다)

소스 상단부에 해당 리소스를 넣거나 파일 추가시 넣어주는 방법도 있으나 위의 작업이 되지 않는다면 어차피 나타나지 않는다..
직접 리소르를 넣어줄경우 가끔씩 이미 패스가 지정되어서 안 된다고 할때는 기존 패스를 삭제하고 리소스를 추가하면 나타날 것이다..

허접한 팁하나를 올림...

전에 만들어 보았던 이벤트 다이얼로그의 VCL 판이다..

MFC에서는 여러 함수를 사용했는데.. BDS에서는 간단하게 구성해 보았다..

스플래쉬 폼이랑 비슷하지만.. 이번것은 메시지를 2개 처리하고 시간을 초단위(1초 = 1)로 처리하고 위치를 지정할 수 있게 바꾸어 보았다.

생성부 함수를 조금 변경해서 작성했다..

타이머를 하나 얹어서 타이머 시간이 되면 사라지는 방식이다.(정밀한 시간 제어가 필요없는 것이어서.. 그냥.. 간단하게 작성했다..)

전과 다른점은 화면 배경을 jpg 화면을 올려서 구분을 지어 주었다..

차후에 변경한다면.. 이벤트에 맞는 그림 처리까지 해서 더 자세한 설명을 해주는것도 하나의 방법일 듯 싶다..
그리고, 빠트린 창을 클릭하면 자동으로 사라지는 것도 추가해야 될듯 싶다..

그리고, 한가지 더.. 영역을 임의로 정해서 투명창을 작성하였다.. 이 방법은 추후 다른 프로그램에서도 사용이 가능할 듯 싶다..


예전에 작업하던것을 날려 버렸다.. ㅠㅠ

그래서, 어제 오늘 맘 잡고 다시 시작했다...

어느 정도 작업이 된듯하다.. 매끄럽지 않은 부분도 많지만...

그래도 내 혼자 쓰기에는 아무런 문제가 없는듯.. 뭐.. 이상한 부분은 다시 수정하면 되니까..

우선 1차 수정안을 올려 놓는다...

추후에 변경되면 화일을 변경하면 되니까..

저작권 문제가 있을지 모르니...

암호는 걸어놔야겠군.

수정기간 : 1.5day
간단하지만.. 자주 까먹는 관계로 정리..
VCL에서 날짜는 상수부분에서 처리
시간은 소수점 이하 지수부에서 처리..
시간 날짜 동시에 처리할 경우에는 double이나..TDateTime 변수 사용..

///////////////. hpp ///////////////////////////////////////
#include "time.h"

// 변수 정의
 TTime  tMin;    // 경과시간
 TTime  tEnd;    // 마지막 정지 시간
 TTime  tNow;   // 현재 사용 시간 
 TTime  tPost;   // 사용 시간 임시 저장용..  
 TTime  tStart;   // 사용 시간 임시 저장용..

 TTime d_time ;

// TTime 은 시간만 처리시(소수점 이하만 구함)
// TDate 는 날짜만 처리히(상수부만 처리)
// TDateTime 는 상수와 지수부분 모두 처리.

/////////////// .cpp //////////////////////////////////////

   //변수 기본값 처리..
   tMin = 0;
   tEnd  = Now();   // 날짜와 시간 모두 처리.. 시간만 처리시는 Time(),  날짜만 처리시는 Data()
   tPost = 0;  
   tStart = Now();  

   // 일시 멈춤시 이전값 저장..
    tPost =  tMin;


    // 시간 구하기..
    tNow = Now(); 
    tMin = tNow - tEnd + tPost;

   // 시간 표시.
 d_time = Global->tMin;  
 DecodeTime(d_time, Hour, Min, Sec, MSec);
 lbl_UseTime->Caption = AnsiString().sprintf("작업 시간 : %02d:%02d:%02d", Hour, Min, Sec);
폼을 기본으로 작성된 클래스라면..

TMyClass MyClass; 

로 생성하면 됨...

VCL 기반이라면...

아래의 방법으로 생성..

TMyClass* pMyClass = new TMyClass();

아래는 볼랜드포럼에서 퍼온 내용...

========================================================================================================


클래스 자체가 꼭 new 로 생성을 해야만 메모리가 할당되는 것은 아닙니다.

class TMyClass
{
    Method1()
    ...
}

으로 만드신 베이스 클래스라면 일반 스트럭처와 동일하게 사용할 수 있습니다.
스트럭처와 클래스는 분명 큰 차이점이 있지만 그 기반은 동일하니까요.

TMyClass MyClass;

MyClass.Method1() 의 형식으로 호출이 가능하며 메모리 누수와는 관계가 없습니다.
그리고 MyClass 는 컴파일 시에 TMyClass 만큼의 메모리가 할당되며 프로그램 종료시에
해제됩니다.

보통 빌더에서 new 를 사용해서 객체를 생성하는 것은 델파이에서 온 VCL Class 때문입니다.
VCL 클래스는 반드시 new 를 통한 메모리 할당을 통해서 이용해야 합니다.
VCL 의 구조적 특성( ^^ 예전에 읽었는데 영문이라 대충 읽어서 ... ) 때문입니다.

만약 클래스를 VCL 클래스 기반으로 만든다면 VCL 베이스 클래스인 TObject 를
상속받으시면 됩니다.

class TMyClass : public TObject
{
    Method1()
    ...
}

TMyClass* pMyClass = new TMyClass();
pMyClass->Method1();

이 되는 것이죠....

'S/W 개발 > Embarcadero' 카테고리의 다른 글

간단한 시간 날짜 계산  (0) 2007.12.06
BCB에서 클래스 참조시 주의사항  (0) 2007.12.06
BDS 단독 실행 프로그램 만들기  (0) 2007.12.06
볼랜드 기본 칼라 Define  (0) 2007.12.06

+ Recent posts

티스토리 툴바