我在窗体加了两个定时器和几个菜单,定时器1为3秒,定时器2为10秒。
问题是在定时器2启动后,下拉菜单停止响应,直到退出循环。请高手指教。
定时器的函数如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Menus;type
  TForm1 = class(TForm)
    Timer1: TTimer;
    MainMenu1: TMainMenu;
    wewqe1: TMenuItem;
    ddasdad1: TMenuItem;
    asdadasd1: TMenuItem;
    dasdasd1: TMenuItem;
    dsadasd1: TMenuItem;
    asdasdasd1: TMenuItem;
    sadasdas1: TMenuItem;
    asdasd1: TMenuItem;
    asdfasdasd1: TMenuItem;
    asfefdsf1: TMenuItem;
    fdsfdsf1: TMenuItem;
    fdsafasdf1: TMenuItem;
    asdfasdfasdfgfa1: TMenuItem;
    sdfdasfdasfas1: TMenuItem;
    Timer2: TTimer;    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);  private
    
    { Private declarations }
  public    { Public declarations }
  end;var
  Form1: TForm1;
  ExitSign:boolean;
implementation{$R *.dfm}procedure TForm1.Timer1Timer(Sender: TObject);
begin
ExitSign:=false;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
  ExitSign:=true;
   self.Timer1.Enabled:=true;
   while(ExitSign) do
    begin
     application.ProcessMessages;
    end;
  Timer1.Enabled:=false;;
end;end.

解决方案 »

  1.   

    你这是个无限循环,当然主窗体没法响应.
    把Timer2的事件处理函数放在另一个线程中就可以了.
      

  2.   

    Timer2的事件处理函数中开始有
    ExitSign:=true;
    接着就是循环,因为是死循环,所以就没有响应了。
      

  3.   

    但是按钮和别的控键都响应。application.ProcessMessages;可以响应控键,可对popmenu却不响应?
      

  4.   

    TTimer的OnTimer事件执行的代码是与主程序同一个线程的.所以在OnTimer事件里不易处理大量的数据.
    建议另创建线程.