Q&A

  • 사용자 정의 윈도우 메세지 사용에 대해서..
안녕하십니까..



다름이 아니라.. 두개의 애플리케이션 사이의 데이타 연동을 윈도우 메세지를 이용하여 하려고 합니다.. 좀 질문이 이상한 것 같은데..



구체적으로 말씀드리면.. 한 애플리케이션에서 메시지를 발생시켰을 때.. 타 애플리케이션에서 그 메세지를 인식하여 데이타를 받을 준비를 하고... 그러면 메세지를 발생한 애플리케이션에서 데이타를 보내는 식으로요..



질문드리고 싶은 것은 1) 델파이에서 이것이 가능한지.. 2) 두개의 애플리케이션을 구현하는 델파이 버전이 틀릴 경우에는 어떻게 되는지 3) 간단한 구현 방법에 대해서 알고싶습니다...



알려주시면 감사하겠습니다... 델 초보^^

1  COMMENTS
  • Profile
    구창민 2000.04.11 20:52
    여용구 wrote:

    > 안녕하십니까..

    >

    > 다름이 아니라.. 두개의 애플리케이션 사이의 데이타 연동을 윈도우 메세지를 이용하여 하려고 합니다.. 좀 질문이 이상한 것 같은데..

    >

    > 구체적으로 말씀드리면.. 한 애플리케이션에서 메시지를 발생시켰을 때.. 타 애플리케이션에서 그 메세지를 인식하여 데이타를 받을 준비를 하고... 그러면 메세지를 발생한 애플리케이션에서 데이타를 보내는 식으로요..

    >

    > 질문드리고 싶은 것은 1) 델파이에서 이것이 가능한지.. 2) 두개의 애플리케이션을 구현하는 델파이 버전이 틀릴 경우에는 어떻게 되는지 3) 간단한 구현 방법에 대해서 알고싶습니다...

    >

    > 알려주시면 감사하겠습니다... 델 초보^^





    안녕하세요~ 구창민입니다.



    답 1) 가능합니다.

    답 2) 상관없습니다.

    답 3) 여러가지 방법이 있는데요.

    간단한 구현방법은 없구요..조금씩 다 까다롭습니다.

    간단한 메세지 전달만 한다면 WM_USER 메세지를 이용하면 되겠구요,

    여용구님께서는 특정 데이타를 전달하려 하시니, 문자열이겠죠?

    WM_COPYDATA를 이용하시면 됩니다.

    아래 간단한 예제를 하나 올리죠.

    그럼, 참고 하셔서 즐거운 프로그래밍 하세요~





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

    // 던지는 넘

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

    unit usndr;



    interface



    uses

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

    StdCtrls, ExtCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    type

    tData = Record

    s: String[250];

    end;



    var

    Form1: TForm1;

    lWMsgHandle : longint;



    implementation



    {$R *.DFM}



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    lWMsgHandle := RegisterWindowMessage('나으문자열');

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    DataStruct: TCopyDataStruct;

    Data: TData;

    begin

    Data.s := '나는 구창민이다, 나는 18살이다..읔..돌날아온다..';

    DataStruct.dwData := lWMsgHandle;

    DataStruct.cbData := SizeOf(TData);

    DataStruct.lpData := @Data;

    SendMessage(hwnd_BroadCast, WM_CopyData, wParam(Application.Handle), lParam(@DataStruct));

    end;



    end.





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

    // 받는넘:

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



    unit urcv;



    interface



    uses

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

    Dialogs,

    StdCtrls;



    type

    TFReceiver = class(TForm)

    Memo1: TMemo;

    procedure FormCreate(Sender: TObject);

    private

    f_my_Messagehandle: longint;

    procedure WndProc(var wpMessage: TMessage); override;

    public

    end;



    type

    tData = Record

    s: String[250];

    end;



    var

    FReceiver: TFReceiver;



    implementation



    {$R *.DFM}



    procedure TFReceiver.FormCreate(Sender: TObject);

    begin

    f_my_Messagehandle := RegisterWindowMessage('나으문자열');

    end;



    procedure TFReceiver.WndProc(var wpMessage: TMessage);

    var

    Data: TData;

    begin

    If (wpMessage.Msg = WM_CopyData) And

    (PCopyDataStruct(wpMessage.lParam)^.dwData = f_my_Messagehandle) Then

    begin

    CopyMemory(@data, PCopyDataStruct(wpMessage.lParam)^.lpData, SizeOf(TData));

    wpMessage.Result := 1;

    Memo1.lines.add(Data.s); //메모박스에 받은 문자열을 나타낸다.

    end

    else

    inherited WndProc(wpMessage);

    end;



    end.