unskyld forsinkelsen. men jeg havde egligt renet med jeg fik en e-mail nå nogle svarede.
det med timer har jeg prøver og syntes det er upraktisk.
men det du skriver om data er da meget interasant men jeg er hvist desvære ik helt ferm nok til at bruge det uden et eksempel. så hvis du gider må du gerne det..
-----
muh
Så skidt da. Nedenstående er testet med D5, men virker sikkert med andre. Start på et nyt program. Smid en memo (memo1), to knapper (button1 + button2) på formen, og brug flg. kode:
<pre>
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const
msgChanged = wm_user + 1;
type
TWatchThread= class(TThread)
private
{ Private declarations }
hndChange: THandle;
protected
procedure Execute; override;
end;
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
WatchThread: TWatchThread;
procedure cmChanged(var msg: TMessage); message msgChanged;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
WatchThread.Resume; //Start tråd
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
WatchThread.Suspend; //Stop tråd midlertidigt
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
WatchThread := TWatchThread.Create(true); //Opret tråd-object
WatchThread.FreeOnTerminate := true; //Tråd-object skal free sig selv
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
WatchThread.Resume; //Start tråd, så vi kan nedlægge den
WatchThread.Terminate; //Fortæl tråd den skal stoppe
WatchThread.WaitFor; //Vent til tråd er stoppet
end;
procedure TForm1.cmChanged(var msg: TMessage);
begin
memo1.lines.add('Change detected'); //Her kunne vi også indlæse en fil og vise den.
end;
{ TWatchThread }
procedure TWatchThread.Execute;
begin
//Start med at overvåge c:\\, ingen subdirs og signaler på ændrede størrelser af filer. Se hjælp til FindFirstChangeNotification for andre signaler
hndChange := FindFirstChangeNotification('c:\\', false, FILE_NOTIFY_CHANGE_SIZE);
while not terminated do //Bliv ved til tråd termineres
begin
if WaitForSingleObject(hndChange, 0) = WAIT_OBJECT_0 then //Check om der er sket ændringer
begin
SendMessage(Form1.Handle, msgChanged, 0, 0); //Ja, send besked til hovedprogram
FindNextChangeNotification(hndChange); //Fortsæt med at kigge efter ændringer
end;
end;
FindCloseChangeNotification(hndChange); //Vi er færdige. Hold op med at kigge efter ændringer
end;
end.
</pre>
/data[Redigeret d. 28/08-02 23:33:57 af data]