![]() |
Neues Fenster öffnen per Button klick?? iOS
Hallo zusammen :)
ich bin gerade dabei eine einfache App zu schreiben mit der ich eine Socketverbindung zu einem Server aufnehmen kann. Mit fest eingetragener IP-Adresse und Port funktioniert das auch schon alles wunderbar. Ich will die IP-Adresse und den Port der angesteuert werden soll aber nicht fest einkompilieren. Meine Frage ist, wie kann ich über einen Button klick ein neues Fenster öffnen wo der Bediener diese Daten eingeben kann, und wenn ich das Fenster schließe diese an mein 'Hauptprogramm' übergeben werden, oder ich diese in meinem Hauptprogramm benutzen kann? Über einen Hinweis wäre ich sehr dankbar :) Ich hab keinen schimmer wie ich das angehen soll. Es wäre super wenn ihr mir helfen könntet Danke!! :) |
AW: Neues Fenster öffnen per Button klick?? iOS
Das geht wie mit jeder anderen Komponente auch.
z.B.:
Delphi-Quellcode:
In dem Fenster (neune VCL-Form) sind zwei Edits und zwei Buttons.
Fenster := TMeinEingabeFenster.Create(nil); // Owner braucht man nicht unbedingt, da es ja manuell freigegeben wird
try // hier könnte man eventuell noch was an das Fenster übergeben if Fenster.ShowModal = mrOK then begin x := Fenster.IPEdit.Text; y := StrToInt(Fenster.PortEdit.Text); end; finally Fenster.Free; end; Ein Button mit ModalResult = mrOK und der Andere mit mrCancel Über ModalResult wird automatisch die Form, bzw. der "Dialog" geschlossen. Aber du kannst im OnClick des OK-Buttons nochmal die Eingaben prüfen und dann entweder ModalResult im Fehlerfall auf mrNone zurücksetzen, oder dort überhaupt erst auf mrOK setzen, wenn alles OK ist. [edit] OK, wenn man das Fenster von der VCL automatisch erstellen läßt (Projektoptionen > Formulare), dann ginge das auch noch etwas anders, aber sowas macht man ja nicht. Ach ja, bei TMeinEingabeFenster muß Visible natürlich auf False stehen, im OI. |
AW: Neues Fenster öffnen per Button klick?? iOS
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!
|
AW: Neues Fenster öffnen per Button klick?? iOS
Und jetzt nochmal auf Deutsch? :gruebel:
[edit] Da haben sich Dein Edit und mein Post überschnitten :lol: [/edit] |
AW: Neues Fenster öffnen per Button klick?? iOS
Zitat:
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:
Da hat der erste Vorschlag den vorteil daß man das schön debuggen kann,
Fenster.Free;
// oder Fenster.Close; // und im OnClose muß caFree gesetzt werden 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) |
AW: Neues Fenster öffnen per Button klick?? iOS
Ja ich bin die letzten Tage auch wegen Ferndiagnosen hier wegen Designfehler angesprochen worden, deshalb trage ich das mal weiter. Unter Desktop hat Showmodal seine Berechtigung, damit der Benutzer gelenkt wird und nicht im falschen Fenster rumklickt. Auf Mobilen Geräten kann das nicht passieren, da kann man das mit Design des Programms abfangen!
PS: unter XE5 und Android geht Showmodal nicht auch mit den angegeben Tricks war es nicht zum Warten zu bringen! |
AW: Neues Fenster öffnen per Button klick?? iOS
ShowModal funktioniert im iOS nicht?
Wenn ja, dann würde ich das als schwerwiegenden Bug einstufen. Im Prinzip kommt das ShowModal auf Folgendes hinaus.
Delphi-Quellcode:
Fenster := TMeinEingabeFenster.Create(Self);
try // hier könnte man eventuell noch was an das Fenster übergeben - z.B. Fenster.PortEdit.Text := IntToStr(StandardPort); // alle anderen Fenster disablen (was hier ja scheinbar nicht nötig wäre, aber es dürfte auch nicht stören) Fenster.Show; repeat Application.ProcessMessages; until ApplicationTerminated or (Fenster.ModalResult <> mrNode) or not Fenster.Visible; Fenster.Hide; // alle anderen Fenster wieder enablen if Fenster.ModalResult = mrOK then begin x := Fenster.IPEdit.Text; y := StrToInt(Fenster.PortEdit.Text); end; finally Fenster.Free; end; |
AW: Neues Fenster öffnen per Button klick?? iOS
Unter Android funktioniert es nicht: iOS gehts:!:
|
AW: Neues Fenster öffnen per Button klick?? iOS
Showmodal ist sowohl auf iOS als auch Android "ne schlechte Idee"
Es macht nur Probleme und wird auch nicht gebraucht, da im Prinzip alle Fenster Modal "aussehen". Mavarik PS.: ![]() |
AW: Neues Fenster öffnen per Button klick?? iOS
Zitat:
|
AW: Neues Fenster öffnen per Button klick?? iOS
Ja wenn das Fenster eh modal ist, dann sollte doch ShowModal eigentlich kein Problem sein. :roll:
In Bezug auf den Programmablauf hätte es nunmal auch seine Vorteile. |
AW: Neues Fenster öffnen per Button klick?? iOS
Wenn man sich aber darf verlässt und dann mal sein iOS Project nach Android nimmt muss man alles um designen. Also gleich darauf verzichten spart viel Zeit und Nerven.
Das war ja nur ein Tipp und keine Glaubensfrage! |
AW: Neues Fenster öffnen per Button klick?? iOS
Wie Emba ein ShowMessage intern verarbeitet wäre doch total egal, also wenn die am OS mal wieder was verändern sollten, kann das da drin angepasst werden.
ShowModal hat grundsätzlich nur etwas mit dem Programmablauf zu tun. - man kann keine anderen eigenen Fenster anklicken (da die Tablets immer größer werden, könnte man sich glatt vorstellen, daß die irgendwann gleichzeitige Multifenster innerhalb eines Programms erlauben) - und der Programmcode wartet an der Stelle, bis das Fenster geschlossen ist Wie arbeitet denn sowas wie ein ShowMessage oder InputQuery? Macht das denn auch nur ein Fenster auf und rauscht dann gnadenlos im Code weiter? Dann kann man den Result davon doch auch vergessen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz