Einzelnen Beitrag anzeigen

CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#11

AW: Fehlerhafte Darstellung von TMenuItem Seperator in 10.3

  Alt 7. Feb 2019, 11:49
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.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat