- •Работа с кнопками
- •Компонент Edit
- •2. Событие KeyPress возникает при нажатии алфавитно-
- •Текст (компоненты tLabel и tStaticText)
- •Компонент ListBox
- •Компонент ComboBox
- •Компонент CheckBox
- •Компонент RadioGroup
- •Класс tStringList
- •Компонент ImageList
- •Invalidate(); //Перерисовываем.
- •Создание главного меню
- •Работаем с контекстным меню (tPopupMenu)
- •Значок на панели задач (компонент tTrayIcon)
- •Работаем со сплиттером
- •Компонент Panel
- •Совместное использование сплиттера и Panel
- •Компонент HotKey
- •Компонент StatusBar
- •Назначение формы главной
- •Рисование на форме
- •Компонент ActionList
- •Работаем с двумя формами
- •Используем api-функции
- •Окна сообщений
- •Работаем с сетью. Клиент (класс tClientSocket)
- •Работаем с сетью. Сервер (класс tServerSocket)
- •Пересчитываем компоненты на форме
- •Форма - добавление методов
- •Форма - добавление полей
- •Форма - добавление свойств
Создание главного меню
Компонент MainMenu расположен на вкладке Standard Палитры компонентов:
Перенесите компонент на форму. Где он будет располагаться - неважно, при запуске программы наше меню все равно будет там, где ему и положено быть - вверху формы.
Для добавления пунктов в меню сделайте двойной щелчок на компоненте. Откроется форма, в которой вы сможете создать пункты визуальным образом. Для этого надо просто напечатать заголовок в пустом прямоугольнике. Заголовок - это свойство Caption для нашего пункта меню (это видно в окне Инспектора объектов). Если щелкнуть мышкой на прямоугольнике с пунктом меню, то появятся два новых пустых прямоугольника - снизу и справа:
В эти прямоугольники можно напечатать очередные пункты нашего меню.
Часто у подпунктов меню есть свои подпункты. Для создания такого подпункта щелкните правой кнопкой мыши на нужном пункте меню и в контектном меню выберите Create Submenu:
При необходимости у созданных подменю можно создавать собственные подменю и т. д. Но особенно этим увлекаться не следует - слишком большая вложенность обычно не нужна.
Для создания заготовки обработчика для пункта меню достаточно на нем сделать двойной щелчок мышкой.
У меню может быть картинка (за это отвечает свойство Bitmap), оно может быть активным и неактивным (свойство Enabled). Правильнее картинки задавать не отдельно для каждого пункта меню, а с помощью компонента ImageList, представляющего из себя набор картинок. В этом случае в свойство Images для всего меню записываем имя компонента ImageList (по умолчанию это будет ImageList1), и затем для каждого пункта меню задаем свойство ImageIndex, которое и будет задавать номер картинки из ImageList. А еще удобнее делать все это через компонент ActionList.
Несколько пунктов меню могут объединяться в группу. Для такого объединения вы должны, во-первых, задать для всех этих пунктов меню одинаковое значение свойства GroupIndex. Во-вторых, необходимо установить у каждого из них свойство RadioItem в true. И, наконец, надо написать код, который будет устанавливать отметку рядом с выбранным пунктом меню( за это отвечает свойство Checked). Код может быть таким:
void __fastcall TForm1::Subitem1Click(TObject *Sender)
{
Subitem1->Checked=true;
<Действия при выборе первого пункта меню>
...
}
...
void __fastcall TForm1::Subitem2Click(TObject *Sender)
{
Subitem2->Checked=true;
<Действия при выборе второго пункта меню>
...
}
Обратите внимание, что если некоторому пункту меню установить свойство Checked в true, то у остальных пунктов из этой же группы оно автоматически установится вfalse. Теперь при выборе пункта меню из группы рядом с ним появится точка:
Работаем с контекстным меню (tPopupMenu)
Компонент PopupMenu расположен на вкладке Standard Палитры компонентов:
Перенесите его на форму. Добавление пунктов для него происходит точно так же, как и для главного меню. Добавление обработчиков тоже делается точно так же.
Для того, чтобы приписать контекстное меню к какому-нибудь компоненту на форме, мы должны задать у последнего свойство PopupMenu:
После чего при щелчке правой кнопкой мыши на компоненте контекстное меню и появится.
При необходимости контекстное меню можно вызывать и другим способом. Например, нам надо, чтобы оно появлялось не всегда, а только при выполнении некоторого условия (скажем, если мы щелкнули на определенном месте формы). В этом случае нам надо для показа меню вызвать его метод Popup. У этого метода два параметра - X и Y того места, где контекстное меню должно появится. Вот пример использования этого метода:
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if ( X < 30)
{
TPoint point = ClientToScreen(Point(X, Y)); //Преобразуем кооринаты
PopupMenu1->Popup(point.x, point.y); //Показываем меню
}
}
В приведенном примере контекстное меню появится только если мы щелкнули на форме на расстоянии не больше чем 30 пикселов от левого края. Еще раз обратите внимание, что параметры X и Y у метода Popup контекстного меню - это координаты относительно всего экрана. В метод же FormMouseDown передаются координаты щелчка мыши относительно формы. Для преобразования одних координат в другие используем метод ClientToScreen.