StalkerSoftware
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Hi All, Delphi 10.3.3 Есть контекстное меню. Мне нужно некоторые пункты этого меню отрисовать своим цветом. Для этого на соответствующие MenuItem вешаю обработчик OnDrawItem: Цитата: procedure TForm1.MenuitemDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); var oAction :TAction; nOffSet :Integer; begin oAction := ((Sender as TMenuItem).Action as TAction); if TOSVersion.Major < 6 then // WinXP и ниже nOffSet := 22 else // Windows 7 и выше nOffSet := 32; if oAction.Tag = 1 then ACanvas.Font.Color := clRed else if oAction.Tag = 2 then ACanvas.Font.Color := clPurple; ACanvas.FillRect(ARect); ACanvas.TextOut(ARect.Left+nOffSet, ARect.Top, oAction.Caption) end; | В принципе вывод текста (Caption) пункта меню работает, но как то не очень красиво рисуется цвет фона пункта меню, особенно если этот пункт меню текущий (т.е. к нему сейчас подведена мышь). Этот цвет отличается от пунктом меню, которые я не отрисовываю. А если для программы включить какую нибудь тему, отличную от Windows, например Luna, то все еще хуже - у текущего элемента фон выделения вообще не прорисовывается, а у остальных пунктов меню (которые я отрисовываю, но которые не текущие) цвет фона отличается от других пунктов меню, которые рисуются сами. В общем очень нужна помощь, в написании правильного кода отрисовки текстов пунктов меню своим цветом, что бы не было проблем с цветом фона, в том числе и при использовании тем (если последнее конечно возможно). |