![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как закрасить MainMenu? [D5, Win95/98, WinME, WinXP]
TankMan © (2004-03-09 21:52:00)Думал думал, не дадумался :(...Проблема вобщем такова, весь у меня интерфейс исполнен, в определенной цветовой гамме, а вот Mainmenu, серого цвета я себе позволить не могу - оно как бельмо на глазу... дайте примерчик, как закрасить сам mainmenu и его раскрывающийся список...
(2004-03-14 05:05:00) [1]Удалено модератором
TankMan (2004-03-12 22:47:00) [2]Ну давайте мне ... TankMan@newmail.ru
... эх... закрасил я этот несчастный MainMenu...вобщем сделал, так - на обрисовке компонента потомка TMenuItem, узнаю размер окна, которому принадлежит мой потомок TMainMenu, и крашу как хочу, но проблема в том, что он дает размеры окна полностью, вместе с заголовком, а как узнать какой высоты заголовок, если он не стандартный? т.е. я переделал TMainMenu и TMenuItem, - сделал THMenu и ThMenuItem соответсвенно.... - программно создаю сам THMenu и далее к THMenu присоединяю THMenuItem и также , присоединяю другие THMenuItem к другим THMenuitem, т.е. делаю йерархию этих менюшек - все нормально, они закрашиваются и изменяют цвет как нужно вобщем все ОК, но вот сделать самостоятельный комопнент, который можно вывести на панель инструментов не получается :((... т.е. если я даже вывожу на панельку THMenu, то мне всеравно приходится добовлять MenuItem в процессе старта программы :( а как переделать в нормальный компонент не знаю :(... может кто-нибудь посмотреть мои наброски?.. впринципе там ничего такого-то и нет, понимающему человеку хватит 5 минут чтобы разобраться...
Заранее благодарен...
X9 (2004-03-12 06:36:00) [3]CLX - библиотека для создания мультиплатформенных приложений. Я как-то заглянул туда - для интереса. Но я же говорю, что могу выслать QMenus.pas - аналог Menus.pas, только для CLX. Если кто-нибудь хочет посмотреть, то давайте мыло - вышлю.
Игорь Шевченко (2004-03-11 12:31:00) [4]
> А кто нибудь знает, как можно поменять цвет меню не только
> на белый, серый, чёрный, а как TColor.
Переведи вопрос для не имеющих D7 и не делающих CLX-проектов
X9 (2004-03-11 11:58:00) [5]А кто нибудь знает, как можно поменять цвет меню не только на белый, серый, чёрный, а как TColor. Например, когда в Delphi7 делаешь CLX-проект, то там у TMainMenu есть даже свойство Color типа TColor. Ведь как-то же всё-таки реализованно! Я порылся в QMenus.pas, нон так и не догнал, как это делается. Кому не в лом - посмотрите, а если нет исходников - могу выслать, в архиве немного весят - около 15Кб.
Игорь Шевченко (2004-03-11 00:56:00) [6]MetalFan © (10.03.04 13:42)
Спасибо :) Пора отвыкать от NT4
Игорь Шевченко (2004-03-11 00:55:00) [7]TankMan © (10.03.04 23:56)
см. MetalFan © (10.03.04 13:42) [10]
Для Windows больше чем 98 и NT4
procedure TfMain.Button1Click(Sender: TObject);
var
Info : TMENUINFO;
begin
FillChar(Info, SizeOf(Info), 0);
Info.cbSize := SizeOf(Info);
Info.fMask := MIM_APPLYTOSUBMENUS or MIM_BACKGROUND;
Info.hbrBack := GetStockObject(WHITE_BRUSH);
SetMenuInfo(MainMenu.Handle, Info);
DrawMenuBar(Handle);
end;
Игорь Шевченко (2004-03-11 00:03:00) [8]TankMan © (10.03.04 23:56)
> А в чем собственно проблема с сообщениями посылающимися
> не клиентской оболасти окна?
В том, что их не одно и они не настолько подробно документированы, как WM_PAINT.
TankMan (2004-03-10 23:56:00) [9]А в чем собственно проблема с сообщениями посылающимися не клиентской оболасти окна? Разве не тоже самое что и обработка обычного WM_Paint?
Игорь Шевченко (2004-03-10 23:01:00) [10]TankMan © (10.03.04 22:33)
Хороший совет: поискать уже готовый компонент/набор компонент, который красит полосу меню (да и само меню тоже) в нужный цвет.
Второй хороший совет: имитировать MainMenu, например Toolbar'ом, как в среде Delphi, Toolbar покрасить гораздо легче.
Даже если сказать чуть-чуть поподробнее про сообщения, посылающиеся неклиентской области окна, это займет очень много времени и места.
TankMan (2004-03-10 22:33:00) [11]Мдяя... а чуть-чуть по подробнее про WM_NCxxxxxx можно ?
MetalFan (2004-03-10 13:42:00) [12]SetMenuInfo
The SetMenuInfo function sets information for a specified menu.
BOOL SetMenuInfo(
HMENU hmenu, // handle to menu
LPCMENUINFO lpcmi // menu information
);
где:
typedef struct tagMENUINFO {
DWORD cbSize;
DWORD fMask;
DWORD dwStyle;
UINT cyMax;
HBRUSH hbrBack;
DWORD dwContextHelpID;
ULONG_PTR dwMenuData;
} MENUINFO, FAR *LPMENUINFO;
typedef MENUINFO CONST FAR *LPCMENUINFO;
где
hbrBack
Brush to use for the menu's background.
Может поможет?
nexxiss (2004-03-10 12:21:00) [13]to> Игорь Шевченко:
полностью согласен, что с помощью WM_NCxxxxxx плюс перекрываем метод перерисовки компонента. Только так.
Еще можно свой компонент состряпать, что достаточно утомительно.
Игорь Шевченко (2004-03-10 12:20:00) [14]Плохиш (10.03.04 10:47)
Или Toolbar ;)
Плохиш (2004-03-10 10:47:00) [15]>Игорь Шевченко © (10.03.04 10:38) [6]
:-)
Если сказано все меню, то сюда полоса менютоже входит. :-|
Берётся панелька и суются в неё всякие кнопочки и др. визуальные компонентики ;-)
Игорь Шевченко (2004-03-10 10:38:00) [16]Плохиш (10.03.04 10:35)
> так делайте все меню ручками
В этом случае даже ножками не поможет - полоса меню это такая же часть окна, как заголовок, и рисоваться должна аналогичными средствами, через WM_NCxxxxxxx
Плохиш (2004-03-10 10:35:00) [17]>TankMan © (09.03.04 21:52)
Извращаетесь, так делайте все меню ручками
Игорь Шевченко (2004-03-10 10:32:00) [18]
> а вот Mainmenu, серого цвета я себе позволить не могу
Придется позволить.
Выпадающее меню ты можешь раскрасить стандартным способом, через OwnerDraw, а саму полосу не сможешь, попробуй найти готовое меню, если повезет.
RDen (2004-03-10 07:37:00) [19]В Кладовке есть чё-то вроде ItemDraw
TankMan (2004-03-10 05:48:00) [20]Краткость- сестра таланта, но всетаки?