哪位高手能否告诉我如何在一个窗体里找到多个edit控件的句柄,谢谢?用findwindowex好象不行.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
    begin
        s:='edit1';
        if self.FindComponent(s) is TEdit then 
    SendMessage(TEdit(self.FindComponent(s)).Handle,WM_SETFOCUS,0,0);//此处可根据你的需要写相应事件
    end;
      

  2.   

    用shellexecute(handle,'Open',pchar('文件名.exe'),,,sw_shownormal);可以调用外部的.exe文件
    use 加上ShellAPI
      

  3.   

    打开后怎么对他里面的edit进行操作,就是取得各个edit的句柄
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, DB, ADODB;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Edit6: TEdit;
        Edit7: TEdit;
        Edit8: TEdit;
        Edit9: TEdit;
        Edit10: TEdit;
        Edit11: TEdit;
        Edit12: TEdit;
        Button2: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        Label11: TLabel;
        Label12: TLabel;
        Button3: TButton;
        GroupBox1: TGroupBox;
        Label13: TLabel;
        Label14: TLabel;
        Label15: TLabel;
        GroupBox2: TGroupBox;
        Label16: TLabel;
        Label17: TLabel;
        Label18: TLabel;
        Label19: TLabel;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        procedure Button1Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject); var  S: string;
      L: Integer;x12,x11,x10,x9,x8,x7,x6,x5,x4,x3,x2,x1,main,vHandle:THandle;begin
      vHandle := FindWindow(nil,'证件照图片浏览');
      if vHandle = 0 then
      ShowMessage ('目标窗口没找到!');
      main := FindWindowEx(vHandle, 0,'edit',nil);
      x1:=findwindowex(vhandle,main,'edit',nil) ;
      x2:=findwindowex(vhandle,x1,'edit',nil) ;
      x3:=findwindowex(vhandle,x2,'edit',nil) ;
      x4:=findwindowex(vhandle,x3,'edit',nil) ;
      x5:=findwindowex(vhandle,x4,'edit',nil) ;
      x6:=findwindowex(vhandle,x5,'edit',nil) ;
      x7:=findwindowex(vhandle,x6,'edit',nil) ;
      x8:=findwindowex(vhandle,x7,'edit',nil) ;
      x9:=findwindowex(vhandle,x8,'edit',nil) ;
      x10:=findwindowex(vhandle,x9,'edit',nil) ;
      x11:=findwindowex(vhandle,x10,'edit',nil) ;
      x12:=findwindowex(vhandle,x11,'edit',nil) ;  L := x1;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x1, WM_GETTEXT, L, Integer(@S[1]));
      edit1.Text:=s;  L := x2;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x2, WM_GETTEXT, L, Integer(@S[1]));
      edit2.Text:=s;  L := x3;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x3, WM_GETTEXT, L, Integer(@S[1]));
      edit3.Text:=s;  L := x4;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x4, WM_GETTEXT, L, Integer(@S[1]));
      edit4.Text:=s;    L := x5;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x5, WM_GETTEXT, L, Integer(@S[1]));
      edit5.Text:=s;  L := x6;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x6, WM_GETTEXT, L, Integer(@S[1]));
      edit6.Text:=s;    L := x7;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x7, WM_GETTEXT, L, Integer(@S[1]));
      edit7.Text:=s;  L := x8;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x8, WM_GETTEXT, L, Integer(@S[1]));
      edit8.Text:=s;    L := x9;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x9, WM_GETTEXT, L, Integer(@S[1]));
      edit9.Text:=s;  L := x10;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x10, WM_GETTEXT, L, Integer(@S[1]));
      edit10.Text:=s;    L := x11;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x11, WM_GETTEXT, L, Integer(@S[1]));
      edit11.Text:=s;  L := x12;
      if L <= 0 then Exit;
      SetLength(S, L);
      SendMessage(x12, WM_GETTEXT, L, Integer(@S[1]));
      edit12.Text:=s;end;procedure TForm1.Button3Click(Sender: TObject);
    begin
    form1.Close;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from 学生信息');
    ADOQuery1.Open;
    ADOQuery1.Edit;
    ADOQuery1.Last;
    ADOQuery1.Append;ADOQuery1.FieldByName('图片编号').AsString:=Edit1.Text;
    ADOQuery1.FieldByName('姓名').AsString:=edit2.Text;
    ADOQuery1.FieldByName('身份证').AsString:=Edit3.Text;
    ADOQuery1.FieldByName('学校').AsString:=Edit4.Text;
    ADOQuery1.FieldByName('学校代码').AsString:=edit5.Text;
    ADOQuery1.FieldByName('性别').AsString:=Edit6.Text;
    ADOQuery1.FieldByName('学号').AsString:=Edit7.Text;
    ADOQuery1.FieldByName('毕业时间').AsString:=edit8.Text;
    ADOQuery1.FieldByName('学位').AsString:=Edit9.Text;
    ADOQuery1.FieldByName('办学性质').AsString:=Edit10.Text;
    ADOQuery1.FieldByName('学生代码').AsString:=edit11.Text;
    ADOQuery1.FieldByName('专业').AsString:=Edit12.Text;
    ADOQuery1.Post;
    edit1.text:='';
    edit2.text:='';
    edit3.text:='';
    edit4.text:='';
    edit5.text:='';
    edit6.text:='';
    edit7.text:='';
    edit8.text:='';
    edit9.text:='';
    edit10.text:='';
    edit11.text:='';
    edit12.text:='';end;end.
      

  5.   

    仔细看看上面的代码我研究了好久做出来的资料上没有的;就是获得一个窗体上多个EDIT的方法我这个例子是获得多个EDIT里面的内容然后提交到数据库中
      

  6.   

    刚刚看到你 发的短信息  :)建议首先用spy++看看窗口的层次结构 然后……var
      ehandle1, ehandle2: THandle;
    begin
      ehandle1 := FindWindowEx(父窗口句柄, 0, 'Edit', nil); //第一个edit的句柄
      ehandle2 := GetWindow(ehandle1 ,GW_HWNDNEXT);         //遍历得到第二个edit的句柄