如何获得父窗口的句柄,name等? ( 积分: 20 )

  • 主题发起人 主题发起人 net_morning
  • 开始时间 开始时间
N

net_morning

Unregistered / Unconfirmed
GUEST, unregistred user!
A窗口中,x := BForm.create(application)
BForm是A窗口的子窗口,A窗口是BForm窗口的父窗口,是这样吧?
那么如何获得父窗口的句柄,name等?
因为我要判断父窗口的名字,根据不同的名字,做不同的事情
 
用findwindow不是一样的吗
 
把application换成self,如下
form2:=Tform2.create(self);
form2.Show;
在form2中用
Tform(self.Owner).Handle 可得到你要的Handle
 
谢谢wangminqi,请问:
Tform2.create(self)
Tform2.create(nil);
Tform2.create(appliction);
主要有什么不同?
 
Tform2.create(self)
会使form2.Owner为self
Tform2.create(nil);
会使form2.Owner为nil
Tform2.create(appliction);
同理为appliction
 
consructor Create(AOwner:TComponent);是TComponent的构造函数。
如果AOwner为nil,那么创建对象要自己释放,如果不是nil而是一个TComponent或其派生类的引用,那么不必手动用代码释放你创建的对象。AOwner自己销毁时会先把你创建的对象销毁。
……………………………………………………………………………………
A窗口中,x := BForm.create(application)
BForm是A窗口的子窗口,A窗口是BForm窗口的父窗口,是这样吧?
……………………………………………………………………………………
大错特错,窗口在哪里创建跟它的父窗口是哪一个根本就没关系。我给你写了一个获取父窗口信息父窗口句柄和name的函数:

function GetFormParentWnd(AForm:TCustomForm;var hWnd:THandle):string;
const
MAX_WNDCLASS_NAME=256;
begin
SetLength(Result,MAX_WNDCLASS_NAME);
hWnd:=GetWindowLong(AForm.Handle,GWL_HWNDPARENT);
RealGetWindowClass(hWnd,PAnsiChar(Result),MAX_WNDCLASS_NAME);
end;
 
窗口在哪里创建跟它的父窗口是哪一个根本就没关系?那父窗口指的是什么呢?
我现在做的事情是这样的,
A窗口中一代码bform.create
x窗口中一代码bform.create
在bForm中,判断是哪个(A or X)打开它的。根据不同的情况,执行A.function 或者x.function。
 
不骂不行,这就叫父窗口?父窗口的含义是一个窗口显示在另一个窗口客户区域内(Client Region),比如对于Button来说,它所在的Form就是它的父窗口。如国Button在一个Panel里,那么Panel就是他的父窗口。判断在窗口在哪里创建的可以这样实现,在A单元创建时:
bform.Create(A);
在X创建时:
bform.Create(X);

那么调用函数时判断Owner就可以了。别把Windows的窗口之间的关系跟Pascal对象的关系,单元的关系放在一起。十足的SB!
 
地质灾害,**** you。我不是来虚心请教的嘛,你干吗骂我?
 
多人接受答案了。
 
后退
顶部