Einzelnen Beitrag anzeigen

Njorl

Registriert seit: 30. Jun 2007
8 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Variablen in Variablen packen

  Alt 1. Jul 2007, 03:12
Erstmal danke für die schnellen Antworten!

Dax:
Ich glaube du hast mein Problem genau erkannt und die Zeiger waren genau das was ich eigentlich gesucht habe. Der Einfachheit halber habe ich das mal in einem Extraprogramm getestet. Mit Integer und String Variablen hat das auch genau den gewünschten Effekt erzielt, bei TStrings gab es einige Probleme. Das Programm sollte einer Variable X und Y jeweils einen unterschiedlichen Text zuweisen, der in eine Memobox eingegeben wurde. Gebe ich jetzt nur für X oder nur für Y einen Wert an, und lasse ihn dann ausgeben, funktioniert es noch. Will ich den jeweils anderen anzeigen lassen, bekomme ich eine Fehlermeldung von wegen 'nil' Wert, wie sich das ja auch gehört. Gebe ich aber für beide Werte einen Wert ein, bekomme ich immer nur den letzten den ich eingegeben habe ausgegeben, egal welche Variable ich ausgeben will. Ich füge mal den ganzen Code an, der lässt sich ja zum Glück zusammenklappen

Delphi-Quellcode:
var
  Form1: TForm1;
  B :PTStrings;
  X, Y :TStrings;

implementation

uses SetB, ShowScreen;

{$R *.dfm}

procedure TForm1.btSetXClick(Sender: TObject);
begin
Form2.Visible := True;
B := @X;
end;

procedure TForm1.btSetYClick(Sender: TObject);
begin
Form2.Visible := True;
B := @Y
end;

procedure TForm1.btShowXClick(Sender: TObject);
begin
Form3.Memo1.Lines := X;
Form3.ShowModal;
end;

procedure TForm1.btShowYClick(Sender: TObject);
begin
Form3.Memo1.Lines := Y;
Form3.ShowModal;
end;

end.
Delphi-Quellcode:
procedure TForm2.btSetBClick(Sender: TObject);
var temp :TStrings;
begin
temp := Memo1.Lines;
B^ := Temp;
end;

end.
Form3 ist nur das Ausgabefenster mit einem Memo-Element.

cruiser:
Ich glaube ich verstehe (einigermaßen, und nach Lektüre von ein paar Hilfen, weil ich wirklich ziemlicher Anfänger bin) deinen Ansatz jetzt. Was ich nicht verstehe ist warum in beiden Forms (Ich nehme mal an der erste Abschnitt ist für Form1, der zweite für Form2) die Variable strgs auftaucht. Wenn ich das richtig verstehe, wird durch Klick auf Button1 in Form1 die Procedure TForm2.Show2 ausgeführt, wobei v mit der in Form1 definierten Variable, hier also strgs, belegt wird. In TForm2.Show2 setzt du dann strgs gleich v, also effektiv strgs gleich strgs. Hier komme ich dann nicht mehr mit.
Ich habe mir dann gedacht dass strgs aus Form1 nicht die gleiche Variable wie strgs aus Form2 ist und habe es in Form1 durch X ersetzt.
Dann würde, wenn ich noch richtig mitkomme, in strgs die Variable X eingesetzt.
Bei dem nächsten Befehl unter TForm2.ButtonBClick komme ich dann wieder mit glaube ich. Hier wird der Variablen in strgs der Wert aus Memo1.Lines zugewiesen. In meinem Fall würde man dann also X den Wert aus Memo1.Lines zuweisen, was ja genau der Zweck der Übung ist. Würde ich in Form1 den Befehl

Form2.Show2(Y); ausführen, würde also Y der Wert in Memo1.Lines zugewiesen.
Wenn ich das jetzt alles richting interpretiert habe, dann sollte das ja genau das sein was ich machen will. Trotzdem bekomme ich jedes mal eine Fehlermeldung. Die würde ich dem Assign zuschreiben, weil ich das selbe Problem bei einem anderen Versuch mit Assign auch hatte. Die Fehlermeldung:

Im Projekt Zeiger.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00454F9D in Modul 'Zeiger.exe'. Lesen von Adresse 00000000' aufgetreten.

Möglicherweise auch wichtig könnte die Fehlermeldung sein, die ich immer beim Starten eines Projekts bekomme, unabhängig vom Inhalt desselben:

Zugriffsverletzung bei Adresse 006B4F48 in Modul 'coreide90.bpl'. Lesen von Adresse blablabla (unterschiedlich).

Auch hierzu kurz der Code:

Delphi-Quellcode:
var
  Form1: TForm1;
  B :TStrings;
  X, Y, F :TStrings;

implementation

uses SetB, ShowScreen;

{$R *.dfm}


procedure TForm1.btSetXClick(Sender: TObject);
begin
Form2.Show2(X);
end;

procedure TForm1.btSetYClick(Sender: TObject);
begin
Form2.Show2 (Y)
end;

procedure TForm1.btShowXClick(Sender: TObject);
begin
Form3.Memo1.Lines := X;
Form3.ShowModal;
end;

procedure TForm1.btShowYClick(Sender: TObject);
begin
Form3.Memo1.Lines := Y;
Form3.ShowModal;
end;

end.
Delphi-Quellcode:
public
    { Public-Deklarationen }
    strgs: TStrings;
    procedure Show2(B: TStrings);
{...}

procedure TForm2.Show2(B: TStrings);
begin
  strgs := B;
  ShowModal;
end;


procedure TForm2.btSetBClick(Sender: TObject);
begin
  strgs.Assign(Memo1.Lines);
  Hide;
end;

end.
Sorry für die Textwand und vielen Dank für die Hilfe!
  Mit Zitat antworten Zitat