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

yanghoyu 2004-04-03 12:33:30
环境: 有一个Form1,里面有三个TEdit生成的Edit1,Edit2,Edit3而且都是没有caption的
要求: 编写另外一个程序,能分别获得Form1里面三个Edit的句柄
...全文
198 21 打赏 收藏 转发到动态 举报
写回复
用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)
内容概要:本文围绕“光伏-储能-数据中心”系统的容量优化配置展开研究,旨在通过构建数学模型并结合Matlab编程实现,对园区内光伏发电、储能设备与数据中心算力负荷之间的多能互补关系进行协同优化。研究综合考虑可再生能源出力的波动性、储能系统的充放电特性以及数据中心的动态用电需求与算力调度特性,建立以最小化综合成本、降低碳排放强度、提升能源自给率等为目标的多目标优化模型,并采用先进的智能优化算法(如粒子群、灰狼、鲸鱼等)进行求解,从而确定光伏装机容量与储能系统配置的最优方案。文中提供了完整的Matlab代码实现流程,涵盖数据预处理、模型构建、算法求解与结果可视化全过程,属于综合能源系统与信息基础设施深度融合的前沿交叉课题。; 适合人群:具备电力系统、能源工程、自动化或计算机等相关专业背景,熟悉Matlab编程与基本优化算法原理,从事新能源利用、绿色数据中心、综合能源系统规划与低碳调度等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握光伏-储能-数据中心耦合系统的建模思路与多能流协同机制;② 学习基于Matlab的多目标容量优化配置方法与智能算法应用技巧;③ 为工业园区、数字经济园区及绿色数据中心的能源系统规划、节能减排与可持续运行提供科学决策依据和技术解决方案。; 阅读建议:建议结合所提供的Matlab代码,深入理解目标函数设计、约束条件设定及算法实现细节,可通过调整负荷参数、改变气候数据、引入新的优化目标或约束条件等方式进行拓展性实验,以深化对系统特性的认知并提升实际科研与工程应用能力。

1,184

社区成员

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

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