再问"如何判断一个窗口是否被创建"

larryuan 2000-07-13 04:48:00
用下面的语句可以保证窗口不被重复创建了
if Assigned(yourform) then
但此窗口关闭后,就再也创建不了了.
即使加上form=nil也不行.
为什么?
...全文
186 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
larryuan 2000-07-14
  • 打赏
  • 举报
回复
to meijg:
o~~~对了,忘了,谢谢!
larryuan 2000-07-14
  • 打赏
  • 举报
回复
to fbstudio:
form还没创建,不能引用form.handle呀.
meijg 2000-07-14
  • 打赏
  • 举报
回复
窗口在被关闭之后,在程序结束之前是没有被系统自动释放掉的,如果在这时候再去创建下一个实例就会出错,你必须手工释放窗口实例
在onclose 事件里加代码:action:=cafree;
larryuan 2000-07-14
  • 打赏
  • 举报
回复
to supermmx:
这个form要自己关闭,不能用.free吧
larryuan 2000-07-14
  • 打赏
  • 举报
回复
to meijg:
在程序中这个form不mainform,要动态用application.createform创建,
用close关闭它时,不执行ondestroy.
fyje 2000-07-14
  • 打赏
  • 举报
回复
下列程序判断一个mdichildform是否已经打开,打开了激活否则创建,参考一下
procedure OpenForm(FormClass: TFormClass; var fm; AOwner:TComponent);
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms[i].ClassType=FormClass then
begin
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;
FBStudio 2000-07-13
  • 打赏
  • 举报
回复
用Windows API函数 BOOL IsWindow(HWND hWnd)试一试
hWnd就是yourform的Handle了,返回非零时表示yourform已被创建
SuperMMX 2000-07-13
  • 打赏
  • 举报
回复
在每一次 aForm.Free 后面加上 aForm := nil;
meijg 2000-07-13
  • 打赏
  • 举报
回复
你是在什么地方做的form:=nil?
在ondestory事件中做就可以了

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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