Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   VCL-Styles ersetzen auch die TaskDialoge? (https://www.delphipraxis.net/212772-vcl-styles-ersetzen-auch-die-taskdialoge.html)

himitsu 30. Mär 2023 17:06

VCL-Styles ersetzen auch die TaskDialoge?
 
Malt bei Verwendung der den neueren VCL-Styles das Delphi die MessageDialoge wieder selber?

Na toll, dann werden dort ja Fehler in altem LegacyCode (vor WinXP, bzw. ab XP mit deaktiviertem Theme) wieder neu eingebaut. :wall:


Hier ist das uns auch mal wieder auf die Füße gefallen.

Ein Ja/Nein-Dialog mit dritter Auswahlmäglichkeit ESC bzw. [X] :freak:

Durch einen Bugfix in einem Bugfix, welcher nun auch noch diesen Bug traf.
(wenn irgendwann endlich das neue Delphi fertig ist, dann ist dieser Bug zwar immernoch da, aber wir treffen ihn nicht mehr :stupid:)

Delphi-Quellcode:
     ...

     {$REGION 'Bugfix (Standard-MessageDialog) : Problem Z-Order bei Verwendung des klassischen MessageDlg mit CreateMessageDialog'}
     { TODO -k.A. von wann und wem : wie soll dieser Bugfix funktionieren, wenn es das StayOnTop ignoriert? }
     { TODO -FS 2018-07-03 : im Prinzip kommen wir mit dem Selbsterstellen besser, denn dort sind dann auch die Dialog-Buttons richtig übersetzt }
     if isDefault then begin
       {$IF CompilerVersion < 23}
       // XE-Bugfix für DefaultButtons https://www.delphipraxis.net/196905-messagedlg-mit-falschem-default.html
       // MessageDlg nutzt so intern auch CreateMessageDialog anstatt der neuen TaskDialog-API, in welcher Delphi den Fehler eingebaut hat.
       SaveULCD := UseLatestCommonDialogs;
       try
         if (DefaultBtn in DlgButtons) and (Word(DlgButtons - [DefaultBtn]) > Word([DefaultBtn])) then
           UseLatestCommonDialogs := False; // nur, wenn Default nicht der "letzte" Button ist
          // ACHTUNG: ESC-Taste = mrNo (nicht mrCancel)
          // https://redmine.**********.de/issues/19576
       {$IFEND}
       Result := MessageDlg(Msg, DlgType, DlgButtons, 0{HelpKeyword}, DefaultBtn);
       {$IF CompilerVersion < 23}
       finally
         UseLatestCommonDialogs := SaveULCD;
       end;
       {$IFEND}
       if CurrFocusHandle <> 0 then
         Windows.SetFocus(CurrFocusHandle);
       TDM1.ScreenCursorSwitchToHoureGlass(HasWaitCursor);
       Exit;
     end;
     {$ENDREGION}

     Width  := 0;
     Recalc := False;
     MSGForm := CreateMessageDialog(Msg, DlgType, DlgButtons, DefaultBtn);
     ...


Vielleich endlich mal wieder mit der neuen TaskDialog-API spielen.
Dort soll man nun ja auch die Ja/Nein/OK/...-Buttons übersetzen/umlabeln können. (wenn ich mich Recht erinner)

Uwe Raabe 30. Mär 2023 18:00

AW: VCL-Styles ersetzen auch die TaskDialoge?
 
Zitat:

Zitat von himitsu (Beitrag 1520492)
Dort soll man nun ja auch die Ja/Nein/OK/...-Buttons übersetzen/umlabeln können. (wenn ich mich Recht erinner)

Du meinst sowas wie dies hier aus Vcl.Dialogs?
Delphi-Quellcode:
function TaskMessageDlg(const Title, Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn; CustomButtonCaptions: array of string): Integer; overload;

himitsu 30. Mär 2023 18:58

AW: VCL-Styles ersetzen auch die TaskDialoge?
 
Nja, dachte erstmal an Alles, was z.B. ShowMessage, MessageDlg und deren Freunde benutzt.



Selber nutzen wir nicht die Styles von Emba (gibt ja seit Jahrzehnten von Anderen und wozu das nun austauschen),
aber für Bugfixes schalten wir an gewissen Stellen z.B. vorübergehend mal kurz UseLatestCommonDialogs ab.

Und um z.B. die Captions der Buttons selbst zu übersetzen oder mit anderem Text zu versehen, greifen wir auf Delphi-Referenz durchsuchenCreateMessageDialog zu,
zusätzlich zum TTaskDialog mit Buttons.Add.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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