![]() |
TDialogservice Implementierung für VCL
Hallo Zusammen,
gibt es für die VCL auch einen TDialogservice Implementierung, analog zu FMX.Dialogservice? Ich versuche gerade die Abhängigkeit von der VCL in Teilen unserer Source zu entfernen und stolpere immer wieder über MessageDlg-Aufrufe der VCL.Dialogs. Viele Grüße Andreas |
AW: TDialogservice Implementierung für VCL
Ich dachte du willst die VCL loswerden, warum dann mehr von der VCL einbauen? :wink:
Nja, erstes Problem ist erstmal die generell unterschiedliche Behandlung von Dialogen. * in der VCL arbeiten sie im allgemeinen synchron/blocked (Ablauf wartet bis fertig und gibt das Ergebnis direkt zurück) * im FMX dagegen asynchron/non-blocked (ohne Halt weiter und das Ergebnis kommt über Events) Du könntest Funktionen verwenden, die per se eigentlich vorwiegend für die Abwärtskompatibilität vorgesehen sind, aber womit man auch frei eigene Dialoge bauen/anpassen/erweitern kann. ![]() ![]() Hier bekommt man die erzeugte TForm und kann dann mit Show+OnClick/OnClose asynchron arbeiten, anstatt mit ShowModal. Vorrangig wird das verwendet, um Systeme zu unterstüzen, welche die TaskDialog-API noch nicht kennen (z.B. WinXP) oder wo die NewCommonControls deaktiviert sind (Vista und Win7, wo die Designs fehlen, also wo nur die "alte" API genutzt werden kann, weil die neuen System-DLLs nicht geladen sind).
Delphi-Quellcode:
Oder du baust dir komplett eigene Dialoge aus TForm, welche mit Show+Events arbeiten, anstatt mit ShowModal.
function TaskMessageDlgPosHelp(const Title, Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; const HelpFileName: string; DefaultButton: TMsgDlgBtn): Integer; begin if TOSVersion.Check(6) and IsNewCommonCtrl then Result := DoTaskMessageDlgPosHelp(Title, Msg, DlgType, Buttons, HelpCtx, X, Y, HelpFileName, DefaultButton) // nutzt die DialogAPI vom Windows else Result := DoMessageDlgPosHelp(CreateMessageDialog(Msg, DlgType, Buttons, DefaultButton), HelpCtx, X, Y, HelpFileName); // nutzt die nachgebauten Dialoge der VCL end; Alternativ kann man in der VCL auch die Dialoge des FMX verwenden. :zwinker: |
AW: TDialogservice Implementierung für VCL
Vielleicht ist das ein passender Ansatz für dich:
![]() Die zugehörigen Sourcen gibt es hier: ![]() Kurz: Die MessageDlg-Aufrufe werden von der eigentlichen Implementierung entkoppelt. Damit wird eine direkte Verwendung von Vcl.Dialogs vermieden und kann durch andere Implementierungen ersetzt werden. |
AW: TDialogservice Implementierung für VCL
Zitat:
Ich möchte FMX3D, benutzen und habe in BusinessLogik-Units die VCL drin. Ich muss den Code so bauen, dass es keine Warnungen gibt und die schmeißt der Ressourcencompiler momentan. Warnings ausschalten ist leider keine Option :) Aber das Video zum Thema System.Messaging vom Uwe ist ein sehr guter Weg. Das löst schon mal den größten Teil meines DialogProblems. Das ganze auf FMX zu erweitern ist ein Klacks. An dem Thema Compilerschalter fürs Framework ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 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