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:
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;
Dem Formular habe ich Prozeduren für die Botschaftenbehandlung von
WM_DRAWITEM und
WM_MEASUREITEM hinzugefügt ...
Delphi-Quellcode:
procedure WMDrawItem(var Msg: TWMDrawItem); message WM_DRAWITEM;
procedure WMMeasureItem(var Msg: TWMMeasureItem); message WM_MEASUREITEM;
...und WMDrawItem() funktioniert auch reibungslos. Die Message WM_MEASUREITEM allerdings wird nur dreimal aufgerufen, obwohl 7 (mit Separator) Menü-Items vorhanden sind.
Habe ich bei der Ownerdraw-Zuweisung einen Fehler gemacht?
Wie kann ich WMMeasureItem() für alle System-Menu-Items forcieren?
TIA
Ollo