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)