我想在主窗口显示之后根据需要自动显示一个模态窗口,不知道有什么好的办法?于是我想用TIMER,但不知道对?请高手指点,不知道还有什么好的办法?
ontimer里写:
     timer1.Enabled:=false;
     if 需要 then
     begin
     config:=Tconfig.Create(application);
     config.ShowModal;
     end
     else
     什么也不做;
     (这里用不用释放TIMER,怎么办?)
另外关于释放内存的问题close,hide,Destroy,free怎么用法呢,最好简单易懂了,看书看得不太明白,怎么样才能彻底的释放呢?如果是设计时的控件不用了之后要不要释放呢,比如此时的TIMER?
    谢谢指点。

解决方案 »

  1.   

    config:=Tconfig.Create(application);
         config.ShowModal;
    这两句可以放在onshow中。
    close:关闭
    hide:隐藏,注意不是关闭
    destroy:析构过程,一般不用在代码中调用
    free:释放内存,这个最常用了,如form1.free;
      

  2.   

    Free和Destroy是释放,但一般你调用Free就可以了,Free会隐含调用Destroy,但调用时候会作一些指针判断,比你直接使用Destroy安全。
    close一般是窗口才有的方法,close通常情况下和hide 所起的作用相同,既隐藏窗口并不关闭,
    但是如果你在Form的Onclose(或者是OncloseQuery我记不清了)事件里处理返回值为caFree,那么
    close 也可以起到释放的作用,还有个特殊情况就是调用Application的主窗口会起释放的作用如果timer不是你动态创建的,你可以不用管他,程序退出时会释放他的!
      

  3.   

    unit Mina;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormActivate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormActivate(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 0 to 100 do
      begin
        Sleep(100);
        Application.ProcessMessages;
      end;
      Application.MessageBox('消息窗体显示了', '显示窗体', MB_OK + MB_ICONINFORMATION);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Randomize;
      Button1.Left := Random(Self.Width - 100);
      Button1.Top := Random(Self.Height - 100);
    end;end.
    这个你拿去看看!
      

  4.   

    1,Free会隐含调用Destroy,但调用时候会作一些指针判断,比你直接使用Destroy安全。
    ============
    正是,Free是用的最多的,也是很安全的,如果释放出问题,要出内存等异常的2,timer你不用管,用的时候enable,不用的时候disable,不然要占资源的,不过一般不会有问题
      

  5.   

    to syl79() 
    onshow 主窗口并未有显示啊,application.run没有运行?
    to g961681(Rabby.W.)
    onActivate时,如果从别的程序切换过来,是否也会触发这个事件呢?