![]() |
Android procedure auf ShowModal warten
Hi Leute,
ich habe eine Frage zu ShowModal auf Android. Wie verwende ich es wenn ich auf eine Benutzereingabe warten möchte? Wenn ich ein Dialog in einer Procedure aufrufe, wird nicht darauf gewartet bis das Modale Fenster wieder geschlossen wurde. Ich habe mal eine Beispiel Procedure geschrieben. In der function GetRot() sollte solange gewartet werden, bis sich das Modale Fenster wieder schließt und einen Rückgabewert hat, da sonst immer ein leerer String übergeben wird. Wie löst man das am Besten?
Delphi-Quellcode:
procedure TfrmMain.CreateFarbe();
var Rot, Gruen, Blau: String; begin // Buttonindex holen Index := (Sender as TButton).Tag; Rot := ''; Gruen := ''; Blau := ''; l := Length('RGB'); for i := 1 to l do begin ch := Copy('RGB', i,i); if ch = 'R' then begin Rot := GetRot; if Rot = '' then Exit; end else if ch = 'G' then begin Gruen := GetGruen; if Gruen = '' then Exit; end else if ch = 'B' then begin Blau := GetBlau; if Blau = '' then Exit; end; end; FarbeZusammenstellen(Rot, Gruen, Blau) end; function TfrmMain.GetRot: String; var dlgRot: TfrmFarbauswahl; sRot: String; begin dlgRot := TfrmFarbauswahl.Create(nil); dlgRot.ShowModal( procedure(ModalResult: TModalResult) begin if ModalResult = mrOk then begin sRot := dlgRot.lbRot.Items[dlgRot.lbRot.ItemIndex]; end; if ModalResult = mrCancel then begin sRot := ''; end; dlgRot.Close; end ); Result := sRot; end; |
AW: Android procedure auf ShowModal warten
Unter Android ist ein ShowModal ein "Don't do"...
Mavarik |
AW: Android procedure auf ShowModal warten
Zitat:
|
AW: Android procedure auf ShowModal warten
Ja das habe ich mir schon gedacht.. Gibt es andere Möglichkeiten in einer procedure auf eine Benutzereingabe aus einem anderen Formular zu warten?
|
AW: Android procedure auf ShowModal warten
Zitat:
|
AW: Android procedure auf ShowModal warten
Zitat:
Zitat:
|
AW: Android procedure auf ShowModal warten
Ich persönlich halte nichts von den Callbacks nur für Unterformulare oder Messageboxen, ist mir einfach zu aufwendig.
Du kannst eine globale Variable definieren die von der Unterform gefüllt wird. Das Hauptformular muss nun einfach nur solange warten, bis die Variable gefüllt ist. Beispiel:
Code:
var MsgDlgResult: Integer;
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer; begin MsgDlgResult := -1; FMX.Dialogs.MessageDlg(Msg, DlgType, Buttons, HelpCtx, procedure(const AResult: TModalResult) begin MsgDlgResult:= AResult; end ); while MsgDlgResult<0 do Delay(10); Result := MsgDlgResult; end; |
AW: Android procedure auf ShowModal warten
Zitat:
Richtig ist, dass die Methode/Prozedur, die dieses ShowModal aufruft, erst dann weiter läuft, wenn diese modale Form geschlossen wurde. Die Anwendung selber läuft einwandfrei weiter. @greenmile Bitte nicht ... es gibt einen guten Grund, warum die modalen Formulare auf den Mobile Devices eben nicht mehr blockierend sind. |
AW: Android procedure auf ShowModal warten
Zitat:
Delphi-Quellcode:
:stupid:
while MsgDlgResult<0 do Delay(10); // Töte den Akku
Spass bei Seite... Bitte nicht.. Es gibt bessere Wege Das war mal ein Post... Als XE6 raus gekommen ist, oder? Ich hatte das auch so "abgetippt" [EDIT] Habs gefunden... Original Post war:
Delphi-Quellcode:
function MyMessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
{$IFDEF ANDROID} var MsgDlgResult : Integer; {$ENDIF} begin {$IFDEF ANDROID} MsgDlgResult := -1; FMX.Dialogs.MessageDlg(Msg, DlgType, Buttons, HelpCtx, procedure(const AResult: TModalResult) begin MsgDlgResult:= AResult; end); while MsgDlgResult<0 do begin Application.Processmessages; // Makes Android Happy... Sleep(10); end; Result := MsgDlgResult; {$ELSE} Result := FMX.Dialogs.MessageDlg(Msg, DlgType, Buttons, HelpCtx); {$ENDIF} end; |
AW: Android procedure auf ShowModal warten
Application.Processmessages ist eine ganz schlechte Idee unter Android/iOS...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz