如何激活某已打开的窗体成为当前窗体?急急(20分)

  • 主题发起人 主题发起人 carrie4002
  • 开始时间 开始时间
C

carrie4002

Unregistered / Unconfirmed
GUEST, unregistred user!
如何激活某已打开的窗体成为当前窗体?
 
form1.show;
 
谢谢楼上的!你的代码调试出错。
我的目的是想:如果该窗体已经在运行,而我又再次打开
该窗体,此时就不需要创建,而只需激活它就可以了。
 
if assigned(form1) then
form1.Show
else
form1:= Tform1.create(application);
 
Form1.BringToFront;

SetForegroundWindow(Form1.Handle);
 
谢谢二位。
代码我调试了,还是不行。你们的代码应该很接近我的想法了。
我在主窗体下调用子窗体,当多次调用同一子窗体时,我希望
只显示一个,所以,在每次调用时,希望先判断该子窗体是否已经
运行(激活),如果是,则激活成当前窗体;否则,建立并激活它。
 
注明一下:我的子窗体是Align:=alNone,并设置其Left,Top,Height,Weight
属性,使其象嵌在主窗体中一样。
与这有关系吗?
 
如果是子窗体,并有多个,你可以先找到这个窗体,然后show。用下面代码试试:

function ActiveMyForm(t: String): Boolean;
var
i, j: Integer;
begin
j := 0;
for i:=0 to MDIChildCount - 1 do
begin
if MDIChildren.Caption = t then j := 1;
if j = 1 then break;
end;
if j > 0 then MDIChildren.Show;
Result := j > 0;
end;
 
for i:=0 to FrmMain.MDIChildCount-1 do
begin
fmTmp:=FrmMain.MDIChildren;
if fmTmp.Caption = scaption then
begin
if fmTmp.WindowState=wsMinimized then fmTmp.WindowState:=wsNormal;
fmTmp.BringToFront;
end;
end;
 
to slyr:谢谢你。
怪我误导了。非MDIChildren这种属性的窗体。
我只是主窗体下调用下一级窗体而已。
针对我的问题,有什么简洁有效一些的方法吗?
 
如果是这样,可以先取这个窗体的句柄,这个不用教吧。然后通过发送消息
将这个窗体设置为活动窗口即可。好象是SetActiveWindow(h),你自己调试
吧。
 
代码我都试过了,可就是没用。依然是调用一个窗体几次,
就出现几次同样的窗体。
注:在建立子窗体时,有语句:pForm.Parent:=Form1把主窗体
设置为子窗体的父窗体。有影响吗?
急哭了!
 
1、先找到你的窗体句柄: h := FinsWindow(nil, '你的窗体');
2、设置为激活: SetActiveWindow(h);
 
我的代码:
if assigned(form2) then //如该窗体已经运行,则激活它成为当前窗体
SetActiveWindow(Form12.Handle) //这样就避免同一个窗体多次调用
else //否则,创建它
begin
pForm:= TForm12.Create(application);
pForm.Show;
pForm.Parent:=Form1;
end;
 
对不起,搞错了,应该是SetForegroundWindow(h)
 
还是不行。
是否和这两条语句有关:
1、assigned(form12) //判断该窗体是否在运行状态;
2、pForm.Parent:=Form1; //创建窗体时,使 Form1成为它的父窗体;
问题在哪里?
哪位大虾,诚请!
 
在窗体的colse事件里面写上
action:= cafree;
这样,关闭窗体时会自动释放。

另外:if assigned(form2) then //这里是form2
SetActiveWindow(Form12.Handle) //这里成了form12 是否笔误?
 
嘿嘿,凡是调用delphi中的activewindow啊,bringtofront都不如直接调用api更有力,
我遇到过,直接使用这个api函数,

SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
将会放到最上面而且一直在上面
 
谢谢二位。
不过,无论是if assigned(form2) then SetActiveWindow(Form12.Handle);
还是SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
好象还和原来一样。
原因...原因?
 
to slyr:
语句“h := FinsWindow(nil, '你的窗体');”,编译时
错误提示是:Undeclared identifier 'FinsWindow'。
 

Similar threads

后退
顶部