Ich habe die Ursache jetzt selbst analysiert (10.2 mit 10.3 verglichen) und gefixt. Falls es Deine (@Uwe Raabe) Änderungen sind, kannst Du den Fix gerne übernehmen. Ansonsten hilft das vielleicht noch anderen, die darauf stoßen. Ansonsten wird man künftig eben alle neuen Delphi-Anwendungen unter Windows 7 sehr leicht an den Menüs erkennen.
Vcl.Menus.pas
Der eigentliche Fehler liegt hier, weil eine Positionskorrektur fälschlicherweise auch für Separators durchgeführt wird:
Delphi-Quellcode:
1444:
// if LCheckRect.Bottom > ARect.Bottom then
if (LCheckRect.Bottom > ARect.Bottom) and (Caption <> cLineCaption) then
Unabhängig von der senkrechten Linie, die dadurch kaputt geht (was man unter Win10 aber nicht mitbekommt), verschiebt ich die waagerechte Linie nach links. Dem wurde dann in Zeile 1635 wohl versucht gegenzusteuern. Warum man bei einem Separator aber Abmessungen von Checkboxen oder Images berücksichtigen sollte statt den Fehler bei vorangehenden Änderungen zu suchen, erschließt sich mir nicht. Ich habe den Teil daher durch die vorherige 10.2er Version ersetzt:
Delphi-Quellcode:
1635:
// LDetails := LStyle.GetElementDetails(tmPopupCheckNormal);
// LStyle.GetElementSize(ACanvas.Handle, LDetails, esActual, LSize, LPPI);
// if Assigned(ImageList) and (ImageList.Width > LSize.cx) then
// LSize.cx := ImageList.Width;
// if LStyle.GetElementMargins(ACanvas.Handle, LDetails, emContent, LCheckMargins, LPPI) then
// Dec(LSize.cx, LCheckMargins.cxLeftWidth);
// if not RightToLeft then
// Inc(ARect.Left, LSize.cx)
// else
// Dec(ARect.Right, LSize.cx);
if not RightToLeft
then
ARect.Left := LGutterRect.Right + 1
else
ARect.Right := LGutterRect.Left - 1;
Damit ist das Problem behoben.