меню контекстное меню delphi

Меню контекстное меню delphi

Контекстное меню (PopupMenu), вызываемое в приложении Windows по щелчку правой кнопкой мыши, является стандартной и удобной возможностью многих программ. Delphi компонент PopupMenu предназначен для создания таких контекстных меню. Контекстное меню из-за способа своего появления называют ещё всплывающим меню.

Delphi компонент PopupMenu почти не отличается от компонента MainMenu и также является невизуальным. Но в отличие от Главного меню, которое одно на Форме, всплывающие меню могут быть у каждого объекта, размещённого на Форме. Поэтому нужно разместить на Форме и запрограммировать столько компонентов PopupMenu, сколько контекстных меню предполагается использовать в программе. Кроме того, контекстное меню не имеет нескольких пунктов верхнего уровня, так как все его пункты располагаются в одном вертикальном столбце.

После того как компонент PopupMenu размещён на Форме, структура меню формируется совершенно аналогично созданию Главного Меню (компонент MainMenu). Далее, для того, чтобы контекстное меню определённого объекта (например, компонента StringGrid) вызывалось в программе, необходимо свойству PopupMenu этого объекта присвоить имя соответствующего Delphi компонента PopupMenu:

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi
В момент появления контекстного меню происходит событие onPopup компонента PopupMenu. В этот момент можно, исходя из анализа ситуации, внести необходимые изменения в его параметры.

Щёлкнув по объекту правой кнопкой мыши, мы получим появление его контекстного меню, обеспеченного компонентом PopupMenu1, в точке произведённого щелчка. Но можно добиться его появления в любом нужном нам месте Формы. Достигается это использованием метода Popup компонента PopupMenu, при этом свойство Popup у соответствующего компонента (в данном случае StringGrid) нужно очистить.

Для использования этого метода необходимо использовать событие щелчка правой кнопки мыши по объекту. И правильнее использовать именно отпускание кнопки, то есть событие onMouseUp нужного объекта. Метод Popup имеет параметры X и Y, соответствующие расстоянию точки щелчка по горизонтали и вертикали от верхнего левого угла экрана соответственно. То есть, можно добиться появления меню вообще за пределами Формы. Вот, попробуйте использовать такой код:

procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbRight then PopupMenu1.Popup(0, 0); //появление меню в точке (0, 0)
end;

Но и обработчик события onMouseUp тоже имеет параметры X и Y. Они соответствуют расстоянию точки щелчка по горизонтали и вертикали от верхнего левого угла уже Формы. Однако, если попытаться использовать их в методе Popup, то меню не появится в том месте, где вы ожидаете. Чтобы добиться нужного эффекта, необходимо учитывать также положение самой Формы, а также того объекта, в пределах которого должно появляться меню. Но и это не всё. Необходимо к значению X добавить высоту заголовка Формы, которая неизвестна. Все эти слагаемые усложняют код.

Избавиться от большинства слагаемых поможет функция GetClientOrigin. Она вызывается без параметров и возвращает сдвиг клиентской области Формы относительно верхнего левого угла экрана в формате TPoint (точка, то есть запись с полями X и Y). Таким образом, остаётся учесть только положение нужного объекта. Следующий код обеспечивает появление меню именно в месте щелчка мышки по компоненту StringGrid1:

Источник

Меню в программах на Delphi

Меню является важнейшими элементами управления пользовательского интерфейса любого приложения. Кроме того, коснемся механизма действий, позволяющего синхронизировать совместную работу различных элементов управления.

Практически все Windows-приложения имеют меню, которое является распространенным элементом пользовательского интерфейса. Меню представляет собой список объединенных по функциональному признаку пунктов, каждый из которых обозначает команду или вложенное меню (подменю). Выбор пункта меню равносилен выполнению соответствующей команды или раскрытию подменю.

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi

Пункт меню или подменю представляет собой объект типа TMenuItem. Отдельный пункт меню (подменю) обычно виден как текстовый заголовок, описывающий назначение пункта меню. Пункт меню может быть выделен (маркирован) для указания включенного состояния. Класс TMenuItem служит для представления пунктов главного и контекстных меню.

