1。什么叫句柄? 2.怎么获得一个应用程序的句柄? 3. 有一个应用程序A1,它包含一个窗体forma1(forma1为窗体名),forma1里面有一个Edit1   另外有一个应用程序A2,它也包含一个窗体forma2(forma2为窗体名),forma2里面有一个Edit2    我如何在应用程序A2的窗体forma2环境下获得应用程序A1的窗体forma1的Edit1.text?    请给出代码,谢谢!!

解决方案 »

  1.   

    先在form1里useform2
    然后随便哪个事件里写form1.Edit1.text就可以得到
      

  2.   

    procedure TForm1.Button5Click(Sender: TObject);
    var
      Handle, ChildHandle: HWND;
      clsName: pchar;
      text: array[0..255] of char;
      buffer: array[0..255] of char;
    begin
      getmem(clsName, 255);
      Handle := FindWindow(nil, 'forma1');
      if Handle <> 0 then
      begin
        ChildHandle := GetWindow(Handle, GW_Child);
        while ChildHandle <> 0 do
        begin
          GetClassName(ChildHandle, clsName, 255);
          //showmessage(clsName);
          if string(clsName) = 'TEdit' then
          begin
            getwindowtext(ChildHandle, text, 255);
               // setwindowtext(ChildHandle,'343434');
            StrCopy(buffer, 'DELPHI');
            SendMessage(ChildHandle, WM_SETTEXT, 0, Integer(@buffer));        showmessage(text);
          end;
          ChildHandle := GetWindow(ChildHandle, GW_HWNDNEXT);
        end;
      end;
      freemem(clsName, 255);
    end;
      

  3.   

    1.所谓句柄就是Windows操作系统中用来标识各种对象的一个整型值。你有了句柄就可以操作一个对象(不管他是GDI对象还是组件对象)
    2.
    你可以使用发送消息的方式来传递Edit1.Text.
    比如在A1程序里面有一个按钮,按钮的单击事件这样写
    const
      MY_MESSAGE = WM_USER + 1;var
      p :PChar;
    begin
      p := PChar(Edit1.Text);
      SendMessage(A2应用程序的句柄, MY_MESSAGE, @p, 0);
    end;A2应用程序就处理MY_MESSAGE的wParam参数
    var
      p :PChar;
    begin
      p := PChar(Msg.wParam);
      ShowMessage(StrPas(p));
    end;
      

  4.   

    1、句柄是一个整型,一般指的是window默认配置给每一个窗体的唯一型的数字,就像数据库中的自增id号的性质一样,是用来区分每个窗体的
    2、应用程序的句柄你可以用Application.Handle来获得,当前窗体的句柄可以用Self.Handle来获得,其他的程序你不能得到像Application.Handle这样的应用程序句柄,不过你可以用FindWindow等相关API函数得到它的窗体句柄,用CreateToolhelp32Snapshot和Process32First等函数得到它的进程句柄,
    3、正如一楼所说,form1里user form2,form2里user form1,快捷键用ALT+F11(如果我没记错的话),就可以互相调用了