[ medixsa @ 14.03.2010. 22:51 ] @
POzdrav !!!

Dephi 7

Pitranje ?


Program : Monitorning stanja direktorija.

Uradio sam program ,gdje u ListBox-u prikazuje trenutno stanje nekog direktorija.Kada ja pokrenem program i u programu tj.u ListBox-u dobijem listu svi fajlova
u tom direktoriju.Kada recimo obrisem neki fajl u tom direkotriju ,meni i dalje u ListBox-u ostaje zapisan taj fajl.Kako mogu i na koji nacin da rijesim ,da mi se
ListBox osvjezava ili brise taj fajl koji je vec ranije obrisem u Windows Exploreru.Program ce non stop biti pokrenut i aktivan.Moram da kazem da kod
pokrece komponenta Timer1



Koristio sam funkciju za pretrazivaje fajlova u direktorju ( FindFirst i sve je ok),znaci samo mi treba da mi se update uradi ListBox-


Hvala svima na pomoci






[ savkic @ 15.03.2010. 13:12 ] @
> Program : Monitorning stanja direktorija.

> Kako mogu i na koji nacin da rijesim ,da mi se ListBox osvjezava ili brise taj fajl koji je vec ranije obrisem u Windows Exploreru.Program ce
> non stop biti pokrenut i aktivan.

Uz Delphi dolazi TShellChangeNotifier komponenta, ako ti ona ona završava posao (ne nudi previše detalja), možeš naći neku third party gotovu komponentu ili koristiti direktno API funkcije FindFirstChangeNotification ili ReadDirectoryChangesW.
[ Almedin @ 15.03.2010. 20:32 ] @
@savkic, njemu je problem što mu se ListBox ne "refrešuje"

@medixsa, mislio sam da smo to riješili telefonom ali evo:

tvoj kod je otprilike ovakav

Code:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  sr: TSearchRec;
  sPath: string;
begin
  sPath := 'e:\temp\*.*';
  if FindFirst(sPath, 0, sr) = 0 then begin
      ListBox1.Items.Add(sr.Name);
    while FindNext(sr) = 0 do
        ListBox1.Items.Add(sr.Name);
  end;
  FindClose(sr);
end;


a treba ovako

Code:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  sr: TSearchRec;
  sPath: string;
begin
  sPath := 'e:\temp\*.*';
  if FindFirst(sPath, 0, sr) = 0 then begin
    if ListBox1.Items.IndexOf(sr.Name) = -1 then // ovo ti nedostaje
      ListBox1.Items.Add(sr.Name);
    while FindNext(sr) = 0 do
      if ListBox1.Items.IndexOf(sr.Name) = -1 then // ovo ti nedostaje
        ListBox1.Items.Add(sr.Name);
  end;
  FindClose(sr);
end;


Inače, kako ti je savkic rekao, koristi TShellChangeNotifier ili FindFirstChangeNotification da ti se ova procedura ne bi bespotrebno pozivala svo vrijeme jer većinu vremena neće biti promjena u direktoriju.
[ medixsa @ 15.03.2010. 21:22 ] @
e hvala na trudu evo mog koda

procedure TfrmMain.Timer1Timer(Sender: TObject);
var
Rekord : TSearchRec;
Putanja : string;
Ukupno : integer;
i : integer;
Indx : integer;
tekst : string;
Zvuk : string;

const
put_naziv = 'C:\TEMP\RES\';
Ekstenzija = '*.*';
begin

// Forma na vrh
frmMain.FormStyle := fsStayOnTop;
// fokus forma

tekst := ListBox1.Items.Text;

Zvuk := ExtractFilePath(Application.ExeName)+'\zvono.wav';


Putanja := put_naziv;

if FindFirst(Putanja + Ekstenzija, faAnyFile-faDirectory, Rekord) = 0 then
try
repeat
if not ListBox1.Items.IndexOf(Rekord.Name) = -1 then
begin
ListBox1.Update;
end;

if ListBox1.Items.IndexOf(Rekord.Name) = -1 then
begin
ListBox1.Items.Add(Rekord.Name);
//sndPlaySound(pchar(Zvuk), snd_Async or snd_NoDefault);
end;
until FindNext(Rekord) <> 0;
finally
FindClose(Rekord);


// Ukupno
for i := 0 to ListBox1.Items.Count-1 do
begin
Ukupno := ListBox1.Items.Count;
end;
lUkupno.Caption := inttostr(Ukupno)+' '+'Akata';
end;



[Ovu poruku je menjao medixsa dana 16.03.2010. u 09:21 GMT+1]
[ medixsa @ 15.03.2010. 21:28 ] @
Almedine sve je ok ,ono sto smo uradili preko tel.,a meni je bitno kada se iz win explorera iz dir prijem obrise fajl,da mi se u istom momentu i brise fajl iz ListBox,jer program tj.monitornig non stop biti aktivan