Newsgroup: it.comp.lang.delphi
Titolo: zip e filelist [un pò lungo]

Buondì a tutto l'NG.
Ho 2 problemi che mi affliggono e stanotte non ho risolto niente neanche
con google gruppi.... Spero che mi aiuterete
Questo è il codice che ho scritto all'interno di un click
e mi va sempre in errore di Accessviolation
var Adir:string;
zipper:TAbZipper;
begin
Adir := 'D:\logon';
If DirectoryExists(ADir) Then
    try
      Zipper.LogFile := Adir
             +'('
             +FormatDateTime('dd"-"mm"-"yyyy hh"_"nn',now)
	     + ').log';
      Zipper.BaseDirectory := Adir;
      Zipper.FileName := Adir
             +'('
             +FormatDateTime('dd"-"mm"-"yyyy hh"_"nn',now)
             + ').zip';
      Zipper.TempDirectory := ExtractFilePath(Application.ExeName);
      Zipper.AddFiles('*',0);
      Zipper.Save;
      Zipper.CloseArchive;
      ShowMessage('Compattazione completata: ' 
                        + ADir + ' -> '
                        + Zipper.FileName);
    Except
      On E: Exception Do
        ShowMessage('Errore nella compattazione della cartella: '
                        + E.Message);
    End;
Poi ho questo codice su un bottone che dovrebbe fare il giro di tutti gli
item selezionati ma non ci entra neanche una volta...(mai sia che
seleziono o no)
i:TListItem;
    ProgressBar1.Max := FileListView1.SelCount;
    i := FileListView1.Selected;
    x := 1;
    While filelistview1.GetNextItem(i,sdAll,[isSelected]) <> Nil do
      begin
        // chiamata alla funzione di compresione
        ProgressBar1.StepBy(x);
        x := x + 1;
        Sleep(1000) ;
      end;
Per piacere sono disperato.....
A me sebra codice corretto
Grazie a tutti PAOlo

 Questo č il codice che ho scritto all'interno di un click

Devi creare l'oggetto TAbZipper altimenti e giustamente hai un
AccessViolation
Zipper:=TAbZipper.Create(self);
o Zipper:=TAbZipper.Create(nil);
Nel secondo caso non ci capisco un granche o ti dice qualcun'altro o spiega
meglio che devi fare.
ciao
erik

e mi va sempre in errore di Accessviolation
Ho SCRITTO ... cosaaa???!!!!
veramente quello č il codice che ti ho postato io ieri
... e se c'erano dei problemi potevi chiederli a me e
ti avrei detto che il componente si puņ mettere sul
form come un qualsiasi componente delphi prelevandolo
dalla palette abbrevia ... fai attenzione a spacciare
per tue cose che ti danno altri ... non č che ho messo
il copyright su quello script anche perchč anche uno
alle prime armi l'avrebbe potuto scrivere ... ma mi da
fastidio questo post come se non ti fossi fidato del
mio codice ... ma ancora se fosse stato cosģ avresti
potuto chiedermi tutto in quel topic visto che sono
stato molto paziente con te ... il topic č Smtp control
del 06/04/2004
	Ciao
	MassimoB
 

 	MassimoB
--
pbonfanti2@*NOSPAM*
inwind.it
Togliere dall'indirizzo *NOSPAM*

A me sebra codice corretto
Ti sembra male ;-)
 Questo codice non può funzionare.
GetNextItem è una funzione che ritorna l'item successivo.
incrementare la (x) e poi fare stepby è sbagliato.
lo sleep non serve, anzi.
il codice corretto è questo
  Item := ListView1.Selected;
  ProgressBar1.Max := ListView1.SelCount;
  while item <> nil do begin
    //qui fai le tue cosine
    ProgressBar1.StepIt;
    item := ListView1.GetNextItem(Item,sdAll,[isSelected]);
    Application.ProcessMessages;
 end;
Se hai intenzione di utilzzare listview e simili ti consiglio
caldamente di studiare almeno le basi su liste e puntatori, e *capire*
la filosofia di queste componenti, altrimenti sarà un bagno di sangue.
saluti
-- 
"La velocità luce non è sufficiente Comandante Nunziatella, 
dobbiamo passare alla velocità smodata!"

 saluti
Ciao Paolo


situazione restituisce item=nil
impossibile.. almeno che tu abbia settato la listview in qualche modo
strano.
Prova così:
for I := 0 to ListView1.Items.Count - 1 do begin
  if ListView1.Items[I].Selected then begin
        //fai le tue cosine
  end;
end;
ciao


 ciao
Ciao Paolo