Einzelnen Beitrag anzeigen

CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#4

AW: VirtualImageList für TrayIcon-PopupMenu mit unterschiedlichen DPI-Monitoren

  Alt 19. Mai 2020, 17:14
Habe mich mal eben durch Vcl.Menus durchdebuggt. Das Problem liegt tatsächlich daran, dass dort fälschlicherweise die PPI der Owner-Form genommen wird:
Delphi-Quellcode:
function TMenuItem.GetDevicePPI: Integer;
...
    if (TWinControl(LParent.Owner).Handle > 0) and GetWindowPlacement(TWinControl(LParent.Owner).Handle, LPlacement) then
        LMonitor := Screen.MonitorFromPoint(LPlacement.rcNormalPosition.CenterPoint)
    else
      LMonitor := Screen.MonitorFromWindow(Application.Handle);
    if LMonitor <> nil then
      Result := LMonitor.PixelsPerInch
    else
      Result := Screen.PixelsPerInch;
  end
Ich glaube, dass man die PPI stattdessen vom Monitor der X/Y-Popup-Koordinaten beziehen müsste.

Hm ... lässt sich das jetzt irgendwie "austricksen" oder muss ich die Vcl.Menus.pas patchen?
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