如何根据窗体类名(字符串)来访问窗体 ( 积分: 100 )

  • 主题发起人 主题发起人 mevip
  • 开始时间 开始时间
M

mevip

Unregistered / Unconfirmed
GUEST, unregistred user!
有窗体1(类名为TForm1)和窗体2,现在想在窗体2中根据窗体1的类名(即,字符串TForm1)来访问窗体1,如何实现?请注意是根据字符串类名来实现,谢谢!
 
有窗体1(类名为TForm1)和窗体2,现在想在窗体2中根据窗体1的类名(即,字符串TForm1)来访问窗体1,如何实现?请注意是根据字符串类名来实现,谢谢!
 
1、FindWindow(类名, nil)获得窗口句柄
2、FindComponent

等下继续
 
最后还是自己解决了。哎。。。大富翁们都没用激情了,我的问题经常是无人问津[:(]
 
如果解决,请把解决办法写上来,以后其他人看离线论坛的时候就不用翻帖子了
 
Tform(application.FindComponent('form1')).Caption:='111111';

很简单啊。。。。
 
procedure TForm1.Timer1Timer(Sender: TObject);

var

Pos: TPoint;

Handle: HWND;

ScreenDC: HDC;

Buf: array[0..1024] of Char;

ScreenColor: COLORREF;

begin

GetCursorPos(Pos)
// 得到当前光标位置

Handle := WindowFromPoint(Pos)
// 返回当前位置的句柄

HandleText.Caption := IntToStr(Handle)
//显示句柄

GetClassName(Handle, Buf, 1024)
// 得到类名

ClassNameText.Caption := Buf
//显示当前所指控件类名

SendMessage(Handle, WM_GETTEXT, 33, Integer(@Buf))
// 得到标题

TitleText.Caption := Buf
//显示当前控件的内容

//如edit1为密码框时可显示的出里面的内容。
 
chenybin大大:您上次就给过我这样一个代码的。。
方法一,handle1:=findWindowEx(0,0,'className',nil);//得主句柄
EnumChildWindows(handle1,@EnumChildWndProc,0)
//杖举子控件
getClassName(aWndHandle,stringClassName,integerLength);//得子控件名
handle2:findWindowEx(handle1,0,string(stringClassName),nil);//子控件句柄
 
用类名啊。。。。。

var
i:integer;
begin
for i:=0 to application.ComponentCount-1 do
if application.Components.ClassName='TForm1' then
begin
Tform1(application.Components).Caption:='11';
break;
end;
end;
 
学习中......
 
我系统的一段代码,MDI窗体的,其他的也差不多.
procedure TFrmMain.CreateFormDef(Form:TFormClass);
var
i:Integer;
Flag:Integer;
begin
Flag:=0;
For i:=0 to self.MDIChildCount-1 do
begin
if self.MDIChildren.ClassName=Form.ClassName then
Flag:=1
else
if self.MDIChildren.ClassName<>'TFrm_GYInput' then
self.MDIChildren.Release;
end;
if Flag<>1 then
begin
with Form.Create(self) do
begin
Visible:=False;
ShowModal;
end;
end;
end;
 
FindWindow、application.FindComponent等等以上你们提到的那些函数使用的前提是该窗体已经创建了,也就是说这些方法对已经存在的窗体是有效的,但如果我想引用的窗体还没有创建,该怎么办?不要说创建它就行了!因为现在只知道该类名字符串!这时应该先用FindClass获得类名对应的类,然后创建,再引用!
 
用FindClass,需先注册一下窗口类RegisterClasses([TForm1])
然后就可以用FindClass('TForm1')得到类名
FrmClass := FindClass('TForm1');
if FrmClass <> nil then
FrmClass.Create(Application)
 
sixeight说的很对,这才是解决问题的关键,结贴了!
 
后退
顶部