Cвойства пункта меню:

Bitmap типа TBitmap (значок, размещаемый слева от заголовка пункта меню). По умолчанию свойство имеет значение Nil, и значок отсутствует;

Break типа TmenuBreak (признак разделения меню на столбцы). Свойство Break может принимать одно из трех значений:

Caption типа String (строка текста, отображаемая как заголовок пункта меню). Если в качестве заголовка указать символ «-», то на месте соответствующего пункта меню отображается разделительная линия. При этом, несмотря на отображение линии, свойство Caption попрежнему имеет значение «-»;

Checked типа Boolean (признак того, помечен пункт или нет). Если свойство установлено в значение True, то пункт помечен, и в его заголовке появляется специальная отметка. По умолчанию свойство Checked имеет значение False, и пункт меню не имеет отметки;

AutoCheck типа Boolean (признак автоматического изменения значения свойства Checked на противоположное при выборе пользователем пункта меню);

Count типа Integer (количество подпунктов в данном пункте меню). Это свойство есть у каждого пункта меню. Если какой-либо пункт не содержит подпунктов, то свойство Count имеет нулевое значение;

Enabled типа Boolean (признак активности пункта, т. е. будет ли он реагировать на события от клавиатуры и мыши). Если свойство Enabled установить в значение False, то пункт меню будет неактивным, и его заголовок становится бледным. По умолчанию свойство Enabled имеет значение True, и пункт меню активен;

Items типа TMenuItems (массив подпунктов текущего пункта меню). У каждого пункта меню, имеющего вложенное меню (подменю), пункты этого подменю перечислены в свойстве Items. Это свойство позволяет получить доступ к пунктам подменю по их позициям в массиве: items [0], items [1] и т. д.;

RadioItem типа Boolean (вид отметки, появляющейся в заголовке пункта). Если свойство установлено в значение False (по умолчанию), то в качестве отметки используется значок «галочка», в противном случае пункт отмечается жирной точкой;

Visible типа Boolean (признак видимости пункта на экране). Если свойство Visible установлено в значение False, то пункт меню на экране не отображается. По умолчанию свойство Visible имеет значение True, и пункт виден в меню.

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi

На скриншоте выше приведен пример меню Menul (подменю главного меню), разделенного на два столбца. У пункта Открыть этого меню свойство Break имеет значение mbBarBreak, у пункта Открыть как. свойство Break— значение mbBarBreak, для Закрыть как. свойству Break установлено значение mbNone.

Основным событием, связанным с пунктом меню, является событие OnClick, возникающее при выборе пункта с помощью клавиатуры или мыши. В приложении для генерации события OnClick или для имитации выбора пункта меню можно использовать метод Click. Вызов этой процедуры эквивалентен выбору соответствующего пункта меню пользователем.

Нажатие кнопки Button1 приводит к тому же эффекту, что и выбор пункта меню mnuLockltem.

Для создания меню (как подменю главного меню) или контекстного меню при разработке приложения используется Конструктор меню. Меню также можно создавать или изменять динамически — непосредственно в ходе выполнения приложения.

Источник

Delphi | Практическая №11

Стандартный интерфейс пользователя, или Приложение и меню — навсегда!

Корпорация Microsoft много лет трудилась над тем, чтобы человеку, работающему за компьютером, было максимально комфортно выполнять свои задачи. Чтобы у него не возникало трудностей в поиске настроек приложения, а часто выполняемые операции были доступны одним, максимум двумя щелчками мыши.

Набор и взаимосвязь определённых компонентов в приложении называется пользовательским интерфейсом. Чем удобней работать с приложением, тем, говорят, удобней его интерфейс.

Той же корпорацией Microsoft был разработан стандартный интерфейс Windows. Для этого были введены специальные компоненты, использования которых Microsoft настоятельно рекомендует придерживаться. Тем более, единый интерфейс для всех программ — это очень удобно с точки зрения пользователя.

Задачи урока

Выполнение упражнения

В этом упражнении вы создадите стандартный интерфейс пользователя для уже написанного вами приложения в уроке № 4 — Текстовый редактор (рисунок 1). Он будет состоять из главного меню приложения и контекстного меню для многострочного редактора.

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi
Рисунок 1. Окно приложения

1. Что же придумал Microsoft?

Сначала кратко рассмотрим элементы Windows, предназначенные для создания единого, стандартного интерфейса приложения (рисунок 2) на примере обычного проводника.

а) меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphiб) меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi
Рисунок 2

За всплывающую подсказку в Delphi отвечает свойство компонентов — Hint типа String. Подсказка показывается в том случае, если значение логического свойства ShowHint=True.

Отметим, что главное меню, контекстное меню и панель инструментов кроме текста могут отображать и иконки, соответствующие выполняемой операции (рисунок 2б). Все иконки удобно хранить в специальном контейнере — ImageList меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi(вкладка Win32).

Ниже мы рассмотрим работу каждого элемента интерфейса более подробно (кроме панели статуса).

2. Дизайн приложения

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi
Рисунок 3

Имя, которое было

Имя, на которое

необходимо изменитьFontDialog1FontDialogOpenDialog1OpenDialogMainMenu1MainMenuPopupMenu1

Обратите внимание, что у многих интерфейсных компонентов мы просто убрали порядковый номер, т. к. они находятся на форме в единственном экземпляре и выполняют свои «штатные» функции. Исключением является только компонент PopupMenu, у которого в названии есть добавка Memo. Она говорит о том, что контекстное меню будет привязано к компоненту Memo.

3. Создание главного и контекстного меню

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi
Рисунок 4

Как правило, главное меню состоит из нескольких категорий, таких как «Файл», «Вид», «Опции», «Помощь» и т. д. (например, посмотрите на главное меню приложения Microsoft Word). Нам необходимы всего две категории: «Файл» с пунктами «Новый», «Открыть», «Выход» и «Опции» с пунктами «Шрифт» и «Жирный».

а) меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphiб) меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphiв) меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi
Рисунок 5

В итоге в верхней части формы появится меню (рисунок 6а). Вы сможете выбирать пункты этого меню (рисунок 6б). Правда, пока они ничего не будут делать. Пункты меню — это аналог кнопок Button, только в более компактном виде.

а) меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphiб) меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi

Для раздела меню «Жирный» поставьте свойство AutoCheck = True (рисунок 7). Это означает, что данный раздел будет работать как компонент CheckBox.Рисунок 6

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi
Рисунок 7

Предупреждение! Для того чтобы изменить свойства пункта в меню или назначить ему событие, необходимо выбрать его в окне редактора главного меню. Например, как показано на рисунке 5б для пункта «Выход». Но событие OnClick можно создать и непосредственно из конструктора формы, просто щёлкнув по необходимому пункту меню.

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi
Рисунок 8

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi
Рисунок 9

необходимо изменитьНовыйnNewОткрыть файлnOpenВыходnExitШрифтnFontЖирныйnBold

4. Перенос программного кода

Теперь интерфейс главного и контекстного меню работает, но, к сожалению, ничего не делает. Надо ведь обработчики событий писать! Одно только радует, что весь программный код, написанный ранее для упражнения «Текстовый редактор», практически остаётся прежним, так как мы меняем преимущественно интерфейс.

5. Коротко о главном

Стандартный интерфейс пользователя, или Инструменты на панели

Задачи урока

Выполнение упражнения

В этом упражнении мы продолжим написание интерфейса пользователя для текстового редактора. Добавим в приложение инструментальную панель, каждое действие обозначим пиктограммой и научимся использовать всплывающие подсказки (рисунок 1).

1. Работа с панелью инструментов

Поместите на форму компоненты ToolBar меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi (категория Win32) и ImageList меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi (категория Win32) согласно рисунку 2.

Обратите внимание, что компонент ToolBar (панель инструментов) сразу же отображается прижатым к верхней части окна (Align = alTop). Он пока пустой (т. е. без инструментальных кнопок).

3. Переименуйте помещенные на форму компоненты следующим образом: ImageList1ImageList, ToolBar1ToolBar.

4. Создайте инструментальные кнопки на панели инструментов. Для этого щёлкните на панели инструментов (ToolBar) правой кнопкой мыши. В результате откроется контекстное меню (рисунок 3а). В верхней части меню будут два важных пункта «New Button» («Новая кнопка») и «New Separator» («Новый разделитель»). Первый пункт добавляет функциональную кнопку на панель инструментов (аналог кнопки SpeedButton), как показано на рисунке 3а, а второй добавляет разделитель групп между кнопками.

Добавьте на панель пять кнопок и два разделителя согласно рисунку 3б. Кнопки и разделители можно перемещать по панели с помощью метода Drag and Drop (перетащи и оставь).

Первые пары кнопок будут дублировать пункты главного меню «Новый» и «Открыть файл», вторые — «Шрифт» и «Жирный», а последняя кнопка — «Выход».

5. Обратите внимание, что кнопки на рисунке 3б менее рельефные, чем получились у нас. При запуске приложения их вообще не будет видно (как в приложении MS Word), а когда вы наведёте на них мышью, они будут «приподниматься». Этот эффект сейчас «модный». Выделите панель инструментов (не кнопки!) и поменяйте значение свойства Flat (плоский) с False на True.

Но как же пользователь узнает, какая кнопка что делает… Можно, конечно, отобразить заголовок кнопки (для этого необходимо свойство ShowCaption для инструментальной панели поставить в True), но лучше поместить на неё маленькую картинку — пиктограмму (обычно размером 16х16 либо 32х32 пикселей), которая наглядно отображает функциональное действие кнопки. Иногда одновременно размещают и текст, и картинку.

Картинками мы займёмся в следующем разделе.

2. А картинки — лучше!

1. Чтобы «прилепить» к каждой инструментальной кнопке картинку, необходимо связать панель инструментов со специальным контейнером картинок — ImageList меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi. Для этого напротив свойства Images компонента Toolbar в раскрывающемся списке выберите пункт ImageList (рисунок 4).

После таких действий картинки на инструментальных кнопках не появятся, ведь в контейнере картинок (ImageList) пусто, но зато установится связь между этими компонентами.

2. Наполним контейнер картинок набором пиктограмм. Щёлкните два раза мышью на компоненте ImageList. В результате откроется окно редактора набора картинок (рисунок 5).

3. Нажмите кнопку «Add» («Добавить») для выбора картинок через диалог открытия файлов. Выберите файл Icons.bmp в каталоге «Обеспечение». В результате появится сообщение (рисунок 6). Нажмите на кнопку Yes.

Это сообщение гласит о том, что выбранный рисунок больше, чем размер 16х16 пикселей, и предлагает его разрезать на соответствующие блоки. Дело в том, что в компонент ImageList можно добавлять картинки по одиночке (в данном случае размером 16х16 пикселей), но можно и целым блоком, когда они состыкованы друг с другом. Для примера на рисунке 7 представлен блок картинок, который мы сейчас открыли.

4. После сообщения редактор набора картинок отобразит список добавленных пиктограмм (рисунок 8). Нажмите кнопку «ОК».

Сразу же после закрытия редактора на панель инструментов «высыпятся» пиктограммы (рисунок 9). Но их функциональное значение не совпадает с нашей задумкой (см. пункт 4).

5. Назначьте каждой кнопке свою пиктограмму согласно рисунку 10. Кнопка [Abc] будет вызывать диалог шрифта, а кнопка [B] — будет переключать жирность шрифта.

Чтобы назначить кнопке конкретную пиктограмму, необходимо её выбрать в свойстве ImageIndex у каждой инструментальной кнопки (рисунок 11).

6. У кнопки [B] свойство Style установите в tbsCheck (рисунок 12). Это означает, что эта кнопка будет работать как компонент CheckBox.

7. Назначьте пиктограммы пунктам главного и контекстного меню согласно рисунку 13. Не забудьте вначале связать оба меню с контейнером картинок.

8. Свяжите обработчики событий OnClick инструментальных кнопок меню с соответствующими обработчиками главного меню.

