我在做我的设计课件,我想用TIMER控件来控制一个在FORM运行完毕后,打开另一个FORM窗口.并同时将自己关闭,可是应该用什么语句啊?我在TIMER控件的ONTIMER事件中的代码是:
  MAIN.SHOW;
  CLOSE;
结果却是显示完第一个窗口后,直接关闭了程序.这可怎么办啊!
大家帮帮忙啊.我刚学的啊!!

解决方案 »

  1.   

    在project项中将第二个窗口设为主窗口即可,请多看下书。
      

  2.   

    再接楼上的细说明:
    project选项可以按ctrl+shit+f11来打开。。
      

  3.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if form2=nil then
      Application.CreateForm(TForm2, Form2);
      visible:=false;
      form2.show;
    end;
    如果你不想改变主窗口就用以上语句,因为改变了主窗口以后,主窗口总是第一个出现的窗口,而看你的意图,很显然是要让form1先出现。
    试试吧,因为主窗口不能close的,一close马上就退出程序。
      

  4.   

    1楼和2楼的方法对我的程序不适用.3楼的正在试验,我只想在它显示完毕后就关掉,因为在TIMER控件中设定的时间似乎是循环时间,我想关掉这个FORM.希望高手能帮我解决这个问题.
      

  5.   

    3楼的方法似乎好使,不过TIMER控件的设定时间确实是循环时间.在我打开后用第2个FORM调用第3个FORM时,过一段时间,FORM2又出现了.这个问题怎么办啊?
      

  6.   

    如果只是想使一个程序起动画面停留几秒钟,可以不用Timer,用GetTickCount函数就可以了//Form1是主Formprocedure TForm1.FormCreate(Sender : TObject);
    var
      //定义一个基准时间
      CurrentTime : LongInt;
    begin
      CurrentTime := GetTickCount div 1000;
      //延时4秒
      while (LongInt(GetTickCount div 1000) < (CurrentTime + 4)) do;
    end;//在project1中begin
      Application.initialize;
      Form2 := TForm2.create(Application);
      Form2.show;
      Application.CreateForm(TForm1, Form1);
      Form2.hide;
      Form2.free;
      Application.Run;end.
      

  7.   

    Delphi在启动时会首先显示一个图片,等到将所有的初始化工作全做完后该图片自动消失。为达到这一效果,建立一个示例程序。
      建立一个新Application,包括两个Form,其中Form1为主窗口,Form2为要显示的图片Form,不妨将Form2的边框类型设为无,同时在Form2中加入一个TImage类的构件Image1,Align属性为Client,AutoSize设为True,然后为Image1指定任意一个图片。
      选Project1/Options菜单,点取Application页,将Form2从左边列表框中移到右边列表框,这样Project1.dpr源程序就不会生成建立Form2的代码。下一步是手工修改Project1.DPR源代码,因为Form2应该在Form1之前建立并显示,但不能使用Application的CreateForm方法(第一个用此方法建立的Form被认为是主Form),具体的代码如下,当运行至Application.CreateForm(...)一行时Form2已经建立并显示出来,然后该行建立主Form并激发主Form的OnCreate事件,你可以在OnCreate事件处理过程中完成你的初始化工作。Project1.dpr program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2};{$R *.RES}begin
      Application.Initialize; {程序初始化}
      Form2 := TForm2.Create(Application); {建立徽标Form}
      Form2.Show; {显示徽标Form}
      Form2.Update; {重画徽标Form,确保其中的图片被显示出来}
      Application.CreateForm(TForm1, Form1); {建立主Form}
      Form2.Hide; {隐藏徽标Form,使主Form显示出来}
      Form2.Free; {释放徽标Form占用的资源}
      Application.Run; {程序运行}
    end.
       在主Form的OnCreate事件处理过程中我们用一些延时代码来模拟耗时的初始化工作,这样可以更清楚地看到Form2显示并停留数秒,直到主Form的OnCreate事件处理过程执行完毕后自动消失。Unit1.pas unit unit1;interfaceuses
      Windows, Messages, SysUtils,
      Classes, Graphics, Controls,
      Forms, ExtCtrls;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        private
        public
      end;var
      Form1: TForm1;implementation{$R *.DFM}{ OnCreate事件处理过程,延时五秒 }
    procedure TForm1.FormCreate(Sender: TObject);
    var
      CurrTime: TSystemTime;
      Sec: Word;
    begin
      GetSystemTime(CurrTime);
      Sec := CurrTime.wSecond + 5;
      while Sec>CurrTime.wSecond do
        GetSystemTime(CurrTime);
    end;end.
       执行这个程序,会看到令人满意的效果:启动画面成功地显示出来,而且当鼠标移至画面上时会自动变成沙漏形状,五秒钟后画面消失,主窗口出现。
      

  8.   

    老兄,你问个问题也新鲜,又不把要求说全,解决了一点,又问一点,你说清楚好不好,本来不难的东西,让你搞得麻烦得很,你把要求说全嘛,什么又出来一个form3.
      

  9.   

    如果你想form3出现后,就不要出现form2了,你可以加一条
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if form3= nil and form2=nil then
      Application.CreateForm(TForm2, Form2);
      visible:=false;
      form2.show;
    end;
    你不要又问我有个form4......