Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit StringList (https://www.delphipraxis.net/104084-probleme-mit-stringlist.html)

toyoman 27. Nov 2007 08:18


Probleme mit StringList
 
Hallo

Mein Ziel aus einer Datei eine Stringliste erstellen und diese dann bearbeitet in eine Combobox abfüllen.

Dazu habe ich folgende Funktion erstellt:
Delphi-Quellcode:
// StringList abfüllen aus Datei
function StringListFuellen(List: TStringList; Datei:string):boolean;
begin
     List:= TStringList.Create;
     result:=false;
     if fileexists(datei) then
     begin
        List.LoadFromFile(datei);
        result:=true;
     end else
     begin
        result:=false;
     end;
     List.Free;
end;
das funktioniert. Nun aber wenn ich diese List(e) weiterverarbeiten will kommt immer eine Zugriffsverletzung. Keine Ahnung was hier diese Verletzung verursacht.

Mein Aufruf (als Beispiel):
habs schon auf versch. Varianten probiert (als Text oder als einzelne Items auszulesen etc.)

Delphi-Quellcode:
procedure TfrmUebersicht.Button1Click(Sender: TObject);
var
  liste:TStringList;
begin
    if StringListFuellen(Liste,getinivalue('StandardValues','IndexPath')+'\'+getinivalue('StandardValues','IndexFile')) = true then
    begin
      edtitelsuchen.Items.Text:=liste.Text;
    end;
end;

Bernhard Geyer 27. Nov 2007 08:23

Re: Probleme mit StringList
 
Du erzeugst deine Stringlist in StringListFuellen und gibst sie am Ende wieder frei. Auch kann diese gar nicht außerhalb verfügbar sein da du sie nicht als Var-paramter übergibst.

Klaus01 27. Nov 2007 08:30

Re: Probleme mit StringList
 
Guten Morgen,

so sollte es gehen.
So weit ich weiß brauch man Objekte nicht als var Parameter übergeben, da in der Parameterlist
sowieso nur die Adresse des Objektes steht.

Grüße
Klaus

Delphi-Quellcode:
procedure TfrmUebersicht.Button1Click(Sender: TObject);
var
  liste:TStringList;
begin
    liste := TStringList.create;
    if StringListFuellen(Liste,getinivalue('StandardValues','IndexPath')+'\'+getinivalue('StandardValues','IndexFile')) = true then
    begin
      edtitelsuchen.Items.Text:=liste.Text;
    end;
   liste.free;
end;


// StringList abfüllen aus Datei
function StringListFuellen(List: TStringList; Datei:string):boolean;
begin
     //List:= TStringList.Create;
     result:=false;
     if fileexists(datei) then
     begin
        List.LoadFromFile(datei);
        result:=true;
     end else
     begin
        result:=false;
     end;
     //List.Free;
end;
Grüße
Klaus

toyoman 27. Nov 2007 08:38

Re: Probleme mit StringList
 
Vielen dank Klaus für deine Hilfe. Werde mir das jetzt genau anschauen damit ich endlich schnall wie sowas aufgebaut sein muss. Funktionieren tuts schonmal.

Gruss

Zitat:

Zitat von Klaus01
Guten Morgen,

so sollte es gehen.
So weit ich weiß brauch man Objekte nicht als var Parameter übergeben, da in der Parameterlist
sowieso nur die Adresse des Objektes steht.

Grüße
Klaus


Muetze1 27. Nov 2007 12:27

Re: Probleme mit StringList
 
Zitat:

Zitat von Klaus01
Guten Morgen,

so sollte es gehen.
So weit ich weiß brauch man Objekte nicht als var Parameter übergeben, da in der Parameterlist
sowieso nur die Adresse des Objektes steht.

Grüße
Klaus

Hängt von der Anwendung ab. Er hatte eine Instanz innerhalb der Funktion erzeugt und somit eine neue Adresse. Diese wurde dem Parameter zugewiesen und der muß nunmal ein var Parameter sein, sonst würde die neue Instanz niemals "nach außen" gelangen. Mit Var würde das anlegen der Instanz die selbige auch der übergebenen Variablen zuweisen und entsprechend ausserhalb der Funktion verfügbar sein (nach deren Aufruf).

Klaus01 27. Nov 2007 15:25

Re: Probleme mit StringList
 
@Thomas

danke wieder etwas gelernt.

So geht es also auch:

Delphi-Quellcode:
function fillList(var lst:TStringList):boolean;
begin
  lst := TStringList.create;
  lst.Add('1');
  lst.Add('2');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  sl : TStringList;
begin
  fillList(sl);
  Memo1.lines.Assign(sl);
  sl.free;
end;
Grüße
Klaus

Popov 27. Nov 2007 15:54

Re: Probleme mit StringList
 
Der Fehler ist wohl inzwischen klar. Du kannst ListBox aber auch direkt füllen.

Delphi-Quellcode:
// StringList abfüllen aus Datei
function StringListFuellen(List: TStrings; Datei: String): Boolean;
begin
  if fileexists(datei) then
    begin
       List.LoadFromFile(Datei);
       Result:=true;
    end
  else
    begin
       Result:=false;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not StringListFuellen(ListBox1.Items, 'c:\abc\def.txt') then
    MessageDlg('Fehler beim Laden', mtError, [mbOK], 0);
end;
Oder

Delphi-Quellcode:
// StringList abfüllen aus Datei
function StringListFuellen(List: TStringList; Datei: String): Boolean;
begin
  if fileexists(datei) then
    begin
       List.LoadFromFile(Datei);
       Result:=true;
    end
  else
    begin
       Result:=false;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    if not StringListFuellen(sl, 'c:\abc\def.txt') then
      MessageDlg('Fehler beim Laden', mtError, [mbOK], 0);


  finally
    sl.Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 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-2025 by Thomas Breitkreuz