![]() |
Delphi Rio MessageDialogSync
Hallo (nochmal),
ich benötige die InputQuerySync, MessageDialogSync, ShowMessageSync unter 10.3.3 Unter XE8 ließ sich das mit einer While Schleife nachbilden, das geht aber unter XE 10.3.3 nicht mehr (hängt sich auf). Ziel ist es, einen MessageDlg anzuzeigen bei der so lange gewartet wird, bis der User bestätigt oder was eingibt. Es gibt zwar TDialogService.PreferredMode, dort wird bei Android jedoch immer Async genommen. |
AW: Delphi Rio MessageDialogSync
Warum nicht mit anonymer Methode, verstehe ich nicht ?
Mach ich mittlerweile nur noch so. Wenn Du unbedingt blockieren willst, dann vielleicht mit TEvent, der dann in der anonymen Methode ein Signal gibt. ![]() Das geht ja auch ohne Threads. |
AW: Delphi Rio MessageDialogSync
Hört sich komisch an, aber ist mir zu kompliziert, ich möchte nicht für jede mögliche Antwort bzw jeden möglichen Button eine eigene Procedure schreiben, nur um 'Bist du sicher?' abzufragen.
|
AW: Delphi Rio MessageDialogSync
Das einmal in eine Klasse/Funktion zuverpacken würde reichen,
so machen es die _Sync Methoden auch. Mal so hingekritzelt als Funktion ... So müsste das eigentlich funktionieren (Tippfehler ausgenommen).
Delphi-Quellcode:
procedure MyDlg_Message(const AMessage: string; const ADialogType: TMsgDlgType; const AButtons: TMsgDlgButtons; // const AHelpContext: LongInt; const ACloseDialogProc: TInputCloseDialogProc = nil ); procedure MyDlg_Message(const AMessage: string; const ADialogType: TMsgDlgType; const AButtons: TMsgDlgButtons; // const AHelpContext: LongInt; const ACloseDialogProc: TInputCloseDialogProc ); var LProcDlg : TInputCloseDialogProc; LCloseDialogProc : TInputCloseDialogProc; LEvent : TEvent; LRes : TWaitResult; begin LCloseDialogProc := ACloseDialogProc; if not Assigned( LClodeDialogProc ) then LEvent := TEvent.Create(nil, True, False, 'MyEventName') else LEvent := nil; try LProcDlg := procedure( const AResult: TModalResult) begin if Assigned( LCloseDialogProc ) then begin LCloseDialogProc( AResult ); end else begin // Want a blocking Message if Assigned( LEvent ) then begin LEvent.SetEvent; end; end; end; FMX.DialogService.TDialogService {} .MessageDialog( AMessage, ADialogType, AButtons, TMsgDlgBtn.mbCancel, 0, LProcDlg ); // ACloseDialogProc); finally if Assigned( LEvent ) then begin LRes := LEvent.WaitFor( INFINITE ); //<== or better Timeout here case LRes of wrSignaled : { => Done }; wrTimeout : { => Timeout }; wrAbandoned : {Terminate}; wrError : { Logging }; end; LEvent.Free; end; end; end; |
AW: Delphi Rio MessageDialogSync
Verstehe ich leider nicht, hast du ein Beispiel?
|
AW: Delphi Rio MessageDialogSync
Android will so was nicht synchron, drum musste es Delphi abstellen.
Meiner Meinung nach besser gleich komplett Event orientiert programmieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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