|
Вопрос # 106/ вопрос открыт / |
|
Можно ли изменить цвет MainMenu(Menus) с стандартного (серого) например на белый? В Object Inspector нет такой возможности. Подскажите пожалуйста, очень нужно. Спасибо.
 |
Вопрос задал: Глушко Дмитрий Иванович (статус: Посетитель)
Вопрос отправлен: 16 августа 2006, 10:54
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, Глушко Дмитрий Иванович!
Вам нужно самому отрисовывать пункты меню.
См. хороший пример в прикреплённом файле.
Либо используйте сторонние компоненты (их полно), см. на torry.net; К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
Ответ #2. Отвечает эксперт: MFred
Здравствуйте, Глушко Дмитрий Иванович!
Вот в приложении пример который позволяет изменить цвет и не только.
Приложение: Переключить в обычный режим- procedure TForm1.FormCreate(Sender: TObject);
- var i, j:Integer;
- Menu: TMenu;
- begin
- for i := 0 to ComponentCount-1 do
- begin
- if (Components[i] is TMenu) then
- begin
- Menu := TMenu(Components[i]);
- for j := 0 to Menu.Items.Count-1 do
- SetDrawEvent(Menu.Items[j]);
- end;
- end;
- end;
-
-
- procedure TForm1.SetDrawEvent(MenuItem: TMenuItem);
- var i : integer;
- begin
- MenuItem.OnAdvancedDrawItem := DrawMenuItem;
- for i := 0 to MenuItem.Count-1 do
- SetDrawEvent(MenuItem.Items[i]);
- end;
-
-
-
- procedure TForm1.DrawMenuItem(Sender: TObject; ACanvas: TCanvas;
- ARect: TRect; State: TOwnerDrawState);
- var rtText, rtIcon: TRect;
- clBackground,clSelectedBk, clFont: TColor;
- clDisabledFont, clSeparator, clSelectedBorder: TColor;
- t: integer;
- miParent: TMenuItem;
- Menu: TMenu;
- il:TCustomImageList;
- begin
- miParent := TMenuItem(Sender);
- Menu := miParent.Parent.GetParentMenu;
- // Çàäàåì
öâåòà
- clBackground:= $00EFFFFF;
- clSelectedBk:=$00EAC8B7;
- clSelectedBorder:=$00C66931;
- clFont := clRed;
- clDisabledFont := clRed;
- clSeparator := $00D1D1D1;
-
- rtIcon:=aRect;
- rtIcon.Right:=rtIcon.Left+20;
- rtText:=aRect;
- rtText.Left:=rtIcon.Left+20;
- if ((miParent.Parent.GetParentMenu.Images <> nil) or
- (miParent.Parent.SubMenuImages <> nil)) and
- (miParent.ImageIndex <> -1) then
- if (miParent.Parent.SubMenuImages <> nil)
- then il:=miParent.Parent.SubMenuImages
- else il:=miParent.Parent.GetParentMenu.Images;
- aCanvas.Brush.Color := clBackground;
- aCanvas.FillRect(rtText);
- if (Menu is TMainMenu) then
- for i := 0 to miParent.GetParentMenu.Items.Count-1 do
- if (miParent.GetParentMenu.Items[i] = miParent) then
- begin
- aCanvas.Brush.Color := clBtnFace;
- aCanvas.FillRect(aRect);
- rtIcon.Right:=rtIcon.Left;
- if (miParent.ImageIndex = -1) and
- (miParent.Bitmap.Width = 0) then
- begin
- rtText := aRect;
- Break;
- end;
- end;
- if miParent.Enabled
- then aCanvas.Font.Color := clFont
- else aCanvas.Font.Color := clDisabledFont;
- if (odSelected in State) or (odHotLight in State) then
- begin
- aCanvas.Brush.Style := bsSolid;
- aCanvas.Brush.Color := clSelectedBk;
- aCanvas.Pen.Color := clSelectedBorder;
- aCanvas.Rectangle(ARect);
- end
- else
- begin
- aCanvas.Brush.Color := clBtnFace;
- aCanvas.FillRect(rtIcon);
- end;
- if not miParent.IsLine then
- begin
- SetBkMode(aCanvas.Handle,TRANSPARENT);
- if miParent.Default then
- begin
- aCanvas.Font.Color := clGray;
- aCanvas.TextOut(rtText.Left+1, rtText.Top+1, PChar(' '+
- miParent.Caption));
- end;
- if miParent.Enabled then
- aCanvas.Font.Color := clFont;
- aCanvas.TextOut(rtText.Left+2, rtText.Top+2, PChar(' ' + miParent.Caption));
- aCanvas.TextOut(rtText.Right-2, aCanvas.TextWidth(ShortCutToText(miParent.ShortCut)+' ')+
- rtText.Top+2, PChar(ShortCutToText(miParent.ShortCut) + ' '));
- end;
- if (miParent.ImageIndex>=0)
- then
- else
- begin
- aCanvas.Pen.Color := clSeparator;
- aCanvas.MoveTo(ARect.Left + 10, rtText.Top +
- Round((rtText.Bottom - rtText.Top) /2));
- aCanvas.LineTo(ARect.Right - 2, rtText.Top +
- Round((rtText.Bottom - rtText.Top) /2))
- end;
-
- end;
-
-
 |
Ответ отправил: MFred (статус: 1-ый класс)
Время отправки: 16 августа 2006, 13:01
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|