AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Android/iOS Öffnen von anderen Forms
Thema durchsuchen
Ansicht
Themen-Optionen

Android/iOS Öffnen von anderen Forms

Ein Thema von rbrose · begonnen am 10. Jun 2016 · letzter Beitrag vom 14. Jun 2016
Antwort Antwort
rbrose

Registriert seit: 7. Jun 2016
8 Beiträge
 
#1

Android/iOS Öffnen von anderen Forms

  Alt 10. Jun 2016, 12:41
Hallo,

ich habe folgendes Problem. Ich finde nirgendwo im Internet wie man bei einer Android App oder iOS richtig die Forms wechselt und die korrekt schließt?

Also ich habe meine Anfangs Show LoginForm. Wenn ich ein Button Registrieren klicke, will ich die Registrieren Form öffnen. Das mache ich mit:

Delphi-Quellcode:
procedure TForm1.RegisterPopupButtonClick(Sender: TObject);
var
  RegisterForm: TForm2;
begin
//
  RegisterForm := RegistrierenForm.TForm2.CreateWithEmailAndPassword(EmailEdit.Text, registerPasswordEdit.Text);
  RegisterForm.Show;
end;
Die Register Form wird geöffnet und korrekt angezeigt.
Wenn ich jetzt aber wieder zurück will muss ich die procedure "Close" aufrufen und meine LoginForm wird wieder angezeigt.

Wenn ich aber aus der RegisterForm in eine neue Form springen will "HauptForm", erstelle ich mit HauptForm.Create(nil) ... und öffne die Form HauptForm.Show.
Soweit so gut, aber ich will das die RegisterForm geschloßen wird und ich beim schließen der HauptForm nicht mehr zurück zu RegisterForm komme sondern zum Login.

Wie schließe ich die RegisterForm korrekt? Also das die beim Öffnen der Hauptform nicht mehr im Speicher ist?
  Mit Zitat antworten Zitat
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#2

AW: Android/iOS Öffnen von anderen Forms

  Alt 10. Jun 2016, 14:55
Dein TForm2 hat ein OnClose und da kannst du den Rückgabewert auf cafree setzen.

Peter
  Mit Zitat antworten Zitat
rbrose

Registriert seit: 7. Jun 2016
8 Beiträge
 
#3

AW: Android/iOS Öffnen von anderen Forms

  Alt 12. Jun 2016, 10:57
Vielen Dank Peter, das funktioniert gut.

Ich habe aber wieder ein anderes Problem.
Meine Android zeigt beim starten eine LoginForm und der User kann sich einloggen. Wenn er sich eingeloggt hat, wird die MainForm angezeigt.
Wenn der Benutzer jetzt den Android back button klickt, kommt er wieder auf die LoginForm. Das soll er aber nicht. Wie kann ich es machen das die LoginForm nach dem öffnen von der MainForm weg ist? Und bei drücken des back Buttons die APP sich schließt?

Und eine andere Sache noch, wenn der User sich das erste Mal eingeloggt hat wird es in der Datenbank gemerkt, beim nächsten Start will ich direkt auf die MainForm springen ohne die LoginForm zu öffnen. Kann ich die Überprüfung direkt im Program unit machen? Da wo Applikation.run aufgerufen wird? Oder wie macht man das korrekt?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Android/iOS Öffnen von anderen Forms

  Alt 12. Jun 2016, 11:28
Die Frage kann man mit 100 Möglichkeiten beantworten.

Ich würde eine Steuerunit bauen...
Das MainForm ist eigentlich leer. Nur damit "was" zum laden da ist...

Darin kannst Du den Programmablauf steuern.

Main -> Passwort? Nein -> Form; Ja KeinForm
..|
Eigentliches Mainform...


usw...

Mavarik
  Mit Zitat antworten Zitat
rbrose

Registriert seit: 7. Jun 2016
8 Beiträge
 
#5

AW: Android/iOS Öffnen von anderen Forms

  Alt 13. Jun 2016, 19:48
Sorry ist mir irgendwie noch nicht klar.

Wenn ich z.B.

Delphi-Quellcode:
procedure TMasterDetailForm.FormCreate(Sender: TObject);
var
  LoginForm: TForm1;
begin
  DB:=TDB.Create(FDConnection1);
  try
    if not DB.isLogged then
      begin
       LoginForm := TForm1.Create(nil);
       LoginForm.Show;
      end;

  finally
    //nothing todo
  end;
end;
Im MainForm im Event FormCreate die LoginForm öffne, dann wird diese im Hintergrund geöffnet. Wie kriege ich diese in den Vordergrund?

Kann ich nicht vorher die Überprüfung machen? Und die mainform überhaupt nicht laden zu dem Zeitpunkt?
Oder muss eine Form existieren beim Programm start? In Android ist es ja eine Activity.

Wenn das nicht geht, dann muss ich die LoginForm in den Vordergrund kriegen und beim Android Back button die App schließen. Richtig?
  Mit Zitat antworten Zitat
rbrose

Registriert seit: 7. Jun 2016
8 Beiträge
 
#6

AW: Android/iOS Öffnen von anderen Forms

  Alt 13. Jun 2016, 21:52
Also ich habe jetzt bisschen rumprobiert und habe eine Möglichkeit gefunden. Habe aber noch ein Problem

Es wird immer die MainForm gestartet und in dem CreateForm Ereignis prüfe ich ob der User sich einloggen muss und wenn ja öffne ich so die LoginForm:

Delphi-Quellcode:
var
  LoginForm: TForm1;
begin
  DB:=TDB.Create(FDConnection1);
  try
    if not DB.isLogged then
      begin
       LoginForm := TForm1.Create(nil);
       LoginForm.ShowModal(procedure(ModalResult : TModalResult)
                begin
                  if ModalResult = mrOK then
                    // do something here
                end);
      end;

  finally
    //nothing todo
  end;
ABER, wenn ich jetzt in eine Edit Komponente reinklicke ... taucht die Tastatur nicht mehr auf Ich kann den Benutzernamen und Passwort nicht eingeben.

Wenn ich jetzt aber den Code oben in ein Button onClick Ereignis reintune, wird die LoginForm geöffnet und ich kann problemlos Benutzername und Passwort eingeben.

Wieso ist das so? Liegt es daran das der Focus nicht an der LoginForm liegt? Was für eine Möglichkeit habe ich?


Habe eine Lösung gefunden, die Form einfach im Thread starten und schon funktioniert es super:

http://stackoverflow.com/questions/3...monkey-project

Geändert von rbrose (13. Jun 2016 um 22:08 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#7

AW: Android/iOS Öffnen von anderen Forms

  Alt 14. Jun 2016, 08:59
Ich habe mich auch vorher mal erkundigt wie die Leute hier bei delphipraxis sowas machen und dann folgenden Ansatz ausgewählt.

Ich hab mir ein kleine "Framework" geschrieben das sich um die Navigation und die Anzeige von Formularen kümmert.

Grundsätzlich habe ich eine MainForm die immer sichtbar ist. Die Mainform und ein Seiten Menü sind quasi Teil des "Frameworks".

Auf der Mainform habe ich 3 Layout Controls als ViewPorts.
(HeaderViewPort,MainViewPort,FooterViewPort)

Auf jedem Formular habe ich ebenfalls 3 Layout Controls welche mit den ViewPorts korrespondieren.
In meinem Fall sind die per Namenskonvention zugeordnet, aber besser wäre wohl gewesen ein ILayoutsInterface oder so zu verwenden.


Wenn ich Navigate(MeinKontext) aufrufe passiert folgendes.
-Alle ViewPorts werden geleert.
-Das aktuelle Formular wird mit Release freigegeben und dann vergessen ( :=nil ) .
-Das Formular passend zum Kontext wird erzeugt
-Die Layouts werden per "Parent" property in den ViewPorts angezeigt.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Android/iOS Öffnen von anderen Forms

  Alt 14. Jun 2016, 09:28
Muss es eigentlich unbedingt ein Form sein? Wir haben bei uns alles in Frames ausgelagert und zeigen die bei Bedarf im Form an. Und ein Frame in den Vordergrund legen, funktioniert ohne Probleme.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#9

AW: Android/iOS Öffnen von anderen Forms

  Alt 14. Jun 2016, 09:35
Oder man nimmt einfach ein TabControl und schaltet bei Bedarf die Seiten durch.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#10

AW: Android/iOS Öffnen von anderen Forms

  Alt 14. Jun 2016, 16:15
Muss es eigentlich unbedingt ein Form sein? Wir haben bei uns alles in Frames ausgelagert und zeigen die bei Bedarf im Form an. Und ein Frame in den Vordergrund legen, funktioniert ohne Probleme.
Da laut Maverik Frames und Livebindings nicht so gut zusammen gingen habe ich diesen Ansatz verworfen.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.
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