Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.014 Beiträge
 
Delphi 12 Athens
 
#4

AW: TMainMenu: Änderung der Schriftgröße ändert nicht den Abstand der Einträge

  Alt 19. Jun 2025, 22:46
Leider wird das alles nicht aufgerufen. Es kommt gar nicht erst WM_MEASUREITEM, so dass es keinerlei Unterschied macht, ob die Events zugewiesen sind oder nicht.

Auch DrawMenuBar usw. bringt nichts. Und die Möglichkeiten zur Neuerstellung des Handles sind so eingekapselt, dass man da nicht so einfach herankommt. So funktioniert es korrekt (zum Testen einfach die Typdeklaration über das Formular schreiben, damit unser TMenuItem statt dem aus Vcl.Menus verwendet wird):
Delphi-Quellcode:
type
  TMenuItem = class(Vcl.Menus.TMenuItem)
  public
    procedure Rebuild;
  end;

procedure CallByAddress(Instance: TObject; Address: Pointer);
type
  TRebuildHandleProc = procedure of object;
var
  Method: TMethod;
  Proc: TRebuildHandleProc;
begin
  Method.Code := Address;
  Method.Data := Instance;
  Proc := TRebuildHandleProc(Method);
  Proc;
end;

procedure TMenuItem.Rebuild;
begin
{$if CompilerVersion = 36}
  CallByAddress(Self, Pointer(NativeUInt(@TMenuItem.Insert) - $34B4));
{$else}
  {$message error 'Die Adresse muss für diese Delphiversion ggf. angepasst werden!'}
{$ifend}
  MenuChanged(True);
end;
Aufruf:
Delphi-Quellcode:
var
  i: Integer;
begin
  Screen.MenuFont.Size := 16;
  for i := 0 to MainMenu1.Items.Count - 1 do
    TMenuItem(MainMenu1.Items[i]).Rebuild;
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat