Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

AW: TDialogservice Implementierung für VCL

  Alt 3. Okt 2020, 12: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 3. Okt 2020 um 12:28 Uhr)
  Mit Zitat antworten Zitat