На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела FAQ в группе разделов С++.
1. Раздел FAQ предназначен для публикации готовых статей.
2. Здесь нельзя задавать вопросы, для этого существуют соответствующие разделы:
Чистый С++
Visual C++ / MFC / WTL / WinApi
Borland C++ Builder
COM / DCOM / ActiveX / ATL
Сопутствующие вопросы
3. Внимание, все темы и сообщения в разделе премодерируются. Любое сообщение или тема будут видны остальным участникам только после одобрения модератора.
Модераторы: B.V., Qraizer
  
> Меню и кнопки - как в Билдере , Заготовка в ФАК
    Вопрос - как сделать кнопочное меню и группы кнопок и избавиться от пустой полосы за меню на форме периодически возникает на форуме. Предлагаю свой вариант решения этой проблемы.

    Для создания такого меню прежде всего на форму необходимо положить 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...И только теперь начнем действительно писать код.
    В хидере надо добавить следующую строку
    ExpandedWrap disabled
      class TForm1 : public TForm {
      __published :
              // объявим обработчик события для хинтов
              void __fastcall DisplayHint(TObject *Sender);
      };

    а в СРР
    ExpandedWrap disabled
      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)
      Теперь можно повозюкать кнопочные панельки и полюбоваться на хинты:
      Прикреплённая картинка
      Прикреплённая картинка
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0198 ]   [ 15 queries used ]   [ Generated: 1.05.24, 20:41 GMT ]