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.