兄弟姐妹们, 我向一个Edit发送了一条消息它却没收到, 目的是让收到消息的控件失去焦点就相当于让其触发OnExit事件, 如何解决的? 测试程序如下:unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, SUIEdit, SUIButton;const
  WM_EditExitMsg = WM_User+100;type
  TForm1 = class(TForm)
    suiButton1: TsuiButton;
    suiEdit1: TsuiEdit;
    suiEdit2: TsuiEdit;
    Edit1: TEdit;
    Button1: TButton;
    procedure suiButton1Click(Sender: TObject);
    procedure suiEdit1Exit(Sender: TObject);
  private
    { Private declarations }
    procedure BurstOnExit;
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  p:tpoint;
  i:hwnd;implementation{$R *.DFM}procedure TForm1.BurstOnExit;
var
  Handle: THandle;
begin
  GetCursorPos(P);
  Handle:= WindowFromPoint(Mouse.CursorPos);
  PostMessage(Handle, CM_EXIT, 0, 0);
end;procedure TForm1.suiButton1Click(Sender: TObject);
begin
  BurstOnExit;
end;procedure TForm1.suiEdit1Exit(Sender: TObject);
begin
  ShowMessage('Receive!');
  Close;
end;end.

解决方案 »

  1.   

    如果是在一窗體,直接postmessage(edit1.handle,cm_exit,0,0);
    你按下button1後,mouse.cursorpos返回值是button1的位置,得到的句柄也是button1的,edit當然沒反應呀.
      

  2.   

    如果不是按下button1呢? 例如按Image1, Panel1。
      

  3.   

    還不是一樣的道理嘛,按下什麼得到什麼的句柄,而不是edit的
    你的brustonext實現過程有問題,windowfrompoint通常是配合timer事件執行的.
    你要發送的edit是否在同一窗體呢?說清楚點呀.
      

  4.   

    大侠, 我用的是第三方控件, 你就当我的Edit在另一个窗体吧, Delphi标准的控件是会自动转换焦点的, 而第三方控件做得不完整, 所以我才想自己解决。
      

  5.   

    呵呵,別叫我大俠,受之有愧呀,我還只是個菜鳥.
    如果你的窗體只有一個edit的話,試試以下代碼:
    procedure tform1.button1click(sender:tobject);
    var
    h:hwnd;
    begin
    h:=findwindowex(findwindow(nil,'your form"s caption'),0,'tedit',0);
    sendmessage(h,cm_exit,0,0);
    end;
      

  6.   

    PostMessage(Edit1.Handle, CM_EXIT, 0, 0);