28. juli 2010 - 18:39Der er
8 kommentarer og 1 løsning
Filelistbox EVENT ved Items removal
HEJ,
Langt herfra er vores DATABASE-server med en masse SQL- og "XML"- "snusk".
Vi (os almindelige dødelige) har ikke SQL-adgang (og får det heller ikke - har prøvet at spørge pænt om lov- MEN NAAAJ -), så vi må skrive XML-scripts for at lægge data ind på DATABASE-serveren.
Da den (som sagt ikke er lokal) bliver disse XML-scripts sendt via intra-nettet til et specielt XML- "INPUT-bibliotek" på serveren. DATABase-serveren henter så dette script, behandler det og meddeler brugeren om det er gået godt (eller galt) ved at anbringe en kopi af scriptet i hhv. "DET-GIK-GODT"-biblioteket eller "DET-GIK-GALT" biblioteket. En test på det relevante bibiotek viser så¨resultatet.
Det er relativt nemt at overføre Scriptet programmæssigt (Delphi sender det), men må overvåge resultatet visuelt, da det nogen gange kan tage op til 15 minutter at se resultatet. Når scriptet er UDE (slettet) fra "INPUT-biblioteket" kan jeg så teste hhv. detgikgodt- eller detgikgalt-biblioteket programmæsigt.
Og det her giver mig en ide:
Findes der i en FILELISTBOX et event, som fyrer når et element i denne listbox slettes (eller fjernes) ?
eller kan der kreeres et sådant event ?
(ofte er der kun 1 script (mit script) i input-bib'et. )
(havde ellers tænkt mig noget i stil med følgende:
En timer fyrer en rutine hvert sekund: Denne rutine tester INPUT-bib på fjernserveren (Fjern-server.Filelistbox(update); )
og når input-bib er tomt -- check gikgodt- eller gikgalt-bib. osv... )
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 !
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;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.