Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

VCL-Styles ersetzen auch die TaskDialoge?

  Alt 30. Mär 2023, 18:06
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.


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

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

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 )

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)
$2B or not $2B

Geändert von himitsu (30. Mär 2023 um 18:09 Uhr)
  Mit Zitat antworten Zitat