Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 106

/ вопрос открыт /

Можно ли изменить цвет MainMenu(Menus) с стандартного (серого) например на белый? В Object Inspector нет такой возможности. Подскажите пожалуйста, очень нужно. Спасибо.

Глушко Дмитрий Иванович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Глушко Дмитрий Иванович (статус: Посетитель)
Вопрос отправлен: 16 августа 2006, 10:54
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Глушко Дмитрий Иванович!
Вам нужно самому отрисовывать пункты меню.
См. хороший пример в прикреплённом файле.
Либо используйте сторонние компоненты (их полно), см. на torry.net;
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 16 августа 2006, 11:52

Ответ #2. Отвечает эксперт: MFred

Здравствуйте, Глушко Дмитрий Иванович!
Вот в приложении пример который позволяет изменить цвет и не только.

Приложение:
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var i, j:Integer;
  3. Menu: TMenu;
  4. begin
  5. for i := 0 to ComponentCount-1 do
  6. begin
  7. if (Components[i] is TMenu) then
  8. begin
  9. Menu := TMenu(Components[i]);
  10. for j := 0 to Menu.Items.Count-1 do
  11. SetDrawEvent(Menu.Items[j]);
  12. end;
  13. end;
  14. end;
  15.  
  16.  
  17. procedure TForm1.SetDrawEvent(MenuItem: TMenuItem);
  18. var i : integer;
  19. begin
  20. MenuItem.OnAdvancedDrawItem := DrawMenuItem;
  21. for i := 0 to MenuItem.Count-1 do
  22. SetDrawEvent(MenuItem.Items[i]);
  23. end;
  24.  
  25.  
  26.  
  27. procedure TForm1.DrawMenuItem(Sender: TObject; ACanvas: TCanvas;
  28. ARect: TRect; State: TOwnerDrawState);
  29. var rtText, rtIcon: TRect;
  30. clBackground,clSelectedBk, clFont: TColor;
  31. clDisabledFont, clSeparator, clSelectedBorder: TColor;
  32. t: integer;
  33. miParent: TMenuItem;
  34. Menu: TMenu;
  35. il:TCustomImageList;
  36. begin
  37. miParent := TMenuItem(Sender);
  38. Menu := miParent.Parent.GetParentMenu;
  39. // Çàäàåì öâåòà
  40. clBackground:= $00EFFFFF;
  41. clSelectedBk:=$00EAC8B7;
  42. clSelectedBorder:=$00C66931;
  43. clFont := clRed;
  44. clDisabledFont := clRed;
  45. clSeparator := $00D1D1D1;
  46.  
  47. rtIcon:=aRect;
  48. rtIcon.Right:=rtIcon.Left+20;
  49. rtText:=aRect;
  50. rtText.Left:=rtIcon.Left+20;
  51. if ((miParent.Parent.GetParentMenu.Images <> nil) or
  52. (miParent.Parent.SubMenuImages <> nil)) and
  53. (miParent.ImageIndex <> -1) then
  54. if (miParent.Parent.SubMenuImages <> nil)
  55. then il:=miParent.Parent.SubMenuImages
  56. else il:=miParent.Parent.GetParentMenu.Images;
  57. aCanvas.Brush.Color := clBackground;
  58. aCanvas.FillRect(rtText);
  59. if (Menu is TMainMenu) then
  60. for i := 0 to miParent.GetParentMenu.Items.Count-1 do
  61. if (miParent.GetParentMenu.Items[i] = miParent) then
  62. begin
  63. aCanvas.Brush.Color := clBtnFace;
  64. aCanvas.FillRect(aRect);
  65. rtIcon.Right:=rtIcon.Left;
  66. if (miParent.ImageIndex = -1) and
  67. (miParent.Bitmap.Width = 0) then
  68. begin
  69. rtText := aRect;
  70. Break;
  71. end;
  72. end;
  73. if miParent.Enabled
  74. then aCanvas.Font.Color := clFont
  75. else aCanvas.Font.Color := clDisabledFont;
  76. if (odSelected in State) or (odHotLight in State) then
  77. begin
  78. aCanvas.Brush.Style := bsSolid;
  79. aCanvas.Brush.Color := clSelectedBk;
  80. aCanvas.Pen.Color := clSelectedBorder;
  81. aCanvas.Rectangle(ARect);
  82. end
  83. else
  84. begin
  85. aCanvas.Brush.Color := clBtnFace;
  86. aCanvas.FillRect(rtIcon);
  87. end;
  88. if not miParent.IsLine then
  89. begin
  90. SetBkMode(aCanvas.Handle,TRANSPARENT);
  91. if miParent.Default then
  92. begin
  93. aCanvas.Font.Color := clGray;
  94. aCanvas.TextOut(rtText.Left+1, rtText.Top+1, PChar(' '+
  95. miParent.Caption));
  96. end;
  97. if miParent.Enabled then
  98. aCanvas.Font.Color := clFont;
  99. aCanvas.TextOut(rtText.Left+2, rtText.Top+2, PChar(' ' + miParent.Caption));
  100. aCanvas.TextOut(rtText.Right-2, aCanvas.TextWidth(ShortCutToText(miParent.ShortCut)+' ')+
  101. rtText.Top+2, PChar(ShortCutToText(miParent.ShortCut) + ' '));
  102. end;
  103. if (miParent.ImageIndex>=0)
  104. then
  105. else
  106. begin
  107. aCanvas.Pen.Color := clSeparator;
  108. aCanvas.MoveTo(ARect.Left + 10, rtText.Top +
  109. Round((rtText.Bottom - rtText.Top) /2));
  110. aCanvas.LineTo(ARect.Right - 2, rtText.Top +
  111. Round((rtText.Bottom - rtText.Top) /2))
  112. end;
  113.  
  114. end;
  115.  
  116.  


Ответ отправил: MFred (статус: 1-ый класс)
Время отправки: 16 августа 2006, 13:01


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.02 сек.