最好能给一个例子,例如:当c:\下增加文件后触发button1.click事件.
我会给分的,谢谢各位了.

解决方案 »

  1.   

    1,2) 我有一个使用FindFirstChangeNotification
    FindNextChangeNotification监测文件改变的source
    其中也有waitForSIngerObject的使用 e-mail发出
    3)
    触发事件(例如:button1.click)是何意思?
      

  2.   

    3)例如你的button1的click事件是
    procedure TForm1.Button1OnClick(Sender : TObject);
    begin
    // your code here.
    end;
    直接调用就可以
    procedure DoButtonClick;// your function
    begin
      Button1OnClick(self);
    end;
    end;
      

  3.   

    触发一个按钮的OnClick最好用Button1.Click
      

  4.   

    我要拿分了。hcman请看下面的例子,我运行过的:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      // 用线程实现,否则你的主程序会一直等
      TChangeNotifyThread = class(TThread)
      private
        FButton: TButton;  protected
        procedure Execute; override;
        procedure TriggerButton;  public
        property Button: TButton read FButton write FButton;  end;
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
        FThread: TChangeNotifyThread;
        FShowingMsg: Boolean;  public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not FShowingMsg then
      try
        FShowingMsg := TRUE;  // 这是为了防止重入
        MessageBeep( MB_ICONINFORMATION );
        Application.BringToFront;
        ShowMessage( '文件更新!' );
      finally
        FShowingMsg := FALSE;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      FThread := TChangeNotifyThread.Create( TRUE );
      // 参数CreateSuspended为真是为了设置Button属性
      FThread.Button := Button1;
      FThread.Resume;  // 起动
    end;function IsThreadTerminated( Handle: THandle ): Boolean;
    var
      lwExitCode: LongWord;
    begin
      GetExitCodeThread( Handle, lwExitCode );
      Result := STILL_ACTIVE<>lwExitCode;
    end;procedure WaitForThread( AThread: TThread ); // 这个与上面的函数可以公用出去
    begin
      if not IsThreadTerminated( AThread.Handle ) then
        Application.ProcessMessages;  // 如果没有结束,则让应用程序处理消息,如WM_PAINT
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      FThread.Terminate;
      WaitForThread( FThread );  // 等待线程结束
      FThread.Free;
    end;
    { TChangeNotifyThread }procedure TChangeNotifyThread.Execute;
    var
      hand: THandle;
    begin
      // 我们的例子是要监视C盘根目录下文件名是否改变、是否有文件复制和删除
      hand := FindFirstChangeNotification( 'c:\', FALSE, // 第一次创建句柄
          FILE_NOTIFY_CHANGE_FILE_NAME );
      while not Terminated do  // 别忘了检测这个属性
      begin
        if WaitForSingleObject( hand, 2000 )=WAIT_OBJECT_0 then // 等待变化
        begin
          Synchronize( TriggerButton );  // 调用Button.Click
          FindNextChangeNotification( hand );  // 等待下次的变化
        end;
      end;
      FindCloseChangeNotification( hand ); // 关闭句柄
    end;
    procedure TChangeNotifyThread.TriggerButton;
    begin
      Button.Click;
    end;end.// 一个简单例子,你可能还需要加一些修改才能实际用到你的程序中btw: kxy,关于线程结束的示范我也做在这里了。