Thema: Delphi SystemMenu Ownerdraw

Einzelnen Beitrag anzeigen

OlloSoft

Registriert seit: 11. Mai 2004
14 Beiträge
 
#1

SystemMenu Ownerdraw

  Alt 13. Nov 2008, 12:14
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
Ollo
Sei respektvoll, denn du weißt nie, ob wir uns nicht mal persönlich begegnen
  Mit Zitat antworten Zitat