![]() |
SystemMenu Ownerdraw
Hallo liebe Leute,
ich möchte mich selber um das Zeichnen der System-Menu-Items kümmern und weise dazu den einzelnen Menüpunkten die Eigenschaft MFT_OWNERDRAW zu:
Delphi-Quellcode:
Dem Formular habe ich Prozeduren für die Botschaftenbehandlung von WM_DRAWITEM und WM_MEASUREITEM hinzugefügt ...
var
SysMenu: HMenu; MenuItemInfo: TMenuItemInfo; i: Integer; begin SysMenu := GetSystemMenu(Handle, False); FSysMnu := SysMenu; for i:=0 to GetMenuItemCount(SysMenu)-1 do begin FillChar(MenuItemInfo, SizeOf(TMenuItemInfo), #0); MenuItemInfo.cbSize := SizeOf(TMenuItemInfo); MenuItemInfo.fMask := MIIM_TYPE; GetMenuItemInfo(SysMenu, i, True, MenuItemInfo); if (MenuItemInfo.fType and MFT_SEPARATOR) = MFT_SEPARATOR then MenuItemInfo.fType := MenuItemInfo.fType or MFT_OWNERDRAW else MenuItemInfo.fType := MFT_OWNERDRAW; SetMenuItemInfo(SysMenu, i, True, MenuItemInfo); end; end;
Delphi-Quellcode:
...und WMDrawItem() funktioniert auch reibungslos. Die Message WM_MEASUREITEM allerdings wird nur dreimal aufgerufen, obwohl 7 (mit Separator) Menü-Items vorhanden sind.
procedure WMDrawItem(var Msg: TWMDrawItem); message WM_DRAWITEM;
procedure WMMeasureItem(var Msg: TWMMeasureItem); message WM_MEASUREITEM; Habe ich bei der Ownerdraw-Zuweisung einen Fehler gemacht? Wie kann ich WMMeasureItem() für alle System-Menu-Items forcieren? TIA Ollo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz