느림보 지영이가 비록 거북이 걸음이기는 하지만 조금씩 문제해결을 하고 있습니다..
물론 한델의 많은 분들의 결정적인 도움을 등에 입구요..
늘 감사하게 생각하는거 아시죠?
그런의미에서 또 질문입니다..
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;
여기서 바로 ???? 부분을 어떻게 구현해야 할지 막연합니다.
어떻게 해야할지.. 조언 부탁드립니다.
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.
도움이 되기를 바랍니다..
류민철...