9. Запустите программу. Пощёлкайте по кнопкам инструментальных панелей и убедитесь в их работоспособности. Точнее, в работоспособности всех кнопок, кроме кнопки B. Она не работает! Ещё бы… В её обработчике событий onClick стоит проверка только на состояние (вкл/выкл) пункта главного меню «Жирный».

10. Дополните код события nBoldClick следующими строками (выделено жёлтым):

Это означает, что мы проверяем условие: если тип компонента (Sender) является (is) инструментальной кнопкой (TToolButton), то «нажимаем» раздел главного меню «Жирный», в противном случае — «нажимаем» кнопку [B]. Состояние инструментальной кнопки отслеживает свойство Down.

11. Дополните обработчик события ButtonFontClick (событие OnClick для элемента меню «Шрифт») следующей строкой (выделено жёлтым):

Здесь мы дополнительно меняем состояние кнопки [B], если произошли изменения жирности шрифта в диалоге «Шрифт».

12. Запустите программу. Теперь всё работает правильно!

3. Главное — вовремя «всплыть» подсказке!

Остался последний шаг в дизайне интерфейса — это всплывающие подсказки. Пример их использования показан на рисунке 14. Согласитесь, что такой способ подсказок к функциональным компонентам интерфейса очень удобен.

1. Выделите панель инструментов (ToolBar) и значение свойства ShowHint установите в True. Это означает, что разрешается использование всплывающих подсказок у инструментальных кнопок панели (по умолчанию у всех компонентов использование всплывающих подсказок запрещено).

2. Выделите первую кнопку инструментальной панелименю контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi. В свойстве Hint напишите «Новый».

3. Поочерёдно выделяя остальные инструментальные кнопки, записывайте соответствующий текст в свойство Hint. Этот текст должен кратко отражать назначение кнопки. Например: «Открыть файл», «Выбор шрифта», «Жирный», «Выход».

4. Запустите программу и наведите курсором на каждую из инструментальных кнопок. Убедитесь, что подсказки всплывают у каждой из кнопок.

Теперь ваши приложения станут намного привлекательнее!

Источник

PopupMenu — контекстное (всплывающее) меню в Дельфи

Контекстное (всплывающее) меню появляется при размещении указателя в форме или в области некоторого элемента управления и нажатии правой кнопки мыши. Обычно контекстное меню содержит команды, влияющие только на тот объект, для которого вызвано это меню, поэтому такое меню также называют локальным. На скриншоте показан примерный вид контекстного меню.

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi
Контекстное меню в Delphi представлено компонентом PopupMenu.

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi

PopupMenu можно конструировать так же с помощью Конструктора меню. Для этого нажимаем правой кнопкой миши на компоненте (см. скриншот):

меню контекстное меню delphi. Смотреть фото меню контекстное меню delphi. Смотреть картинку меню контекстное меню delphi. Картинка про меню контекстное меню delphi. Фото меню контекстное меню delphi

выбираем пункт меню — Menu Dessigner.

Свойства компонента PopupMenu

AutoPopup типа Boolean (определяет, появляется ли контекстное меню при щелчке правой кнопки мыши и размещении указателя на компоненте, использующем это меню). Если свойство AutoPopup имеет значение True (по умолчанию), то контекстное меню при щелчке мыши появляется автоматически. Если свойство AutoPopup имеет значение False, то меню не появляется. Однако в этом случае можно активизировать меню программно, используя метод Popup. Процедура Popup (X, Y: integer), где X и Y— координаты меню относительно левого верхнего угла экрана монитора, выводит на экран указанное контекстное меню, например: PopupMenu1.Popup(200, 200);

Alignment типа TPopupAlignment (определяет место появления контекстного меню по отношению к указателю мыши).

Свойство Alignment может принимать следующие значения:

Для того чтобы контекстное меню появлялось при щелчке на компоненте, необходимо его свойству PopupMenu присвоить в качестве значения имя требуемого контекстного меню.

Данная инструкция задает для формы Form1 контекстное меню PopupMenu1.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *