用sendmessage 向别个一窗体发送赋值 点击消息。

选择用线程函数解决。

调用主窗体代码:

procedure TForm1.Button17Click(Sender: TObject);
var Thd:FindForm;
begin
Thd := FindForm.Create(False);
thd.DoIt := True;
Thd.MainWnd := Self.Handle;
emrpd.Print(2) ; //弹出窗体
Thd.DoIt := False;
Thd.Free;
end;

 线程类FindForm如下:

unit Unit2;

interface

uses
  Classes,Windows,SysUtils,Messages;

type
  FindForm = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  public

    MainWnd:THandle;
    DoIt:Boolean;
  end;

implementation
uses Unit1;
{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure FindForm.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ FindForm }  
function ExFindChildWindow(const TopWnd, ParentWnd: HWND; const WindowClass, WindowName: string): HWND;
var
    ChdWnd, wnd: HWND;
    sClass, sName: string;
begin
    ChdWnd := 0;
    result := 0;
    repeat
        ChdWnd := FindWindowEx(TopWnd, ChdWnd, nil, nil);
        if ChdWnd > 0 then
        begin
            sClass := GetClassNameByWnd(ChdWnd);
            sName := GetTextByWnd(ChdWnd);
            if ((WindowClass = sClass) or (WindowClass = '')) and ((WindowName = sName) or (Pos(WindowName, sName) > 0) or (WindowName = '')) then
            begin
              Result := ChdWnd;
              Exit;
            end
            else
            begin
                wnd := ExFindChildWindow(ChdWnd, ParentWnd, WindowClass, WindowName);
                if wnd > 0 then
                begin
                  Result := wnd;
                   Exit;
                end
            end;
        end;
    until ChdWnd = 0;
end;

procedure FindForm.Execute;
var
  FormWnd:THandle;
  FilePathWnd:THandle;
  Edt_Hnd1,Edt_Hnd2,button_hnd1:THandle;
  t:string;
begin

  { Place thread code here }
 while DoIt do
 begin
 FormWnd :=  ExFindChildWindow(0, MainWnd,'', '行范围打印');
   if formwnd >0  then
   begin
     form1.Caption := 'Find:行范围打印,'+'Handle='+inttostr(FormWnd);
      Edt_Hnd1 := FindWindowEx(FormWnd, 0, 'Edit', '');
      Edt_Hnd2 := GetWindow(Edt_Hnd1,GW_HWNDNEXT); //找到下一个 控件
      button_hnd1 :=GetWindow(Edt_Hnd2,GW_HWNDNEXT);// 找到下一个 控件
      form1.Caption := 'Find:行范围打印,'+'Handle='+inttostr(FormWnd)+',EDT1= '
      +inttostr(Edt_Hnd1)+',Edt2='+Inttostr(Edt_Hnd2)+',btn1='+ IntToStr(button_hnd1);
      t:= '100';
      sendmessage(Edt_Hnd1, WM_SETTEXT, 0, LongInt(t));   //赋值消息 WM_SETTEXT
      sendmessage(Edt_Hnd2, WM_SETTEXT, 0, LongInt(t));

      sendmessage(button_hnd1,WM_LBUTTONDOWN,0,0); //按下鼠标
      sendmessage(button_hnd1,WM_LBUTTONUP,0,0);   //释放鼠标   相当于click

//      sendmessage(button_hnd1,BN_CLICKED,0,0); //点击事件不起作用,不知为什么
     DoIt := False;
     Exit;
   end;

 end; 
end;

end.

 

posted @ 2014-09-29 08:58  cnby3  阅读(392)  评论(0编辑  收藏  举报