Q&A

  • Message를 받는 부분입니다.
느림보 지영이가 비록 거북이 걸음이기는 하지만 조금씩 문제해결을 하고 있습니다..

물론 한델의 많은 분들의 결정적인 도움을 등에 입구요..

늘 감사하게 생각하는거 아시죠?

그런의미에서 또 질문입니다..



PCall에서 PShell에게 메세지를 보내는 내용입니다.



procedure TForm1.Button4Click(Sender: TObject);

var

s : string;

i : integer;

begin

s := '보낸다.';

for i := 1 to length(s) do

SendMessage(TargetHandle, WM_Char, ord(s[i]), 0);

end;



PShell에서 받은 메세지를 처리하는 부분입니다.



procedure WndProc(var Message : TMessage);

var

S : String;

begin

Case Message.Msg of

WM_char :

begin

???????

//PCall에서 SendMessage로 보낸 '보낸다'를 Memo1에 출력하기.

Memeo1.Lines.Add(S);

end;

inherited WndProc(Message);

end;





여기서 바로 ???? 부분을 어떻게 구현해야 할지 막연합니다.

어떻게 해야할지.. 조언 부탁드립니다.









1  COMMENTS
  • Profile
    1999.05.15 23:02
    제가 델파이로 api를 공부하다가..



    wm_char 을 받는 부분을 사용한게 있네요..

    도움이 될지는 모르겠지만 보내 봅니다..

    뷰창에다가 그냥 눌린 키보드를 뿌리는 예제이며..

    순수 API 만 이용해 만들었습니다..



    program Window;



    uses

    Windows, Messages;



    const

    AppName = 'Window';



    function WindowProc(Window: HWnd; AMessage, WParam,

    LParam: Longint): Longint; stdcall; export;

    var

    rhdc : hdc;

    szbuffer : string;

    begin

    WindowProc := 0;



    case AMessage of

    wm_char: begin

    rhdc:=getdc(window);

    szbuffer:=char(wparam);

    textout(rhdc,0,0,pchar(szbuffer),4);

    releasedc(window,rhdc);

    result:=0;

    end;

    wm_Destroy: begin

    PostQuitMessage(0);

    Exit;

    end;

    end;



    WindowProc := DefWindowProc(Window, AMessage, WParam, LParam);

    end;



    { Register the Window Class }

    function WinRegister: Boolean;

    var

    WindowClass: TWndClass;

    begin

    WindowClass.Style := cs_hRedraw or cs_vRedraw;

    WindowClass.lpfnWndProc := @WindowProc;

    WindowClass.cbClsExtra := 0;

    WindowClass.cbWndExtra := 0;

    WindowClass.hInstance := HInstance;

    WindowClass.hIcon := LoadIcon(0, idi_Application);

    WindowClass.hCursor := LoadCursor(0, idc_Arrow);

    WindowClass.hbrBackground := HBrush(Color_Window);

    WindowClass.lpszMenuName := nil;

    WindowClass.lpszClassName := AppName;



    Result := RegisterClass(WindowClass) <> 0;

    end;



    { Create the Window Class }

    function WinCreate: HWnd;

    var

    hWindow: HWnd;

    begin

    hWindow := CreateWindow(AppName, 'Object Pascal Window',

    ws_OverlappedWindow, cw_UseDefault, cw_UseDefault,

    cw_UseDefault, cw_UseDefault, 0, 0, HInstance, nil);



    if hWindow <> 0 then begin

    ShowWindow(hWindow, CmdShow);

    UpdateWindow(hWindow);

    end;



    Result := hWindow;

    end;





    var

    AMessage: TMsg;

    hWindow: HWnd;

    begin

    if not WinRegister then begin

    MessageBox(0, 'Register failed', nil, mb_Ok);

    Exit;

    end;

    hWindow := WinCreate;

    if hWindow = 0 then begin

    MessageBox(0, 'WinCreate failed', nil, mb_Ok);

    Exit;

    end;



    while GetMessage(AMessage, 0, 0, 0) do begin

    TranslateMessage(AMessage);

    DispatchMessage(AMessage);

    end;

    Halt(AMessage.wParam);

    end.



    도움이 되기를 바랍니다..



    류민철...