delphi – 在运行时切换Application.Mainform并调用MainformOnTa
我正在使用Delphi 2010构建在
Windows XP / Vista和Windows 7上运行的Win32 GUI应用程序.
基本上,Application.MainForm是一个只读属性,一旦通过Application.CreateForm创建第一个表单,就无法在运行时更改: begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1,Form1); Application.CreateForm(TForm2,Form2); Application.Run; end. 上面的例子将Form1作为应用程序的mainform.它将显示在Windows 7任务栏的缩略图预览中. 在运行时将Application.MainFormOnTaskBar设置为true允许我们享受Windows aero主题功能. 我需要在运行时切换应用程序的mainform.例如,将Form2设置为主窗体.我使用以下代码使其工作: procedure SetAsMainForm(aForm:TForm); var P:Pointer; begin Application.MainFormOnTaskBar := False; try P := @Application.Mainform; Pointer(P^) := aForm; aForm.Show; finally Application.MainFormOnTaskBar := True; end; end; procedure TForm1.Button1Click(Sender: TObject); begin SetAsMainForm(Form2); end; 执行Button1.Click将使Form2成为主窗体并更新Windows的任务栏缩略图预览.但是,任务栏可能会闪烁切换. 我的问题是: >有没有办法消除这种闪烁? 解决方法
主要形式不是你可以在Delphi中改变的东西.你设法找到了一种似乎在中途工作的方法,但这是一个黑客攻击.别那样做.
应用程序只有一个主窗体,它是通过CreateForm完成的第一个窗体.如果主窗体需要两种完全不同的行为,那么您可以尝试几种技术: >将两个主要形式定义为框架.把你所有的功能放在那里.然后定义一个单独的表单,作为两个帧之一的父表单.而不是切换主窗体,只需破坏框架并用新的框架替换它. 任务栏上的闪烁来自一种形式消失而另一种形式出现.使用上述任何一种技术,总是只有一种形式,而不是两种形式,所以没有任何东西可以闪烁. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |