Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Neues Fenster öffnen per Button klick?? iOS

  Alt 15. Jan 2014, 12:10
Show reicht! Showmodal braucht man i.d.R. nicht da nur immer ein Fenster sichtbar ist. Sei denn um es mal mit den Worten einen anderen Users hier zu beschreiben, man macht Designfehler und der Code muss auf das Schließen des anderen Fensters warten!
Ich glaub du hast ShowModal falsch verstanden.
ShowModal zeigt das Fenster an UND wartet bis es wieder geschlossen wurde.

Show zeigt es NUR an und macht dann weiter.



Bei ShowModal kann sich der Aufrufer darum kümmer und in Ruhe die Werte auslesen, welche er haben möchte.


Bei Show muß man entweder einen Callback übergeben, worüber der aufgerufene die Daten zurück gibt
oder man muß ein Interface für den Rückruf implementieren

oder der Aufgefufene muß dem Aufrufer die Daten geben (er muß ihn also direkt kennen), aber hier sind dann Komponenten nicht wiederverwendbar, da sie hart verlinkt sind und jeder den Anderen braucht.

Delphi-Quellcode:
// Fenster muß eventuell eine halbwegs globale Variable sein und man muß dann auch noch aufpassen, daß das Fenster nur einmal vorkommt.

Fenster := TMeinEingabeFenster.Create(Self); // hier braucht man nun den Owner
// hier könnte man eventuell noch was an das Fenster übergeben
Fenster.Show;
Delphi-Quellcode:
// jetzt muß man eine schöne Stelle finden, wo man das übergibt
x := Fenster.IPEdit.Text;
y := StrToInt(Fenster.PortEdit.Text);
Delphi-Quellcode:
Fenster.Free;
// oder
Fenster.Close; // und im OnClose muß caFree gesetzt werden
Da hat der erste Vorschlag den vorteil daß man das schön debuggen kann,
man weiß genau was wann und wie passiert,
die Komponente ist komplett vom Aufrufer getrennt und wiederverwendbar,
und hier gibt auch der die Form wieder frei, welcher Diese erstellt hat. (Erstellen und Freigabe in der selben Ebene)
$2B or not $2B

Geändert von himitsu (15. Jan 2014 um 12:16 Uhr)
  Mit Zitat antworten Zitat