Q&A

  • Visual C++(mfc)의 message구문을 delphi로 옮기려합니다.
* visual c++(mfc)에서 구현된 message처리 부분을 delphi로 옮기려 하는데

message처리를 해본적이 없어 이해가 잘안가는군요.

도와주세요.



// Header 파일에서

afx_msg LRESULT OnWTHLButtonDoubleClick(WPARAM wParam, LPARAM lParam);





// CPP 파일에서



ON_MESSAGE(WM_WTH_LBUTTONDBLCLK, OnWTHLButtonDoubleClick)



LRESULT CWTHTestDlg::OnWTHLButtonDoubleClick(WPARAM wParam /* wParam 에는 마우스의 X 좌표 값 */, LPARAM lParam /* None */)

{

// 처리할 내용

....

....

return TRUE;

}



3  COMMENTS
  • Profile
    최용일 2000.05.13 10:36
    하하~ 안녕하세요. 최용일입니다.



    보니까 아마도 버튼의 더블클릭이벤트같은데... 특별히 API를 써서 윈도우를 만드는것이



    아니라면 폼에 버튼하나 놓고 그것의 OnDbClick이벤트에서 처리해주시면 됩니다.



    wParam, lParam이런것은 C++코딩에 따라 다르겠지만 필요 없는 경우가 많습니다.



    대부분 이벤트핸들러에서 처리해주시면 되구요. 이 방법으로 할 수 없는 경우라면...



    그 메세지에 반응하는 메세지 핸들러를 만드시면 됩니다.



    type

    CWTHTestDlg = class(TForm)

    ...

    procedure OnWTHLButtonDoubleClick(var Message: TMessage); WM_WTH_LBUTTONDBLCLK;

    ...

    end;



    procedure CWTHTestDlg.OnWTHLButtonDoubleClick(var Message: TMessage);

    begin

    // 처리할 내용

    end;



    ^^ 항상 즐코하세요. 하하~



    이병협 wrote:

    > * visual c++(mfc)에서 구현된 message처리 부분을 delphi로 옮기려 하는데

    > message처리를 해본적이 없어 이해가 잘안가는군요.

    > 도와주세요.

    >

    > // Header 파일에서

    > afx_msg LRESULT OnWTHLButtonDoubleClick(WPARAM wParam, LPARAM lParam);

    >

    >

    > // CPP 파일에서

    >

    > ON_MESSAGE(WM_WTH_LBUTTONDBLCLK, OnWTHLButtonDoubleClick)

    >

    > LRESULT CWTHTestDlg::OnWTHLButtonDoubleClick(WPARAM wParam /* wParam 에는 마우스의 X 좌표 값 */, LPARAM lParam /* None */)

    > {

    > // 처리할 내용

    > ....

    > ....

    > return TRUE;

    > }

    >

  • Profile
    이병협 2000.05.13 19:48
    최용일님 먼저 답변에 감사합니다...



    아래 내용되로 해보았지만 무엇을 잘못하였는지 아무런 반응이 없습니다.

    제가 하려는 의도를 설명드릴께요. 그리고 source도 올립니다.



    * ACTIVE 된 윈도우의 타이틀바에 어떤 정보를 표시하는 DLL을 제공받아 DELPHI에서 사용하려 합니다



    * 제공된 DLL의 함수를 사용하여 ACTIVE된 창에 정보를 표시하고

    정보가 표시된 ACTIVE WINDOW의 TITLEBAR를 DOUBLE CLICK 했을 때 어떤처리를 하려합니다

    (ACTIVE된 WINDOW에서 DELPHI 프로그램으로 WM_WTH_LBUTTONDBCLK 메세지가 전달됨)



    * DLL을 호출하여 정보를 표시할때는 HANDLE을 파라메터로 전달합니다.



    ************ 제가 작성한 source입니다 ******************************

    unit etkunit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    ImgList, Menus, ExtCtrls, StdCtrls, OleCtrls, SHDocVw, ComCtrls, ToolWin,

    jpeg,Clipbrd;



    const

    WM_WTH_LBUTTONDBCLK = wm_app + 100;

    type

    TETKForm1 = class(TForm)

    MainMenu1: TMainMenu;

    topmostactive1: TMenuItem;

    procedure FormCreate(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure topmostactive1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    procedure CreateWnd; override;

    protected

    procedure OnWTHLButtonDoubleClick(var message:tmessage); message WM_WTH_LBUTTONDBCLK;



    end;

    //////

    function InstallWTHProc(handle: integer): pointer; stdcall

    function UnInstallWTHProc(): pointer; stdcall;

    function SetTitleString(title: pchar): pointer; stdcall;





    var

    ETKForm1: TETKForm1;

    lWMsgHandle : longint;

    SHANDLE_LIST : TSTRINGLIST;

    implementation



    uses ETKUNIT2;



    {$R *.DFM}

    function InstallWTHProc; external 'WTH.Dll' name 'InstallWTHProc';

    function UnInstallWTHProc; external 'WTH.Dll' name 'UnInstallWTHProc';

    function SetTitleString; external 'WTH.Dll' name 'SetTitleString';





    procedure TETKForm1.FormCreate(Sender: TObject);

    begin

    installWTHProc(etkform1.Handle);

    SetTitleString(pchar(edit1.text));

    end;



    procedure TETKForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    uninstallWTHProc();

    end;





    procedure TETKForm1.OnWTHLButtonDoubleClick(var message:tmessage);

    var

    Data: TData;

    begin

    ShowMESSAGE('ASDFASDF');

    end;



    end.

    ***************************************************

    ***************************************************



    최용일 wrote:

    > 하하~ 안녕하세요. 최용일입니다.

    >

    > 보니까 아마도 버튼의 더블클릭이벤트같은데... 특별히 API를 써서 윈도우를 만드는것이

    >

    > 아니라면 폼에 버튼하나 놓고 그것의 OnDbClick이벤트에서 처리해주시면 됩니다.

    >

    > wParam, lParam이런것은 C++코딩에 따라 다르겠지만 필요 없는 경우가 많습니다.

    >

    > 대부분 이벤트핸들러에서 처리해주시면 되구요. 이 방법으로 할 수 없는 경우라면...

    >

    > 그 메세지에 반응하는 메세지 핸들러를 만드시면 됩니다.

    >

    > type

    > CWTHTestDlg = class(TForm)

    > ...

    > procedure OnWTHLButtonDoubleClick(var Message: TMessage); WM_WTH_LBUTTONDBLCLK;

    > ...

    > end;

    >

    > procedure CWTHTestDlg.OnWTHLButtonDoubleClick(var Message: TMessage);

    > begin

    > // 처리할 내용

    > end;

    >

    > ^^ 항상 즐코하세요. 하하~

    >

    > 이병협 wrote:

    > > * visual c++(mfc)에서 구현된 message처리 부분을 delphi로 옮기려 하는데

    > > message처리를 해본적이 없어 이해가 잘안가는군요.

    > > 도와주세요.

    > >

    > > // Header 파일에서

    > > afx_msg LRESULT OnWTHLButtonDoubleClick(WPARAM wParam, LPARAM lParam);

    > >

    > >

    > > // CPP 파일에서

    > >

    > > ON_MESSAGE(WM_WTH_LBUTTONDBLCLK, OnWTHLButtonDoubleClick)

    > >

    > > LRESULT CWTHTestDlg::OnWTHLButtonDoubleClick(WPARAM wParam /* wParam 에는 마우스의 X 좌표 값 */, LPARAM lParam /* None */)

    > > {

    > > // 처리할 내용

    > > ....

    > > ....

    > > return TRUE;

    > > }

    > >

  • Profile
    최용일 2000.05.14 02:38
    안녕하세요. 최용일입니다.



    DLL에서 WM_WTH_LBUTTONDBCLK메세지를 만드나요? 어디에도 이 메세지를 만드는 구문이 없네요



    아마도 제가 볼땐 WM_WTH_LBUTTONDBCLK메세지가 사용자 정의 메세지가 아니라



    WTHLButton이라는 버튼의 OnDbClick이벤트같은데요..



    CWTHTestDlg다이얼로그박스에 있는 WTHLButton버튼을 더블클릭할 때 발생하는 이벤트 같은데



    ^^ 항상 즐코하세요.



    이병협 wrote:

    > 최용일님 먼저 답변에 감사합니다...

    >

    > 아래 내용되로 해보았지만 무엇을 잘못하였는지 아무런 반응이 없습니다.

    > 제가 하려는 의도를 설명드릴께요. 그리고 source도 올립니다.

    >

    > * ACTIVE 된 윈도우의 타이틀바에 어떤 정보를 표시하는 DLL을 제공받아 DELPHI에서 사용하려 합니다

    >

    > * 제공된 DLL의 함수를 사용하여 ACTIVE된 창에 정보를 표시하고

    > 정보가 표시된 ACTIVE WINDOW의 TITLEBAR를 DOUBLE CLICK 했을 때 어떤처리를 하려합니다

    > (ACTIVE된 WINDOW에서 DELPHI 프로그램으로 WM_WTH_LBUTTONDBCLK 메세지가 전달됨)

    >

    > * DLL을 호출하여 정보를 표시할때는 HANDLE을 파라메터로 전달합니다.

    >

    > ************ 제가 작성한 source입니다 ******************************

    > unit etkunit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > ImgList, Menus, ExtCtrls, StdCtrls, OleCtrls, SHDocVw, ComCtrls, ToolWin,

    > jpeg,Clipbrd;

    >

    > const

    > WM_WTH_LBUTTONDBCLK = wm_app + 100;

    > type

    > TETKForm1 = class(TForm)

    > MainMenu1: TMainMenu;

    > topmostactive1: TMenuItem;

    > procedure FormCreate(Sender: TObject);

    > procedure FormClose(Sender: TObject; var Action: TCloseAction);

    > procedure topmostactive1Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > procedure CreateWnd; override;

    > protected

    > procedure OnWTHLButtonDoubleClick(var message:tmessage); message WM_WTH_LBUTTONDBCLK;

    >

    > end;

    > //////

    > function InstallWTHProc(handle: integer): pointer; stdcall

    > function UnInstallWTHProc(): pointer; stdcall;

    > function SetTitleString(title: pchar): pointer; stdcall;

    >

    >

    > var

    > ETKForm1: TETKForm1;

    > lWMsgHandle : longint;

    > SHANDLE_LIST : TSTRINGLIST;

    > implementation

    >

    > uses ETKUNIT2;

    >

    > {$R *.DFM}

    > function InstallWTHProc; external 'WTH.Dll' name 'InstallWTHProc';

    > function UnInstallWTHProc; external 'WTH.Dll' name 'UnInstallWTHProc';

    > function SetTitleString; external 'WTH.Dll' name 'SetTitleString';

    >

    >

    > procedure TETKForm1.FormCreate(Sender: TObject);

    > begin

    > installWTHProc(etkform1.Handle);

    > SetTitleString(pchar(edit1.text));

    > end;

    >

    > procedure TETKForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    > begin

    > uninstallWTHProc();

    > end;

    >

    >

    > procedure TETKForm1.OnWTHLButtonDoubleClick(var message:tmessage);

    > var

    > Data: TData;

    > begin

    > ShowMESSAGE('ASDFASDF');

    > end;

    >

    > end.

    > ***************************************************

    > ***************************************************

    >

    > 최용일 wrote:

    > > 하하~ 안녕하세요. 최용일입니다.

    > >

    > > 보니까 아마도 버튼의 더블클릭이벤트같은데... 특별히 API를 써서 윈도우를 만드는것이

    > >

    > > 아니라면 폼에 버튼하나 놓고 그것의 OnDbClick이벤트에서 처리해주시면 됩니다.

    > >

    > > wParam, lParam이런것은 C++코딩에 따라 다르겠지만 필요 없는 경우가 많습니다.

    > >

    > > 대부분 이벤트핸들러에서 처리해주시면 되구요. 이 방법으로 할 수 없는 경우라면...

    > >

    > > 그 메세지에 반응하는 메세지 핸들러를 만드시면 됩니다.

    > >

    > > type

    > > CWTHTestDlg = class(TForm)

    > > ...

    > > procedure OnWTHLButtonDoubleClick(var Message: TMessage); WM_WTH_LBUTTONDBLCLK;

    > > ...

    > > end;

    > >

    > > procedure CWTHTestDlg.OnWTHLButtonDoubleClick(var Message: TMessage);

    > > begin

    > > // 처리할 내용

    > > end;

    > >

    > > ^^ 항상 즐코하세요. 하하~

    > >

    > > 이병협 wrote:

    > > > * visual c++(mfc)에서 구현된 message처리 부분을 delphi로 옮기려 하는데

    > > > message처리를 해본적이 없어 이해가 잘안가는군요.

    > > > 도와주세요.

    > > >

    > > > // Header 파일에서

    > > > afx_msg LRESULT OnWTHLButtonDoubleClick(WPARAM wParam, LPARAM lParam);

    > > >

    > > >

    > > > // CPP 파일에서

    > > >

    > > > ON_MESSAGE(WM_WTH_LBUTTONDBLCLK, OnWTHLButtonDoubleClick)

    > > >

    > > > LRESULT CWTHTestDlg::OnWTHLButtonDoubleClick(WPARAM wParam /* wParam 에는 마우스의 X 좌표 값 */, LPARAM lParam /* None */)

    > > > {

    > > > // 처리할 내용

    > > > ....

    > > > ....

    > > > return TRUE;

    > > > }

    > > >