最小化问题(300分)

  • 主题发起人 主题发起人 louew
  • 开始时间 开始时间
L

louew

Unregistered / Unconfirmed
GUEST, unregistred user!
我要在Form1中New多个Form2,这些Form2希望能最小化到任务栏上,
我已经做到了,采用的方法是Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
但是新的问题出来了,当在一个Form2中调用ShowMessage或TOpenDialog后,
我点击任务栏上其它Form2时,再回到先前那个Form2时,ShowMessage或TOpenDialog
将不在那个Form2的上方,而是被遮挡住了。各位大侠怎么办!
 
那个form2.formstyle.fsstayontop
 
我常用Application.Minimize最小化到任务栏,你试试吧
 
那是因为回来的时候,你的APP不能获得焦点所致,
用这个办法就可以避免这个问题(同样能最小化到任务栏上):
Params.WndParent := GetDesktopwindow;
 
agree 温柔一刀
btw:为什么不用MDIChild窗体呢
 
我所说的遮挡是ShowMessage或OpenDialog被被调用它的Form2给遮挡住了。
 
TO 温柔一刀
那种方法我也试过,但不是在Form2的上方,好像是在Application的上方了。

我要的效果就像Foxmail那样,它打开多个新邮件,这些新邮件都可以最小化
任务栏上,而且OpenDialog或SaveDialog是被新邮件窗体所拥有,即在新邮件
的上方,而不是Application的上方。
 
to louew:

老兄,问问题要一开始就问清楚才好嘛!你说的这个问题是Delphi的问题,
你看看dialogs.pas就知道了,是delphi对dialog的实现方式不支持这种
被一个窗体所“拥有”。

要实现你说的功能,两种办法,
1、修改dialogs.pas,把类似hWndOwner := Application.Handle;的语句统统改为
if Owner is TCustomForm then
hWndOwner := TCustomForm(Owner).Handle
else
hWndOwner := Application.Handle;

2、用Win32API(太麻烦,不说了)

这样就可以了,当然还是要用Params.WndParent := GetDesktopwindow;
 
to 温柔一刀
Dialog问题照你的方法解决了,但是如果有多个Form2,以及主窗体Form1时,
在任务栏上点击Form1(Form1为全屏大小的窗体)后,多个Form2被遮挡住,
(这里没问题)如果再在任务栏上点击一个Form2时,这个Form2不会在Form1上,
而是昙花一现,迅速出现后又不见了,又躲在Form1的后面。请问这是什么
问题?如何解决?
 
你说的这个问题我没有碰到过,估计是你的程序问题,
仔细检查你的程序,看看是不是有原来为了解决上述问题
加的代码,现在起了副作用(比如一些onactive事件之类)。
我按照我上面说的方法作的程序与foxmail的效果完全一致。
 
louew:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
>>Dialog问题照你的方法解决了
那还等什么呢?

>>这个Form2不会在Form1上,而是昙花一现,迅速出现后又不见了
这个问题没有代表性,我的程序就不会有,你还是看看自己的代码吧!
 
接受答案了.
 
后退
顶部