Prøv at kikke på FindFirstChangeNotification og see also derfra.
Jeg har lige testet og med FindFirstChangeNotification får man også besked hvis en fil slettes / oprettes
HEJ,
Indledningsvis:
Jeg har en D-7 enterprise. Jeg har prøvet en FileListbox Onchange event , men den giver ingenting (kan slette og den "er" ganske ligeglad..
Søgte derefter på " FindFirstChangeNotification " som du foreslog men fandt den ikke. Tog HJÆLP (f1) og søgte igen på
" FindFirstChangeNotification ". Igen med negativt resultat.
Gik på nettet og søgte så på " FindFirstChangeNotification " og Delphi 7.
Fandt en komponent med navnet DirWatch, som "lovede" den søgte funktion (= " FindFirstChangeNotification ").
Installerede komponenten og kørte medfølgende DEMO. Skærmen gir et blink og så er det ovre. Der er INGEN fejlmeddelelser overhovedet. Kører heller ikke i baggrunden !
SÅ det her duer ikke for mig SORRY !
END.
KR(istian)
Jeg bruger D7 proff. og her er koden jeg testede med og som virker fint på D7
----------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
WatchHandle : THandle;
public
{ Public declarations }
end;
TWatchThread = class(TThread)
private
{ Private declarations }
WatchHandle : THandle;
Besked : string;
procedure SendBesked;
protected
procedure Execute; override;
public
constructor Create(aWatchHandle : THandle);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TWatchThread }
constructor TWatchThread.Create(aWatchHandle : THandle);
begin
inherited Create(False);
WatchHandle:=aWatchHandle;
FreeOnTerminate:=true;
end;
procedure TWatchThread.SendBesked;
begin
Form1.Memo1.Lines.Add(Besked);
end;
procedure TWatchThread.Execute;
var result : integer;
begin
Besked:='Thread startet';
Synchronize(SendBesked);
while not terminated do
begin
result:=WaitForSingleObject(WatchHandle,100);
if result=WAIT_OBJECT_0 then
begin
Besked:='Der er sket en ændring';
Synchronize(SendBesked);
if not FindNextChangeNotification(WatchHandle) then
begin
Besked:='Fejl i FindNextChangeNotification, thread afsluttes';
Synchronize(SendBesked);
Terminate;
end;
end;
end;
end;
{ end TWatchThread }
procedure TForm1.Button1Click(Sender: TObject);
var
lpPathName : string;
begin
lpPathName:='c:\hk'; // mappen der skal overvåges
WatchHandle:=FindFirstChangeNotification(PChar(lpPathName),false,FILE_NOTIFY_CHANGE_FILE_NAME);
if WatchHandle=INVALID_HANDLE_VALUE then
Memo1.Lines.Add('fejl i FindFirstChangeNotification')
else
TWatchThread.Create(WatchHandle);
end;
end.
HEJ,
Jeg "Sakser" din kode, tester og melder tilbage...
END.
KR(istian)
HEJ
Har netop testet din kode. Den virker også perfekt her.
1) Må jeg tage den med på job i morgen og teste den der ?
2: Må jeg, hvis den kører perfekt kopiere den og "mis-" bruge den som min egen ?
(jeg spørger fordi det (principielt) er dig som har copyright (og copyleft (he he) ?)
Virker den i morgen, send et svar og de 30 point er dine .. !
END.
KR(istian)
Kopier og test bare løs, det har jeg sikkert selv gjort dengang jeg lavede koden.
Tak for godt spm og Kroning for altid gode svar...
Kristian, åbn Help -> Windows SDK i din D7 for at søge FindFirstChangeNotification funktionen.
mvh