Einzelnen Beitrag anzeigen

Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Variablen in Variablen packen

  Alt 1. Jul 2007, 03:34
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.
  Mit Zitat antworten Zitat