Ich übergeb nur die Pointer-Adressen und halte die in strg.
1.) strgs(Form1) wird als meinetwegen TStringlist initiiert.
2.) strgs(Form1) wird an die Aufrufmethode Form2.Show2 weitergegeben und ist dort jetzt als v bekannt
3.) v (die Adresse unserer Stringlist von Form1) wird jetzt in strgs(Form2) hinterlegt, weil v beim verlassen der Methode aufgelöst ist.
4.) Die daten werden an strgs(Form2) Assigned
strgs(Form2) zeigt aber immer noch auf die selbe Stringlist wie stgrs(Form1)
Ergebnis ist, da es alles Pointer waren, das strgs(Form1) (unsere Stringlist) jetzt die Lines des Memos enthält.
ein wenig confusing, ich weiss..
Man könnt es auch noch anders machen:
Form1:
Delphi-Quellcode:
public
memlines: TStrings;
{...}
procedure {...};
begin
Form2.Show2(memlines);
end;
Form2:
Delphi-Quellcode:
public
procedure Show2(var strings: TStrings);
{...}
procedure TForm2.Show2(var strings: TStrings);
begin
strings := memo1.Lines;
Show{modal};
end;
Das ist ein wenig einfacher... hier hälst du dir einen Pointer auf TStrings in Form1 und setzt beim Aufruf von Form2 diesen auf Memo1.Lines. Damit greifst du über memlines in Form1 auf Memo1.Lines von Form2 zu, nachdem die Aufruf-Methode durchgelaufen ist.
Ah ja... der Zugriffsfehler kommt daher, dass du die TStrings nicht initialisiert hast z.B. so:
aTStringsVar := TStringlist.Create;
Bei meinem Ansatz mit Memlines aber DARFST du nicht initialisieren.