Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Neues Fenster öffnen per Button klick?? iOS (https://www.delphipraxis.net/178565-neues-fenster-oeffnen-per-button-klick-ios.html)

GummiBaum 15. Jan 2014 10:34

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!! :)

himitsu 15. Jan 2014 10:48

AW: Neues Fenster öffnen per Button klick?? iOS
 
Das geht wie mit jeder anderen Komponente auch.

z.B.:
Delphi-Quellcode:
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;
In dem Fenster (neune VCL-Form) sind zwei Edits und zwei Buttons.
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.

arnof 15. Jan 2014 11:01

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!

DeddyH 15. Jan 2014 11:02

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]

himitsu 15. Jan 2014 11:10

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

Zitat von arnof (Beitrag 1243758)
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)

arnof 15. Jan 2014 13:00

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!

himitsu 15. Jan 2014 13:36

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;

arnof 15. Jan 2014 16:10

AW: Neues Fenster öffnen per Button klick?? iOS
 
Unter Android funktioniert es nicht: iOS gehts:!:

Mavarik 15. Jan 2014 18:05

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.: hier nochmal der Link zu meinem Video für die Datenübertragung zum/vom PC

arnof 15. Jan 2014 18:09

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

Zitat von Mavarik (Beitrag 1243844)
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.: hier nochmal der Link zu meinem Video für die Datenübertragung zum/vom PC

Schön formuliert :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz