Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi KAZip - ich hab da mal ne' Frage zu (https://www.delphipraxis.net/95037-kazip-ich-hab-da-mal-ne-frage-zu.html)

ascotlx 29. Jun 2007 18:01


KAZip - ich hab da mal ne' Frage zu
 
Hallo alle zusammen,

ich habe eine Frage und hoffe, dass ich mich verständlich ausdrücke:

Ich will mehrere Dateien zu einen Archiv zusammenfassen.
Nun möchte ich eine procedur aufrufen die das für mich erledigt. Die procedur liegt in einer
eigenen .pas (ohne Form) Datei und war schon lauffähig bevor ich diese procdeur eingepflegt
habe. Als Fehlermeldung bekomme ich eine "Access Violation" und ich weiss nicht warum...

Vielleicht kann mir jemand helfen, hier der Code

Delphi-Quellcode:
...
unit blah;

interface

uses SysUtils, FileCtrl, Windows, Forms, inifiles, ShellApi, Messages,
     Dialogs, classes, KAZip;

procedure WriteLog(sText: string);
procedure packer(IniAList:TStrings);

var s, i, sec : string;
    KAZip1 : TKAZip;

const ....

implementation
Delphi-Quellcode:

procedure packer(IniAList:TStrings);
var s, str1, str2, str3: string;
    i : integer;
    Alist: TStringlist;
begin

 AList:=TStringlist.Create;
 AList.Assign(IniAList);
 s:='=';
 str2:=readsini('Archiv','Name0','newarc');
 str3:=readsini('Verzeichnis','TPFad','');

 if DirectoryExists(str3) then
  begin

   KAZip1.CreateZip(str3+'\'+str2+'.zip');
   KAZip1.FileName:=str2+'.zip';                <============ Hier fällt er anscheinend auf die Nase
   KAZip1.Active:=true;

   Form3.ProgressBar1.Min:=0;
   Form3.Show;
   Form3.ProgressBar1.Max:=AList.Count;

   for i := 0 to AList.Count -1 do
    begin
     str1:=copy(AList[i],Pos(s,AList[i])+1,255);
     KAZip1.AddFile(str1);
     Form3.Label1.Refresh;
     Form3.ProgressBar1.Position:=Form3.ProgressBar1.Position + 1;
    end;

   KAZip1.Active:=false;
   KAZip1.Close;
   KAZip1.Free;
   Form3.ProgressBar1.Position:=0;
   Form3.Close;
   AList.Free;
  end
 else
  begin
   MessageDlg( MTP + Msupp ,mtInformation, [mbOk], 0);
   WriteLog(MTP);
  end;
end;
In den Variablen stehen die Werte drin, die reingehören, soweit alles gut (Hoffe ich ....)
Kann mir bitte jemand weiterhelfen???! Ich habe keine Ahnung was da schief läuft.

Gruss && danke

ascotlx

Alien426 29. Jun 2007 19:52

Re: KAZip - ich hab da mal ne' Frage zu
 
Bevor du KAZip1 benutzt:
Delphi-Quellcode:
KAZip1 := TKAZip.Create;
OT: Du solltest mal in Betracht ziehen, aussagekräftige Namen für Variablen zu benutzen, statt zu nummerieren.

ascotlx 30. Jun 2007 11:49

Re: KAZip - ich hab da mal ne' Frage zu
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Alien426
Bevor du KAZip1 benutzt:
Delphi-Quellcode:
KAZip1 := TKAZip.Create;
OT: Du solltest mal in Betracht ziehen, aussagekräftige Namen für Variablen zu benutzen, statt zu nummerieren.

Hallo Alien426 und alle anderen ;o)

wenn ich Deinen Vorschlag probiere, bekomme ich die Fehlermeldung: "Nicht genügend wirkliche Parameter"
Ich hänge auch mal die meldung an, wenn ich TKAZip.Create eintippe. Was muss den als AOwner eingetragen werden?
Ich habe schon "Self" ausprobiert, da sagt der Compiler aber nur "Self" wäre ein nicht definierter Bezeichner.
Leider fehlt mir noch das Hintergrundwissen, um mit solchen Dingen "fertig" zu werden. Das mit dem "Self" habe
ich mal in Verbindung mit einem Form.Create benutzt.

hat noch jemand eine Idee ???

Gruss && Danke für Eure Unterstützung

ascotlx

EDIT - NACHTRAG - EDIT
ich habe es mit:
Delphi-Quellcode:
 KAZip1 := TKAZip.Create(nil);
probiert und es funktioniert, ich weiss zwar nicht wieso, aber vielleicht kann mir das ja jemand mal erklären...
vielen Dank schon mal ....

ich wünsche allen DP'lern (und nicht DP'lern) ein tolles Wochenende

Alien426 30. Jun 2007 19:04

Re: KAZip - ich hab da mal ne' Frage zu
 
Zitat:

Zitat von ascotlx
Was muss den als AOwner eingetragen werden?
Ich habe schon "Self" ausprobiert, da sagt der Compiler aber nur "Self" wäre ein nicht definierter Bezeichner.

Das kann in diesem Fall nicht funktionieren, da du in der Prozedur packer() bist. Wenn du in einer Methode des Forms wärst (Form1.Packer()), dann würde mit Self das aktuelle Objekt, also Form1 angesprochen.

Mit nil sagst du, dass das Objekt keiner Komponente zugeordnet werden soll, die für das Freigeben zuständig ist. Da du manuell frei gibst ist also nil in Ordnung.

Mach dich mal mit der Hilfe vertraut. Bei so gut wie jeder Komponente steht die Erklärung zu AOwner im Abschnitt der Methode Create.

ascotlx 1. Jul 2007 23:27

Re: KAZip - ich hab da mal ne' Frage zu
 
@Alien426

Besten Dank für die Erklärung....
Ich werde wohl doch nicht um das Lesen eines Buches herumkommen, mit
der Hilfe hab ich ab und zu noch so meine Verständisprobleme ;o)

gruss ascotlx


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz