*****请教高手 如何获得句柄?*****

yanghoyu 2004-04-03 12:33:30
环境: 有一个Form1,里面有三个TEdit生成的Edit1,Edit2,Edit3而且都是没有caption的
要求: 编写另外一个程序,能分别获得Form1里面三个Edit的句柄
...全文
125 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
nyf1220 2004-04-12
  • 打赏
  • 举报
回复
谢谢 xzhifei(星级饭桶·飞) ,你的方法基本可以~
to apololi(杭州小子) ,如果是外部程序的edit,它的tag我就无法知道,怎么用你的方法?
menggirl 2004-04-12
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
FoundWindow: HWND;
WindowText: array[0..255] of char;
begin
{find a TEdit child window}
FoundWindow:=FindWindowEx(Form1.Handle, 0, 'TEdit',nil);

{get its text...}
GetWindowText(FoundWindow, WindowText, 255);

{...and display it}
Label1.Caption:='FindWindowEx found window handle '+IntToStr(FoundWindow)+
': '+WindowText;

end;
apololi 2004-04-12
  • 打赏
  • 举报
回复
你们想那么复杂干什么,要区分3个edit控件很简单.用edit的tag属性啊.譬如Edit1.tag := 1;
Edit2.tag := 2;Edit3.tag := 3

for i := 1 to Form.ComponentCount do begin
if (Form.Components[i] is TEdit) begin
case (Form.Component[i] as TEdit).tag of
1: Edit1
2: Edit2
3: Edit3
end;
end;
end;

这样就区分了3个Edit控件,我目前想到的比较简单的方法,如果各位有更好的方法,跟着贴啊
xzhifei 2004-04-12
  • 打赏
  • 举报
回复
如果你知道每个控件的大约位置,就可以使用ChildWindowFromPointEx:
用ChildWindowFromPointEx可以得到,hParent是窗体句柄,Point(x, y) 是控件的大约
位置,CWP_ALL表示所有控件,也可以制定只取某类控件,函数返回值为控件句柄。
ChildWindowFromPointEx(hParent, Point(x, y) , CWP_ALL);
下面是我写的一个获取别的程序edit的内容的例子
procedure TForm1.Button1Click(Sender: TObject);
var
hParent, hEdit: HWND;
u: pchar;
begin
try
hParent := FindWindow(nil, 'fromB的标题');
if hParent = 0 then
showmessage('窗口没有找到!')
else
begin
hEdit := ChildWindowFromPointEx(hParent, Point(10, 10) //大约位置
, CWP_ALL);
if hEdit = 0 then
showmessage('Edit没有找到!')
else
begin
U := StrAlloc(250);
SendMessage(hEdit, WM_GETTEXT, 249, Integer(U));
edit1.Text := Strpas(u);
end;
end;
except
end;
end;
qiume 2004-04-12
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Edit1.Name + '的句柄 ' + IntToStr(Edit1.Handle));
ShowMessage(Edit2.Name + '的句柄 ' + IntToStr(Edit1.Handle));
ShowMessage(Edit3.Name + '的句柄 ' + IntToStr(Edit1.Handle));
end;

end.
qiume 2004-04-12
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Edit1.Name + '的句柄 ' + IntToStr(Edit1.Handle));
ShowMessage(Edit2.Name + '的句柄 ' + IntToStr(Edit1.Handle));
ShowMessage(Edit3.Name + '的句柄 ' + IntToStr(Edit1.Handle));
end;

end.
nyf1220 2004-04-12
  • 打赏
  • 举报
回复
比较他们之间的相对位置来确定哪个是哪个
获得位置的函数GetWindowRect

不知道可以吗,
一会试试
dext 2004-04-06
  • 打赏
  • 举报
回复
tag属性啦!
welllove88 2004-04-06
  • 打赏
  • 举报
回复
问题没这么复杂吧!!标准的API函数都可以做到的,如果不相信我把API手册发给你啊
ADWARDS00 2004-04-06
  • 打赏
  • 举报
回复
GetClassName得到的三个都是Edit类,怎样区分?

这个问题你可以把3个edit分别命名掉,比如edtone,edttwo,edtthree,这样你得到类名的时候就是Tedtone,Tedttwo,Tedtthree
jiangshi99 2004-04-06
  • 打赏
  • 举报
回复
ChenCCC 2004-04-06
  • 打赏
  • 举报
回复
比较他们之间的相对位置来确定哪个是哪个
获得位置的函数GetWindowRect
nyf1220 2004-04-06
  • 打赏
  • 举报
回复
都没有把问题的实质搞清楚

我也遇到过类似的问题

比如说某个外部程序,上面有三个edit,都没有text或者所谓的capiton
那么,如何用findwindowex,得到我想得到的某个edit的handel呢??

我始终没有解决,不知道还有哪个高人,帮忙~~
ChenCCC 2004-04-05
  • 打赏
  • 举报
回复
汗还要区分

没有caption的要求,不太可能区分,最多是获得先后区别,我说要用GetClassName是要你区分Button只类的控件
yanghoyu 2004-04-04
  • 打赏
  • 举报
回复
你们的答案很有灌水的嫌疑^_^!
那么容易的话,为什么不把代码给我?!
GetClassName得到的三个都是Edit类,怎样区分?
ChenCCC 2004-04-04
  • 打赏
  • 举报
回复
回复人: redlegend_126_com(redlegend)
用api函数呀
findwindow
findwindowex
具体的帮助可以参考delphi在线帮助!

简单使用上面的应该不可以
还要用GetClassName来确定该控件是Edit控件
redlegend_126_com 2004-04-04
  • 打赏
  • 举报
回复
用api函数呀
findwindow
findwindowex
具体的帮助可以参考delphi在线帮助!
zhlwyy 2004-04-04
  • 打赏
  • 举报
回复
for i := 1 to 3 do
TEdit(FindComponent('edit'+inttostr(i)));
bottom 2004-04-04
  • 打赏
  • 举报
回复
查DELPHI帮助关于FindComponent就很清楚了!
yanghoyu 2004-04-03
  • 打赏
  • 举报
回复
能把整个过程都贴出来吗?
加载更多回复(1)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