1.如何判断子窗体是否已经被创建!
我一般情况下会在每个FORM的ONCLOSE事件中写如
action:=cafree;或者formname := nil;free;
2.当子窗体被打开时,父窗体变灰,就是说他的菜单及其其他控件处于无法使用状态!该怎么做呢?
特此请教各位大侠!
我一般情况下会在每个FORM的ONCLOSE事件中写如
action:=cafree;或者formname := nil;free;
2.当子窗体被打开时,父窗体变灰,就是说他的菜单及其其他控件处于无法使用状态!该怎么做呢?
特此请教各位大侠!
判断的时候,向这个句柄发个RM_GetObjectInstance消息
(RM_GetObjectInstance 是系统定义的,可以直接用),这个消息会返回当前句柄所表示的窗口类的实例,也就是对象本身,如果返回的是nil,这表示这个对象已经被释放了,如果非空,则可以直接用这个消息的返回值强制转换下后就可以访问这个窗体了,呵呵,一举两得
//======================================================
//findfrm函數用來查找子窗體,若當前打開則在最前面顯示,否則打開
//======================================================
Function findfrm(frmname:String): boolean;
var i:integer;
begin
result:=false;
for i:=0 to screen.FormCount-1 do
if uppercase(screen.Forms[i].Name)=uppercase(frmname) then
begin
screen.Forms[i].BringToFront;
result:=true;
break;
end
else
result:=false;
end;
楼主用这个函数试试
procedure TmainFrm.Button1Click(Sender: TObject);
begin
if not findfrm('searchfrm') then
begin
searchfrm:=Tsearchfrm.Create(self);
searchfrm.Show;
end
else
searchfrm.BringToFront;
end;
begin
form2.Show;
form1.Enabled := false;
end;对于close其实不用你去释放,close只是把窗体关掉,并没有释放,在程序结束后窗体才会释放,而你自己进行释放的话那势必又要判断然后create,如果判断出错程序还会给你个异常,这样岂不是给自己增加了许多工作量
beign
子窗体.showmodal;//模式显示 父窗体无法操作创建窗体要做到 谁创建谁释放 窗体释放时最好freeandnil(子窗体)
本身释放 且窗体指针设为空
我一般情况下会在每个FORM的ONCLOSE事件中写如
action:=cafree;或者formname := nil;free;
if not Assigned(xxxx) then
....
2.当子窗体被打开时,父窗体变灰,就是说他的菜单及其其他控件处于无法使用状态!该怎么做呢?
特此请教各位大侠!
for i := 0 to self.ComponentCount - 1 do
if (Self.Components[i] is TWinControl)and (Self.Components[i].ClassName <> 你的那个窗体的变量.ClassName) then
TWinControl(Self.Components[i]).Enabled := False;或者
for i := 0 to self.ComponentCount - 1 do
TWinControl(Self.Components[i]).Enabled := (Self.Components[i] is TWinControl)and (Self.Components[i].ClassName <> 你的那个窗体的变量.ClassName)
如果需要,还可以命名创建子窗口。比如ichildfrm:=TXXForm.Create(self);
if assigned(ichildfrm)..已经创建
2 子窗体用showmodal打开,这 方法不可以么?
可是我的form1 false后 form2的按钮还可以点啊
是你的问题吧
2.我不知道为什么用showmodal打开子窗体是报错!错误信息为cann't make a visible window modal!是make不是create