全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1824
推到 Plurk!
推到 Facebook!

如何將 Keydown 事件送到指定 Form 中的 ActiveControl

答題得分者是:hagar
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-13 12:52:04 IP:211.21.xxx.xxx 未訂閱
若 Form2 是另一支獨立的 exe 檔 以下從 Form1 送一按鍵到 Form2 但似乎只能從 Form2 的 FormKeyDown 收到事件 而 Form2 上的 ActiveContrl (如 edit1) 收不到 OnKeyDown 事件 ... procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var DestHandle:HWND; begin DestHandle := FindWindow(nil, 'Form2'); BringWindowToTop(DestHandle) ; PostMessage(DestHandle,WM_KEYDOWN,Key,Key); end;
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-13 13:08:11 IP:202.39.xxx.xxx 未訂閱
參考這篇, 也許有些幫助: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=38172    --- 歡迎光臨 KTop 研究院
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-13 14:39:32 IP:211.21.xxx.xxx 未訂閱
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var DestHandle:HWnd;
    DestHandle2:HWnd;
begin
  DestHandle := FindWindow(nil, 'Form2');
  Memo1.Lines.Add(IntToStr(DestHandle));
  BringWindowToTop(DestHandle) ;      //使用 GetFocussedWindow 的方法 (要先取得父視窗)
  //DestHandle2:=GetFocussedWindow(DestHandle);
  //PostMessage(DestHandle2,WM_KEYDOWN,Key,Key);      //使用 GetSysFocus 的方法
  PostMessage(GetSysFocus,WM_KEYDOWN,Key,Key);
end;
//-------------------------------------------------------------------------    function TForm1.GetFocussedWindow(ParentWnd:HWnd):HWnd;
var
  OtherThreadID,Buffer : DWord;
begin
  OtherThreadID:=GetWindowThreadProcessID(ParentWnd, @Buffer);
  if AttachThreadInput(GetCurrentThreadID, OtherThreadID, true) then
  begin
    Result:=GetFocus;
    AttachThreadInput(GetCurrentThreadID, OtherThreadID, false);
  end
  else
    Result:=0;
end;
//-------------------------------------------------------------------------
function TForm1.GetSysFocus : HWnd;
Var
hOtherWin,OtherThreadID,hFocusWin : HWnd;
begin
  hOtherWin := GetForegroundWindow;
  OtherThreadID := GetWindowThreadProcessID( hOtherWin, nil);
  if AttachThreadInput( GetCurrentThreadID, OtherThreadID, true ) Then
     begin
       hFocusWin := GetFocus;
       result := GetFocus;
       AttachThreadInput( GetCurrentThreadID, OtherThreadID, False );
     end
  else
       result := getFocus;    end;
系統時間:2024-05-10 15:58:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!