Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Memo den Wert eines TStrings-Datenfeld zuweisen (https://www.delphipraxis.net/5883-memo-den-wert-eines-tstrings-datenfeld-zuweisen.html)

PAX 22. Jun 2003 11:37


Memo den Wert eines TStrings-Datenfeld zuweisen
 
Hi!

Wie der Titel schon sagt, möchte ich, dass ein Memofeld den Wert eines TStrings-Bezeichners annimmt. Doch es kommt nach dieser Zeile:
Memo1.Lines.AddStrings(MemoInhalt[ListBox1.ItemIndex]);

Immer der Fehler EAccessViolation. Ich hab vorher mit dem jeiweiligen Array:

MemoInhalt[i].Free

gemacht.
Was ist nun falsch?
Danke für eure Unterstützung!

PAX

Daniel B 22. Jun 2003 11:59

Hallo und herzlich Willkommen im Forum!

Du sagst doch selbst das Du alles vorher mit MemoInhalt[i].Free freigibst, ja wo soll denn da noch ein Inhalt sein? Du bekommst den Fehler weil Du auf Daten/Einträge zugreifst, die es nicht mehr gibt. Und was Bitte meinst Du mit Arrays?

Grüsse, Daniel :hi:

PAX 22. Jun 2003 14:29

Jo, aber selbst wenn ich dem Tstrings-Bezeichner einen Inhalt gebe, kommt der Fehler! Was meinst du damit, dass Daten/Einträge nicht mehr existieren? Ich will, dass das TMemo1 den Inhalt eines tstrings-Bezeichners erhält, was muss ich also tun? Wenn der Bezeichner ***.Free gemacht wurde, ja dann soll das Memo eben in diesem Fall keinen Inhalt haben, aber das is ne andere Sache. Erklär mir einfach (am Beispiel) was ich anders machen muss.
Ein Array is ein Datenfeld. Es wird so deklariert:
Var Bezeichner: Array[0..10] of TStrings;
Dann muss ich nicht dies tun (is nähmlich das selbe):
var Bezeichner0,Bezeichner1,Bezeichner2,..,Bezeichner1 0: TStrings;
Ich kann dann so auf jede einzelne Variable zugreifen:
Bezeichner[0] := ...;
Bezeichner[1] := ...;
Bezeichner[2] := ...;
...
Bezeichner[10] := ...;

Ok, dann helft mir bitte.

PAX

Duffy 22. Jun 2003 14:41

Hallo Pax,
die Inhalte kannst Du mit Memo1.Items.Assign(Bezeichner[I]); wobei I ein Zahl zwischen 0..10 ist, zuweisen. Du solltest aber dafür Sorge tragen, daß auch deine TStrings im Array gültige Objekte sind. Du mußt sie also voher erzeugen, da du ja nur 11 Zeiger auf Objekte des Typs TStrings hast.
Delphi-Quellcode:
for I := 0 to High(Bezeichner) do
begin
  Bezeichner[I] = TStringList.Create;
end;
Jetzt hast Du gültige Objekte in die Du was verstauen kannst und die Du zuweisen kannst.
bye

PAX 22. Jun 2003 14:55

Ok, ich hab nun mit allen TStrings-Bezeichnern dies gemacht:
:coder:
Bezeichner.Create;

Und danach:

Memo1.Lines.Assign(MemoInhalt[ListBox1.ItemIndex]);

Darauf kam die Meldung:

EAbstractError
:freak:
Was ist jetzt los?

PAX

Daniel B 22. Jun 2003 14:57

Hallo,

zeig dochmal etwas mehr Code, evtl. die ganze Prozedur. Dann könnte man evtl. mehr erkennen.

Grüsse, Daniel :hi:

PAX 22. Jun 2003 15:00

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
Var i: Cardinal;
begin
 For i := 1 To 1000 Do begin
  MemoInhalt[i] := TStrings.Create;
 end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
// MemoInhalt[ListBox1.ItemIndex].Clear;
// MemoInhalt[ListBox1.ItemIndex].Add('Nix drin');

//  Memo1.Free;
 //  Memo1.Lines.Assign(MemoInhalt[ListBox1.ItemIndex]);
  Memo1.Lines.Assign(MemoInhalt[1]);
//  Memo1.Lines.AddStrings(MemoInhalt[ListBox1.ItemIndex]);
end;
Das isses!

PAX

PAX 22. Jun 2003 15:09

Ich habs!

Statt
Delphi-Quellcode:
tstrings.create;
muss dort
Delphi-Quellcode:
TStringList.Create;
hin!


Danke an euch!
PAX


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 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