Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - TStrings problem


Anfänger - Di 04.05.04 20:41
Titel: TStrings problem
Ich habe eine Prozedur, die einfach eine Datei.txt laden, die Zeilen vertauschen und vertauscht speichert.

Erst klappte es auch, solange ich alles mit 2 Listboxen gemacht habe.
Als ich die Listboxen durch Strings erstetzte machte er probleme.
Verstehe ich nicht :roll:

So sieht die Prozedur jetzt aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TForm1.Button2Click(Sender: TObject);
var I,A:Integer;
    UListe,EListe:TStrings;
begin
  Randomize;
  If Opendialog1.Execute then
  begin
    UListe.LoadFromFile(Opendialog1.Filename);
    EListe.Clear;
    For I:=0 to UListe.Count do
    begin
      if UListe.Count <>0 then
      begin
        A:=Random(UListe.Count);
        EListe.Add(UListe[A]);
        UListe.Delete(A);
      end;
    end;
    if Savedialog1.Execute then
    begin
      EListe.SaveToFile(SaveDialog1.Filename+'.txt');
      ShowMessage('OK');
    end
    else
    ShowMessage('Datei konnte nicht gespeichert werden');
  end
  else ShowMessage('Datei konnte nicht geladen werden');
end;


bin dankbar für jede Hilfe

Moderiert von user profile iconPeter Lustig (16:59, 05.05.2004): Topic verschoben


Lemon - Di 04.05.04 20:52

die stringlisten muessen erst einmal erstellt werden:


Delphi-Quelltext
1:
UListe := TStringList.Create;                    


auch wenn du sie mit clear loescht...


Delete - Di 04.05.04 21:27

Hi,

außerdem solltest du TStringlist verwenden und nicht direkt TStrings...


Anfänger - Di 04.05.04 22:04

Danke für die Hilfe hat geklappt :lol:


KidPaddle - Mi 05.05.04 08:30

Benedikt hat folgendes geschrieben:
Hi,

außerdem solltest du TStringlist verwenden und nicht direkt TStrings...


Warum sollte er das tun? Die Strings sind an Memo's. Listboxen usw. übergebar, TStringlist jedoch nicht. Also Variablen als TStrings deklaríeren und als TStringlist zum erstellen der Instanz verwenden. Da diese zuweisungskompatible sind, gibt es damit keine Probleme.

Gruß
KidPaddle


smiegel - Mi 05.05.04 08:45

Hallo,

KidPaddle hat folgendes geschrieben:

Die Strings sind an Memo's. Listboxen usw. übergebar, TStringlist jedoch nicht.


Diese Aussage ist falsch!!!

Siehe folgendes Beispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  sl:=TStringList.Create;
  try
    sl.Add('Test');
    Memo1.Lines.Assign(sl);
  finally
    sl.Free;
  end// try


KidPaddle - Mi 05.05.04 08:56

Stimmt, was die Aussage der Zuweisung betrifft, mein Fehler.

Gruß
KidPaddle


Delete - Mi 05.05.04 16:43

KidPaddle hat folgendes geschrieben:
Benedikt hat folgendes geschrieben:
Hi,

außerdem solltest du TStringlist verwenden und nicht direkt TStrings...


Warum sollte er das tun?


Erstens kannst du die wohl übergeben, wie smiegel schon schrieb, außerdem sind bei TStringList einige sinnvolle Methoden integriert bzw. erst gepublished (Sort etc.) und drittens meint z.B. auch die Delphi-Hilfe:

Delphi-Hilfe hat folgendes geschrieben:

Von TStrings abgeleitete Objekte ermöglichen die Speicherung und Bearbeitung von String-Listen. TStrings enthalten abstrakte bzw. rein virtuelle (C++ Terminologie) Methoden und sollten nicht direkt instantiiert werden.