Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];

Вниз

Как изменить цвет компонента TMainMenu?   Найти похожие ветки 

 
KDenis   (2003-03-12 20:12) [0]

Вообще-то, нужно предать ему текстуру из файла, но достаточно будет и простого изменения цвета.


 
kDenis   (2003-03-12 21:49) [1]

Ну что, никто не знает, что-ли?


 
Tux   (2003-03-12 23:07) [2]

Все знают, но молчат, потому что забодались на этот вопрос отвечать.
1) OwnerDraw Menus - довольно геморно
2) CoolBar + Background Bitmap + ToolBar + PopUpMenu - имитация меню.


 
kDenis   (2003-03-12 23:34) [3]

И как использовать этот OwnerDraw Menus ?


 
kDenis   (2003-03-13 16:41) [4]

Меня кто-то слышит?
Знатоки великие!!!!!!!!!
Обясните, желательно с примерчиком.


 
kDenis   (2003-03-13 19:01) [5]


> Tux ©
> Все знают, но молчат, потому что забодались на этот вопрос
> отвечать.

Что-то я начинаю сомниватся, что все это знают...


 
jack128   (2003-03-13 19:57) [6]

>>И как использовать этот OwnerDraw Menus ?
Set OwnerDraw to True to indicate that the application will draw menu items in an OnDrawItem event handler. When OwnerDraw is True, menu items receive an OnMeasureItem and an OnDrawItem event when they need to be rendered on screen.

Далее по хелпу...

Сам не делал, но был разговор, что полностью изменить цвет меню можно только из настроек Видоус, но тогда измениться цвет во всех программах, я тя я думаю это не устроит..
а вот OwnerDraw позволяет перересовать только итемы меню, а не весь меню...


 
kDenis   (2003-03-13 20:02) [7]

А если использовать способ 2
> 2) CoolBar + Background Bitmap + ToolBar + PopUpMenu - имитация меню.
Тогда нужно будет изменить цвет PopUpMenu.


 
Дмитрий Баранов   (2003-03-13 20:06) [8]

Ну и в чем проблема? Canvas в OnDrawItem передается, рисуйте на нем сперва ваш битмап, такой же, что и фоновый у CoolBar, и выводите текст Canvas.TextOut-ом.


 
kDenis   (2003-03-13 20:11) [9]


> Дмитрий Баранов ©

Спасибо, счас попробую...


 
$$$$$$$$$$$$$$$   (2003-03-13 21:00) [10]

unit MYPopupMenu;

interface

uses
Windows, SysUtils, Classes, Graphics, Menus;

type
TMYPopupMenu = class(TPopupMenu)
private
FDrawing : Boolean;

FBackColor,
FBorderColor : TColor;

protected
procedure MYDrawItem(Sender : TObject; aCanvas : TCanvas; aRect : TRect; State : TOwnerDrawState);
public
coMYtructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure Popup(X, Y : Integer); override;
published
property BackColor : TColor read FBackColor write FBackColor default clMenu;
property BorderColor : TColor read FBorderColor write FBorderColor default clBtMYhadow;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents("Plus", [TMYPopupMenu]);
end;


{------------------------------------------------------------------------------}
procedure TMYPopupMenu.MYDrawItem(Sender: TObject; aCanvas: TCanvas;
aRect: TRect; State: TOwnerDrawState);
coMYt
Alignments: array[TPopupAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
EdgeStyle: array[Boolean] of Longint = (BDR_RAISEDINNER, BDR_SUNKENOUTER);
var
hWndx,
hDCx :HWND;

wRect : TRect;
wCanvas : TCanvas;
begin

if FDrawing then
begin
FDrawing := False;

hDCx := ACanvas.Handle;
hWndx := WindowFromDC(hDcx);

wCanvas := TCanvas.Create;

with wCanvas do
begin
Handle := GetWindowDC(GetDesktopWindow);

GetWindowRect(hWndx, wRect);

Brush.Style := bsSolid;
Brush.Color := FBackColor;

Pen.Style := psSolid;
Pen.Width := 2;
Pen.Color := FBorderColor;

Inc(wRect.Left);
Inc(wRect.Top);

Rectangle(wRect);

{тут можно вместо заливки нарисовать битмап}

ReleaseDC(GetDesktopWindow, Handle);
end;

wCanvas.Free;
end;

{а тут рисуй сам попап-итем}
end;


{------------------------------------------------------------------------------}
procedure TMYPopupMenu.Popup(X, Y: Integer);
var
i : Integer;
begin
for i := 0 to Items.Count-1 do
Items[i].OnAdvancedDrawItem := MYDrawItem;

FDrawing := True;

inherited Popup(X, Y);
end;


{------------------------------------------------------------------------------}
coMYtructor TMYPopupMenu.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

inherited OwnerDraw := True;
end;

{------------------------------------------------------------------------------}
destructor TMYPopupMenu.Destroy;
begin
inherited Destroy;
end;


end.


 
kDenis   (2003-03-13 21:26) [11]


> $$$$$$$$$$$$$$$

Ничего себе!!!

В этом коде есть синтаксические ошибки. В некоторых местах вместо букв ns написано MY

Это работает, но неправельно...
Текст вообще не выводит, на изменение свойства Bimap не реагирует.


 
kDenis   (2003-03-13 21:27) [12]


> Дмитрий Баранов ©

Ох уж этот CoolBar...


 
jack128   (2003-03-13 21:39) [13]

я вот попробывал этот код у мя менюшки в IE глючить начали..

kDenis © (13.03.03 21:26)
Текст ты сам рисовать должен..




Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.015 c
14-88241
Snake2000
2003-03-08 03:54
2003.03.27
Поздравляю с 8 марта милых девушек !!!


3-87841
bytebutcher
2003-03-06 18:37
2003.03.27
BatchMove но с ProgressBarом


7-88281
Калашников Игорь
2003-02-02 04:44
2003.03.27
Hint ы, собаки блин


1-88066
NKiril
2003-03-15 01:20
2003.03.27
Как програмно (OLE) выделить в Word-е жирным нужные символы?


1-87990
Inan61
2003-03-12 22:03
2003.03.27
ComboBox и MaxLength





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский