чего-то меня глючит, но вроде так:
| Код | type TForm1 = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; ... N9: TMenuItem; procedure FormCreate(Sender: TObject); private procedure DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState); end;
...
procedure TForm1.DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState); var s : string;
begin with acanvas do begin if odSelected in state then brush.color := clLime else brush.Color := clBlack;
FillRect(arect);
if odSelected in State then font.Color := clBlack else font.Color := clLime;
s := (sender as TMenuItem).Caption; if s = '-' then begin pen.Color := clLime; moveto(ARect.Left, arect.Top); lineto(arect.Right, arect.Top); end else begin offsetrect(arect, 5, 2); DrawText(Handle, pchar(s), length(s), arect, 0); end; end; end;
procedure setItemDrawPropertyTo(mi : TMenuItem); var i : integer;
begin mi.OnAdvancedDrawItem := Form1.DrawItem; for i := 0 to mi.Count-1 do setItemDrawPropertyTo(mi.Items[i]); end;
procedure TForm1.FormCreate(Sender: TObject); begin setItemDrawPropertyTo(MainMenu1.Items); end; |
То что рисуется - просто демо, не воспринимайте так уж всерьез, setItemDrawProperty нужна чтобы выставить всем item'ам наш обработчик рисования, а не делать это вручную в редакторе mainmenu. В самом MainMenu все что надо - выставить OwnerDraw := True |