Oprettet ons. d. 28. juli 2010 kl. 18:39:40

snestrup2000
snestrup2000 (8.635 point. Point ude: 0)

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... )

Men den er UELEGANT og IKKE i Delphi stil.. !

*) (* end of comment *)

END.

KR(istian)

Skrevet ons. d. 28. juli 2010 kl. 19:16:12| #1

kroning
kroning (32.420 point)
www.kroning.dk
Prøv at kikke på FindFirstChangeNotification og see also derfra.

Skrevet ons. d. 28. juli 2010 kl. 19:17:57| #2

kroning
kroning (32.420 point)
www.kroning.dk
Jeg har lige testet og med FindFirstChangeNotification får man også besked hvis en fil slettes / oprettes

Skrevet ons. d. 28. juli 2010 kl. 20:19:51| #3

snestrup2000
snestrup2000 (8.635 point)
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)

Skrevet ons. d. 28. juli 2010 kl. 20:29:00| #4

kroning
kroning (32.420 point)
www.kroning.dk
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.

Skrevet ons. d. 28. juli 2010 kl. 20:33:45| #5

snestrup2000
snestrup2000 (8.635 point)
HEJ,

Jeg "Sakser" din kode, tester og melder tilbage...

END.

KR(istian)

Skrevet ons. d. 28. juli 2010 kl. 20:49:25| #6

snestrup2000
snestrup2000 (8.635 point)
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)

Skrevet ons. d. 28. juli 2010 kl. 20:54:32| #7

kroning
kroning (32.420 point)
www.kroning.dk
Kopier og test bare løs, det har jeg sikkert selv gjort dengang jeg lavede koden.

Skrevet ons. d. 28. juli 2010 kl. 22:22:59| #8

a_nor
a_nor (12.580 point)
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

Skrevet lør. d. 18. september 2010 kl. 12:31:15| #9


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Irriterende timeout i Delphi 7 på en win7 64 bits platform

Oprettet den 2. februar 2012 kl. 12.17
nca giver 60 point for svar | Giv et svar »

Manglende danske tegn

Oprettet den 24. januar 2012 kl. 16.12
hugopedersen giver 60 point for svar | Giv et svar »

Sikre mig at form er færdigoprettet

Oprettet den 24. januar 2012 kl. 10.01
hugopedersen giver 100 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger