Erstellen Sie ein ShowModal-Fenster für Android

Wie Sie wissen, ist die Implementierung eines Formulars mit Delphi und dessen Anzeige mit ShowModal auf der Android-Plattform nicht blockierend, d. h. nach der Ausführung von Form.ShowModal wird der Code weiter ausgeführt, anstatt zu warten, was völlig anders ist als auf der Windows-Plattform . Wenn wir einen blockierenden Effekt benötigen, wie können wir ihn erreichen?

1. Erstellen Sie zunächst wie gewohnt ein Formular.

2. Implementieren Sie je nach Bedarf spezifische Inhalte für das Formular.

3. Implementieren Sie eine Methode in der Fenstereinheit, um dieses Fenster anzuzeigen:

procedure ShowPrivacyForm(AFormResult: TProc<TModalResult>);
Implementierung

{$R *.fmx}
//Aufrufende Methode:
// ShowPrivacyForm(
// procedure(AResult: TModalResult)
// beginnen
//
// Ende);

War
  PrivacyForm: TPrivacyForm;//Eine private Variable deklarieren

procedure ShowPrivacyForm(AFormResult: TProc<TModalResult>);
beginnen
  wenn nicht zugewiesen (PrivacyForm), dann
  beginnen
    PrivacyForm := TPrivacyForm.Create(Application);
  Ende;
  PrivacyForm.ShowModal(
    procedure(AResult: TModalResult)
    beginnen
      AFormResult(AResult);//Der Rückruf wird hier ausgeführt
      TTask.Run(
                Verfahren
                beginnen
                  TThread.Synchronize(nil,
                    Verfahren
                    beginnen
                      PrivacyForm.DisposeOf;//Dieses Fenster freigeben
                      PrivacyForm := nil;
                    Ende);
                Ende);
    Ende);
Ende;

4. Um dieses Fenster anzuzeigen, verweisen Sie zunächst auf die Einheit, in der sich das Formular befindet, und rufen Sie dann die Methode ShowPrivacyForm auf, um das Fenster anzuzeigen:

        ShowPrivacyForm(
                        procedure(AResult: TModalResult)
                        beginnen
                           wenn AResult=mrCancel dann
                           beginnen
                               Schließen;
                           Ende
                           anders
                           beginnen
                               //Der Benutzer hat auf die Schaltfläche „OK“ geklickt
                           Ende;
                        Ende);

5. Detaillierte Verarbeitung, Übernahme der Eingabetaste des Android-Telefons. Wenn der Benutzer die Eingabetaste drückt, entspricht dies einem Klicken, um den Vorgang abzubrechen:

procedure TPrivacyForm.FormKeyUp(Sender: TObject; var Key: Word;
    var KeyChar: Char; Schicht: TShiftState);
beginnen
  if Key = vkHardwareDamals
       self.ModalResult := mrCancel;
Ende;

6. Achten Sie auf eine kleine Grube und sehen Sie sich den folgenden Code an:

procedure TPrivacyForm.CCButton1Click(Sender: TObject);
beginnen
  self.ModalResult := mrOk; //Dieser Satz schließt das Fenster direkt, ohne die Close-Methode auszuführen.
// Schließen;
Ende;

Es stellt sich heraus, dass ich Close ausgeführt habe und festgestellt habe, dass der vom Fenster zurückgegebene Wert mrCancel war. Beim Tracking auf der Windows-Plattform wurde festgestellt, dass es sich um das Ergebnis der Ausführung von Close handelte, diese Zeile wurde auskommentiert und die Ausführung war normal. Es stellte sich heraus, dass der Satz Self.ModalResult:=mrOK das Fenster automatisch schließt und Das folgende Schließen ist überflüssig.

Ok, ein perfektes ShowModal-Fenster ist implementiert!

Der Kerncode bezieht sich auf die Demo im ChinaCock-Komponentenpaket des Experten. Vielen Dank hier!

Delphi 11.3-Test bestanden.

 

Supongo que te gusta

Origin blog.csdn.net/tjsoft/article/details/132511432
Recomendado
Clasificación