问: 我现在也搞不懂,甚至认为无法让cb的主窗口有动画的效果。 因为在任务条上的按钮所代表的窗口是application窗口,而不是 project所选定的mainform。如果强行让mainform动态地minimize, 就会最小化到桌面的左下角去了。
答:我基本上同意你的看法。delphi & bcb 中的的主窗口都是tapplication, 一般情况下,这个窗口居于屏幕中间,大小为0x0。底部taskbar上的按钮也是tapplication窗口。应用程序的主窗口如tform1,不是tapplicaiton的子窗口,但他不具有ws_ex_appwindow的属性,所以不在taskbar上产生button。当最小化的时候,由于tapplication窗口是0x0的,所以如果有动画会很难看,所以vcl中采用systemparametersinfo这个api使得最小化时
tapplication窗口无动化。至于tform1,因为底部taskbar上的button不是
他的,所以vcl中直接hide了tform1。这样,使得整体上看起来无动化。
可以在vcl的源码forms.pas中发现如下代码:
procedure tapplication.minimize; begin if not isiconic(fhandle) then begin normalizetopmosts; setactivewindow(fhandle); showwinnoanimate(fhandle, sw_minimize); if assigned(fonminimize) then fonminimize(self); end; end; procedure tapplication.restore; begin if isiconic(fhandle) then begin setactivewindow(fhandle); showwinnoanimate(fhandle, sw_restore); {以下省略} end; |