Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   FMX Android TDialogService mit mbYesAllNoAllCancel läuft nicht (https://www.delphipraxis.net/211734-fmx-android-tdialogservice-mit-mbyesallnoallcancel-laeuft-nicht.html)

tdeck 27. Okt 2022 20:19

FMX Android TDialogService mit mbYesAllNoAllCancel läuft nicht
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Leute,

ich baue mir gerade eine Dialog-Abfrage als Function, die unter Windows und Android laufen soll.

Unter Windows funktioniert alles so wie es soll, aber unter Android leider nicht.
Unter Android habe ich nur 3 Auswahlmöglichkeiten "Abbrechen", "NEIN" und "JA".
Ebenfalls erhalte ich immer nur -1 als Rückgabe.

Gibt es so einen Dialog unter Android nicht oder habe ich es falsch aufgebaut?

Und warum stimmt unter Android der Rückgabewert nicht?

Code:
// Android komforme Abfrage
//
function AbfrageJaNeinJaAlleNeinAlle( strText : string ) : integer;
var
  iReturn : integer;
begin
   iReturn := -1;
  TDialogService.MessageDialog(strText,
                TMsgDlgType.mtWarning,
                FMX.Dialogs.mbYesAllNoAllCancel,
                TMsgDlgBtn.mbNo,
                0,
      procedure (const AResult: System.UITypes.TModalResult)
      begin
       case AResult of
          mrYES          : iReturn := 1;
          mrYesToAll     : iReturn := 11;
          mrNo           : iReturn := 2;
          mrNoToAll      : iReturn := 22;
       else
         iReturn := -1;
       end;
      end);

   AbfrageJaNeinJaAlleNeinAlle := iReturn;
end;
Gruß
Thorsten

Rollo62 28. Okt 2022 08:18

AW: FMX Android TDialogService mit mbYesAllNoAllCancel läuft nicht
 
Ich vermute mal solche mehrfachen Auswahlen gibt es unter Android nicht 1:1.

Es gab unter IOS mal einen Bug mit Verwechselung von mrOK und mrCancel
https://en.delphipraxis.net/topic/72...#comment-61713
https://quality.embarcadero.com/browse/RSP-37702
In D11.2 Patch 1 ist das wohl gefixt.

Eine solche Verwechselung ist mir bei Android jetzt nicht bekannt, vielleicht ist da aber jetzt was neuerdings reingerutscht.
Es könnte sich lohnen das mal direkt in den Sourcen zu checken.

mensch72 28. Okt 2022 09:43

AW: FMX Android TDialogService mit mbYesAllNoAllCancel läuft nicht
 
Euch ist schon klar, das hier "Async" erst ein gültiges Result gibt, wenn im Dialog eine UserAction passiert.

Der Code so wie er ist liefert IMMER -1, weil "TDialogService.MessageDialog(...") NICHT wartet und sofort zurück kommt und da hat sich am -1 nix geändert.
Die lokale "Rückgabe-Variable" ist auch suboptimal, weil sich die gesamte function ja auch stets sofort beendet... besser was in übergeordneter Klasse oder notfalls was globales.


Grundvoraussetzung: Verstehen, WARUM und DAS es in Android&IOS anders wie unter Windows ist(ohne warten)!!!

Rollo62 29. Okt 2022 08:44

AW: FMX Android TDialogService mit mbYesAllNoAllCancel läuft nicht
 
Das stimmt, habe ich übersehen dass der TE wohl annimmt direkt einen gültigen Wert zu bekommen.
Die Dialoge "warteten" nicht auf die Eingabe, deshalb kommt hier immer -1.
Delphi-Quellcode:
AbfrageJaNeinJaAlleNeinAlle := iReturn;
Trotzdem ist das eine gute Frage ob diese Mehrfach-Windows-Dialoge prinzipiell auch auf Android und Anderen funktionieren.
Das habe ich noch nirgendwo gesehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 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