Форум: "Основная";
Текущий архив: 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.007 c