Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.166.98] |
|
Сообщ.
#1
,
|
|
|
Вопрос - как сделать кнопочное меню и группы кнопок и избавиться от пустой полосы за меню на форме периодически возникает на форуме. Предлагаю свой вариант решения этой проблемы.
Для создания такого меню прежде всего на форму необходимо положить TMainMenu и создать его структуру. В приаттаченном проекте меню состоит из трех разделов - Файл (MFile), Редактор (MEdit) и Справки (MMessages). Для раздела Файл созданы пункты Новый, Открыть, Сохранить и Выход, для раздела Редактор - Вырезать, Копировать, для раздела Справки - Помощь и О программе. Если не лень, для каждого из разделов и пунктов меню можно написать соответствующие хинты. Создайте для каждого из пунктов меню обработчики событий OnClick - для этого в ИО на страничке Events достаточно дважды кликнуть левой мышкой по соответствующей строчке. Билдер сам создаст тело пустого обработчика. Добавьте в обработчики либо просто символ комментария (//), либо впишите в них что-то типа ShowMessage("Msg about"); Теперь положите на форму компонент TControlBar (палитра Additional) и установите в Инспекторе Объектов (ИО) следующие свойства: Align = alTop, AutoSize = true, BevelEdges->beBottom = true (остальные - false), BevelOuter = bvRaised. Затем с палитры Win32 возьмите TToolBar и положите его на TControlBar. Для этого тулбара в ИО надо установить следующие свойства: Align = alTop, AutoSize = true, Flat = true, ShowCaptions = true. Все EdgeBorders сбросьте в false. Добавьте на тулбар тремя кликами правой мышки 3 кнопки - BFile, BEdit, BMessages. Для кнопки BFile установите в ИО MenuItem = MFile, для BEdit - MenuItem = MEdit, для BMessages - MenuItem = MMessages. Для всех трех кнопок свойство Grouped необходимо установить в true. А теперь для главной формы в ИО сотрите имя меню в свойстве Menu. (Или в FormCreate добавьте строку this->Menu = NULL). Ни в коем случае не удаляйте компонент TMainMenu (прецеденты уже были). Запустите проект на выполнение... Пришло время добавить панельки с группами кнопок. Положите на TControlBar ещё 3 тулбара. Для этих трех новых тулбаров установите в ИО: Align = alTop, AutoSize = true, Flat = true. Все EdgeBorders сбросьте в false. Чтобы всё было красиво и для глаз приятно, для всех четырех тулбаров установите в ИО: Constraints->MinHeight = 22, Constraints->MaxHeight = 22. Добавьте на тулбары три, две и две кнопки. Эти кнопки - аналоги соответствующих пунктов разделов меню, за исключением пункта Файл-Выход. Этой кнопки в данном примере нет. Для того, чтобы и на кнопках, и в пунктах меню появились картинки-пиктограммки, надо взять с палитры Win32 TImageList и добавить в него соответствующие рисунки. В примере я добавил рисунки из штатного набора Билдера. Для меню и второго-третьего-четвертого тулбаров установите свойство Images = ImageList1 (если Вы не переименовали его). А теперь для каждого пункта меню и каждой кнопки в свойстве ImageIndex укажите картинку, соответствующую выбранному пункту (кнопке). Для каждой кнопки в ИО на страничке Events укажите в строке OnClick из появившегося списка соответствующий обработчик, уже созданный для пункта меню. Хинты для кнопок можно скопировать из хинтов для пунктов меню, а можно добавить в FormCreate - BHelp->Hint = MHelp->Hint и так далее. Запустите проект на выполнение... Всё ОК - но где же хинты? Только не пытайтесь менять свойства ShowHint, поступим по другому. Положите на форму TStatusBar (палитра Win32), создайте в нем хотя бы два раздела (правый клик мышкой и вызов Редактора панелей). Ширину первой (нулевой) панельки установите пикселов в 300-350...И только теперь начнем действительно писать код. В хидере надо добавить следующую строку class TForm1 : public TForm { __published : // объявим обработчик события для хинтов void __fastcall DisplayHint(TObject *Sender); }; а в СРР void __fastcall TForm1::DisplayHint(TObject *Sender) { StatusBar1->Panels->Items[0]->Text = GetLongHint(Application->Hint); } //------------------------------------------------------------ void __fastcall TForm1::FormCreate(TObject *Sender) { Application->OnHint = DisplayHint; } Запустите проект на выполнение... Удачи ЗЫ - я не претендую на истину в последней инстанции и с благодарностью приму как пинки и шишки от грандов, так и доброе тихое слово от тех, кто только делает первые шаги в нашем благородном деле. Прикреплённый файлCoolMenu.rar (7.11 Кбайт, скачиваний: 213) |
Сообщ.
#2
,
|
|
|