AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TDialogservice Implementierung für VCL

Ein Thema von 3rad · begonnen am 3. Okt 2020 · letzter Beitrag vom 4. Okt 2020
Antwort Antwort
3rad

Registriert seit: 15. Apr 2011
Ort: Regensburg
8 Beiträge
 
Delphi 10.4 Sydney
 
#1

TDialogservice Implementierung für VCL

  Alt 3. Okt 2020, 12:30
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: TDialogservice Implementierung für VCL

  Alt 3. Okt 2020, 13:23
Ich dachte du willst die VCL loswerden, warum dann mehr von der VCL einbauen?

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.
Delphi-Referenz durchsuchenCreateMessageDialog generiert Dialoge ala MSDN-Library durchsuchenMessageBox, aber nachgebaut und basierend auf TForm.
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:
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;
Oder du baust dir komplett eigene Dialoge aus TForm, welche mit Show+Events arbeiten, anstatt mit ShowModal.

Alternativ kann man in der VCL auch die Dialoge des FMX verwenden.
$2B or not $2B

Geändert von himitsu ( 3. Okt 2020 um 13:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#3

AW: TDialogservice Implementierung für VCL

  Alt 3. Okt 2020, 14:18
Vielleicht ist das ein passender Ansatz für dich: CodeRage Deutschland 2020 - Session 05 - Pimp My System Messaging

Die zugehörigen Sourcen gibt es hier: CodeRage DE 2020 (Sources)

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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
3rad

Registriert seit: 15. Apr 2011
Ort: Regensburg
8 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TDialogservice Implementierung für VCL

  Alt 4. Okt 2020, 18:57
Alternativ kann man in der VCL auch die Dialoge des FMX verwenden.
Den Zustand hab ich leider jetzt, nur anders herum
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 hier werd ich aber trotzdem nicht vorbeikommen. Aber das hilft auch wieder weiter... Danke Euch!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:24 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