leuchtfeuer hat folgendes geschrieben : |
Dankeschön an alle Das hat mir alles sehr geholfen, besonders die große Erklärung. |
Sehr erfreut, dass dir mein kleines Tutorial geholfen hat. Doch das ist noch lange nicht alles, denn wir haben noch nicht geklärt, wie Informationen von Form2 an Form1 übertragen werden können. Beim Aufruf der Form2 von Form1 aus mit der Function ShowModal gibt diese beim Schliessen von Form2 einen Wert zurück, denn du in Form2 selber festlegen kannst, und zwar mit
Modalresult. Beim Aufruf von Form2 via ShowModal hat ModalResult standardmässig den Wert 0, der in der Konstante mrNone festgelegt ist. Wenn du in Form2 der Variablen ModalResult einen anderen Wert als 0 zuweist, wird Form2 automatisch geschlossen. Wenn du Form2 mit Close schliesst, wird ModalResult automatisch auf mrCancel gesetzt. Soweit zur Informationsübergabe beim Schliessen von Form2.
Es gibt aber auch Fälle, wo Form1 auf Aktionen in Form2 reagieren soll, während Form2 sichtbar ist. Dazu muss man in beiden Units ein paar Vorbereitungen treffen. Zuerst braucht man einen neuen Type in Form2, der in etwa so aussieht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| unit Unit2;
interface
uses ...
type TUpdateEvent = Procedure of Object;
type TForm2 = class(TForm) ... |
Als nächstes braucht man ein Property in Form2:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ... private fUpdateForm2 : TUpdateEvent;
public ... Property OnUpdateForm2 : TUpdateEvent read fUpdateForm2 write fUpdateForm2; ... |
Das Ereignis in Form2, das in Form1 Reaktionen hervorrufen soll, wird so ausgelöst:
Delphi-Quelltext
1:
| if Assigned(fUpdateForm2) then fUpdateForm2; |
Das heisst, dass du zB in einer Button-Ereignisbehandlung, deren Resultat in Form1 sichtbar sein soll, am Ende einfach diese Codezeile einfügst.
Um jetzt in Form1 darauf reagieren zu können, machst du dir erstmal eine Procedure, die die Reaktionen ausführt:
Procedure TForm1.ReaktionAufForm2Ereignis;
begin
MachIrgendwas;
end;
Damit Form1 aber weiß, wann ReaktionAufForm2Ereignis ausgeführt werden soll, weist du vor dem Aufruf von Form2 dem soeben in Form2 deklarierten Ereignis deine Reaktions-Procedure zu:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); begin Form2.Radio1Checked := Radio1.Checked; Form2.Radio2Checked := Radio2.Checked; Form2.Radio3Checked := Radio3.Checked; ... Form2.OnUpdateForm2 := ReaktionAufForm2Ereignis; Form2.Show; ... end; |
Damit wird jetzt jedesmal, wenn in Form2
if Assigned(fUpdateForm2) then fUpdateForm2; ausgeführt wird, in Form1 ReaktionAufForm2Ereignis aufgerufen.