Autor Beitrag
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 29.11.05 23:07 
Tachen Forum.

Ich habe nun schon mehrere Versuche unternommen, TStrings zu tauschen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.ChangeStrings
          (pStrings1,pStrings2 :TStrings);
var CB :TStrings;
    i  :LongWord;
begin
  CB :=TStrings.Create;
  for i :=0 to (pStrings1.Count-1) do
    CB.Add(pStrings1.Strings[i]);  // Abstrakter Fehler
  pStrings1.Clear;
  for i :=0 to (pStrings2.Count-1) do
    pStrings1.Add(pStrings2.Strings[i]);
  pStrings2.Clear;
  for i :=0 to (CB.Count-1) do
    pStrings2.Add(CB.Strings[i]);
  CB.Free;
end;

procedure TForm1.Button1Click
          (Sender :TObject);
begin
  Self.ChangeStrings(Self.Memo1.Lines,Self.Memo2.Lines);
end;

Mein Problem ist, dass bei einer Zuweisung ein Abstrakter Fehler ausgelöst wird. Jetzt kam mir inzwischen der Gedanke, das TStrings in der Delphi-OH als Basisklasse, also abstrakte Klasse, beschrieben wird. Ich weiß, das eine Basisklasse eigentlich nicht instanziert werden sollte.

Ich konnte mein Problem mit einer StringList lösen, aber mich würde nun doch interessieren, wie ich die Strings des Parameters pStrings1 in mein TStrings-Objekt CB einlesen kann. Schließlich verwenden viele Delphi-Komponenten Instanzen von TStrings.

Ich danke Euch ...
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 29.11.05 23:14 
TStrings soll man nie instantiieren, nimm TStringList, denn TStrings ist nur eine abstrakte Basisklasse.

_________________
Na denn, dann. Bis dann, denn.
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 29.11.05 23:20 
Wie arbeitet nun Delphi mit dieser Basisklasse, z. B. in TMemo.Lines, oder TListBox.Items. Es sind doch auch nur Instanzen von TStrings. Oder sind dies StringListen, nur für den Anwender nicht sichtbar und TStrings genannt? :?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 29.11.05 23:43 
Das eigentliche Tauschen geht mit 3 Zeilen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
    Tmp: TStringList;
begin
    Tmp := TStringList.Create;
    try
        Tmp.Assign(SL1); //1
        SL1.Assign(SL2); //2
        SL2.Assign(Tmp); //3
    finally
        FreeAndNil(Tmp);
    end;
end;


Wie normale Variablen eben auch :P

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mi 30.11.05 16:52 
user profile iconNeurologic Scientist hat folgendes geschrieben:
Wie arbeitet nun Delphi mit dieser Basisklasse, z. B. in TMemo.Lines, oder TListBox.Items. Es sind doch auch nur Instanzen von TStrings. Oder sind dies StringListen, nur für den Anwender nicht sichtbar und TStrings genannt? :?


Das sind dann normalerweise VCL-interne, komponentenspezifische Stringlisten, die von TStrings abgeleitet sind. In StdCtrls (die VCL-Unit, in der Standard-Komponenten definiert sind) gibt z.B. TListBoxStrings, TMemoStrings und TComboBoxStrings. Die implementieren für jede Komponente passend diese Funktionalität. TStrings ist nur die öffentliche Schnittstelle.

Stefan