컴포넌트에 기본 이미지를 넣어야 할 경우가 생겼다.
이미지에 대한 rc 파일을 만들어 프로젝트에 등록시키니 res 가 나온다.
이렇게 넣어놓은 이미지 들은 디자인시에 그리고 컴포넌트 에디터에서 사용하면 잘 보인다.

그런데 Application 에 올리고 실행하면 리소스가 없다는 말이 나온다.
매번 res 파일을 등록시키긴 불편한데...
res 를 패키지 목록에 등록하니 제대로 등록되는 것 같지 않고...
방법은 매우간단했다.
Package 의 cpp 에
USERES("resourcename.res");
를 넣어주는 것으로 해결되었다.

델파이의 경우
{$R resourcename.res}
로 하면 될 것이다.

아래 정보는 정확하지 않을 가능성이 높으며, 파악된 부분에 대하여 계속 추가/수정이 가해질 것이다.



TWinControl 에서 MainWndProc 를 WindowProc 으로 하는 ObjectInstance 를 생성한다.
CreateWnd 에서 WindowClass 를 만드는데 lpgnWndProc 는 InitWndProc 이다.
InitWndProc 는 들어온 메세지를 위에서 생성된 ObjectInstance 의 WindowProc 에 날린다.

MainWndProc 에서 WindowProc 를 호출하며 이는 FWindowProc 이다.
FWindowProc 의 초기값은 WndProc 이다.


TObject 에서...
Dispatch 를 호출하면 DefaultHandler 를 호출한다.

GExperts 에는 GExperts Debug Window 가 있고, 이 곳에 메세지를 보낼 수 있는 DbugIntf.pas 유닛이 있다.
이를 다른 언어로 변환한 것이다.



'Windows > RAD Studio' 카테고리의 다른 글

[RAD] Package 에 RES 포함시키기  (0) 2008.07.24
[RAD] Window procedure 메세지 처리 순서  (0) 2008.07.02
[RAD] 컴포넌트 수동 등록  (0) 2008.06.12
[RAD] TZipBuilder 설치 순서  (0) 2008.05.27
[RAD] TListBox  (0) 2008.05.27

1. 컴포넌트 등록 (Registry)

HKEY_CURRENT_USER\Software\Borland\C++Builder\6.0\Known Packages

값 이름: bpl 절대경로
값 데이터: Packages 목록에 보여질 이름


Note: Project - Option - Packages - Runtime packages 에 들어가는 목록은 $(BCB)\bin\Default.bpr 의 <packages> 태그를 따른다. 이 곳을 수정하여 추가해야 한다.

다 적고 보니 CBuilder 하위 폴더에 bpk 가 있구나...

1. ItemIndex 의 변경 포착
  이전 Index 를 기억하여 CN_CTLCOLORLISTBOX 시에 변경을 판단해야 한다.
  (CN_CTLCOLORLISTBOX 는 리스트 칠할 때 색생을 얻는 메세지로... 이 방법은 꽁수가 되겠다. 각 변경되는 시점에서 포착하는게 정확한 구현일 듯...)

  Key 는 OnKeyDown - OnKeyUp - OnClick 순서 발생, OnClick 에서 변경 확인
  Mouse 는 OnMouseDown - OnClick - OnMouseUp 순서 발생, OnMouseDown 변경 확인
  ItemIndex 접근은 이벤트로 잡히지 않는다.

class TCustomEditor : public TDefaultEditor
{
protected:
    virtual void __fastcall EditProperty(const Designintf::_di_IProperty Prop,
        bool &Continue);
};

void __fastcall TCustomEditor::EditProperty(const Designintf::_di_IProperty Prop,
    bool &Continue)
{
    if (CompareText(Prop->GetName(), "TARGET") == 0)
    {
        Prop->Edit();
        Continue = false;
    }
    else
        inherited::EditProperty(Prop, Continue);
}

Continue 가 false 가 될 때까지 모든 Property 에 대하여 순서대로 EditProperty 가 호출된다.
대소문자 구분없이 Property name 을 비교하여 Edit 를 하고 Continue = false; 를 하면 된다.

1. namespace 는 첫 문자만 대문자로 하고 나머지는 소문자로 해야한다.

1. TCollectionItem 파생 클래스를 사용할 경우 생성자는 TCollection* 를 받아야 한다.
그렇지 않을 경우, 그 생성자는 무시된다.
TBrush/TFont/TPen 객체를 생성하도록 하고 Property 에 등록했는데
제대로 생성되지 않아 헤맸다.

int 로 사용하려면
  HexToInt 의 매개변수로 char* 형태의 16진 문자열을 넣어주고 반환 값을 이용한다.
연산 용이라면
  HexToBin 을 이용하여 배열에 값을 받아서 처리하면 된다.
 

+ Recent posts