您的位置:首页 > 编程语言 > Delphi

Delphi如何从非主窗体启动

2007-08-09 11:21 543 查看
1、 Delphi如何从非主窗体启动?
答:方法一:调用Showmodal函数来实现。Showmodal方式使一个窗口为激活窗口,和Show相似,
但它令窗口模式化。现举一例说明:
⒈开始一个新的工程,依次建立两个窗体(Form1和Form2,其中Form1为主窗体,目的是从Form2启动)
⒉为便于演示,在Form2中插入一个Label部件,设置其Caption 属性为“欢迎进入本系统”。
⒊建立两个窗体之间的关联。在单元 Uint1 的 implementation(私有区)中加入语句 uses Uint2;再为Form1创建OnActivate事件。
procedure TForm1.FormActivate (sender:TObject);
begin
Form2.Showmodal;
end;
⒋从Component模板的System类别中选择一个计时器(Timer),添加入Form2窗体中,设置其Interval属性为3000(可根据需要自定义),再为其OnTimer事件添加语句close;加入一个Timer部件目的是用以控制闪现窗口显示时间。在此,Form2显示了3秒钟后关闭,主窗口Form1自动被激活。
⒌编译、运行程序,就能得到延迟为3秒的闪现窗口。
方法二:也可以通过修改工程文件中的源代码来实现,这在Delphi 的编程中是很少见的。现举一例具体说明:
前两步同方法一。
⒊选择“Prjoect / Options”,击Option按钮,选择对话底部的Forms页栏目。注意,Form1和Form2是在“Auto-create forms”列表中。选择Form2并击右键头按钮,把这个窗体移到“Available forms”。所有的Delphi窗体通过缺省方式自动在内存中建立,因此它们要消耗内存和系统资源。在类似这里(程序运行时创建一个窗体)的情况下,你应该将窗体从自动创建列中去掉。
⒋下一步修改工程的源代码。选择“Project / View Source”,修改begin和end之间的语句如下:
程序清单:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Form2:=TForm2.Create(nil); //Create创建窗口对象
Form2.Show;
Form2.Update;
Form2.Hide;
Form2.Free; // Free从内存中释放对象
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
  第一条语句创建了对象,该对象存在内存中,但还不能看见,为了让它出现并更新它的内容,调用对象的Show和Update成员函数:Show和Update。当闪现窗口使用完后,用Hide函数将它隐藏起来,然后用Free函数释放它所占据的内存。
⒌如果此刻你编译和运行程序,Form2窗口一闪而过,你可能未来得及看清。为使Form2窗口显示几秒种,我们有三种方法来解决这个问题:
1、在工程源程序的Form2.Hide; 之前调用一段延时程序。
Application.Initialize;
Form2:=TForm2.Create(nil); //Create创建窗口对象
Form2.Show;
Form2.Update;
// 在这里调用一段延时程序(如:Unit1.delay(3000) //延时3秒种)
Form2.Hide;
Form2.Free; // Free从内存中释放对象
Application.CreateForm(TForm1, Form1);
Application.Run;
2、修改工程源程序,并且为Form1(主窗体)的OnCreate 事件创建一个处理程序,延迟Form1窗口的显现时间。
1、工程源程序修改为:
Application.Initialize;
Form2:=TForm2.Create(nil); //Create创建窗口对象
Form2.Show;
Form2.Update;
Application.CreateForm(TForm1, Form1); // Form1的创建放在Form2的隐藏之前
Form2.Hide;
Form2.Free; // Free从内存中释放对象
Application.Run;
2、 Form1的OnCreate 事件程序如下:
procedure TForm1.FormCreate(Sender: TObject);
var
Start:LongInt;
begin
Start:=GetTickcount;
repeat
Application.ProcessMessages;
until ((GetTickcount-Start)>=3000)
end;
3、在工程源程序的Form2.Hide; 之前编写一段延时程序。整个工程源程序如下:
program Project1;
uses
Windows, // 默认的Delphi 的工程源程序是没有的,但为了下面语句的GetTickCount函数此处必须添加上,否则出错
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}
var
currentTime:LongInt;
begin
Application.Initialize;
Form2:=TForm2.Create(nil); //Create创建窗口对象
Form2.Show;
Form2.Update;
currentTime:=GetTickCount div 1000;
while ((GetTickCount div 1000)<(currentTime+3)) do //此处的3表示延时3秒
Application.ProcessMessages; //释放系统进程占有权
Form2.Hide;
Form2.Free; // Free从内存中释放对象
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
注意:1、GetTickCount函数返回窗口启动后过去的毫秒数,这个值除以1000 转化为秒数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: