Меню в делфи как сделать

Добавил пользователь Алексей Ф.
Обновлено: 05.10.2024

Автор: MAD Rodrguez

Вы, наверное, задавались вопросом, почему системное меню постоянно одно и тоже ? Пример показывает, как добавить туда такие пункты как "About" или "Information", или что-нибудь ещё.

Пишем свой текст в Меню

Когда играешь во встроенную в Windows игру freecell, то справа в меню постоянно пишется сколько осталось карт. Давайте посмотрим, как это делается.

Перво наперво положим компонент главного меню на форму.

Теперь установим свойство OwnerDraw в true.

Далее создайте, то что Вы хотите вырисовывать в меню и создайте OnDrawItem.

Как узнать о нажатии non-menu клавиши в момент когда меню показано?

Как сделать пункты меню с картинками?

Следующий код показывает, как добавить картинку в виде объекта TImage в объект TMenuItem.

Как сделать меню как в Дельфи?

1. Разместите на форме TControlBar. (закладка Additional) Установите Align = Client.

2. Разместите TToolBar (закладка Win32) внутри TControlBar.

3. Установите в True свойства Flat и ShowCaptions этого TToolBar.

Как поместить маленькие битмапы в TPopUpMenu?

Следующий пример демонстрирует добавление битмапа в пункт PopUpMenu при помощи API функции SetMenuItemBitmaps(). Эта функция имеет следующие параметры: дескриптор всплывающего меню, номер (начиная с нуля) пункта меню в который мы хотим добаить битмап, и два дескриптора битмапов (одна картинка для меню в активном состоянии, а вторая для неактивного состояния).

Как поместить TMenuItem справа у формы?

Допустим, у Вас есть TMainMenu MainMenu1 и HelpMenuItem в конце панели меню (Menubar). Если Вызвать следующий обработчик события OnCreate, то HelpMenuItem сместится вправо.

Более быстрый способ добавлять пункты меню

Обычно, когда Вы создаёте меню в приложении, то код выглядит примерно так:

Как рисовать картинки в пунктах меню?

Eugeny Sverchkov показывает как это можно сделать

Как программно заставить выпасть меню?

В примере показано как показать меню и выбрать в нем какой-то пункт, эмулируя нажатие "быстрой кдавиши" пункта меню. Если у Вашего пункта меню нет "быстрой клавиши" Вы можете посылать комбинации VK_MENU, VK_LEFT, VK_DOWN, и VK_RETURN, чтобы программно "путешествовать" по меню.

Как узнать статус меню?

В чём вопрос: как узнать, нажат ли сейчас именно нужный пункт меню? Чтобы я в таймере мог его опрашивать на состояние.

До тех пор, пока какая-то часть главного меню "выпала" (то есть нажат итем "Файл", и видны New, Open, Save etc.) нужно чёто делать раз в полсекунды. То есть надо отловить момент, когда это самое меню закроется, чтобы перестать чё-то делать.

Система визуального программирования Delphi относится к RAD – системам (Rapid Application Development, быстрая разработка приложений), позволяющая быстро и эффективно разрабатывать приложения, включая и приложения для работы с базами данных. Кроме того, обладает практически всеми возможностями современных СУБД, таких как, например, Microsoft Access или Visual Fox Pro . Она имеет развитые возможности по созданию пользовательского интерфейса с помощью широкого набора инструментальных программных средств, позволяет визуально подготавливать запросы к

Разработка приложения осуществляется в окне Конструктора формы Form1, которое наряду с главным окном Delphi – Project1 и окном инспектора объектов появляется после загрузки Delphi командой Пуск | Программы | Borland Delphi | Delphi.

Форма является основой, на которой размещаются необходимые компоненты, используемые приложением для выполнения возложенных на него функций и задач. Создание приложений в Delphi включает следующие этапы:

а) создание визуального интерфейса приложения, для этого выбираются необходимые компоненты из Палитры компонентов и размещаются на форме;

б) установка при помощи окна Object Inspector свойств формы и элементов управления, что необходимо для придания объектам определенного вида и законов их поведения;

в) связывание с компонентами кода на языке Object Pascal для обработки событий, возникающих при использовании мыши, клавиатуры, системных событий и тому подобное.

Создание приложений при помощи визуальных компонентов следует широко применяемому в различных программных продуктах принципу WYSIWYG ( What You See Is What You Get – что видишь, то и получишь) и поэтому то, что появляется на экране во время разработки, будет соответствовать тому, что наблюдаться во время выполнения приложения.

Простейшим компонентом для обработки текста является Label (Метка), доступным на странице Standard ( ). Компонент представляет собой статический текст и применяется для идентификации других объектов приложения, он может помочь пользователю сориентироваться и обеспечит его необходимой информацией.

Пусть необходимо создать форму в виде, представленном на рисунке 1 Для создания заголовка формы помещается компонент Label, для того необходимо выбрать его на странице Standard, щелкнув на нем левой кнопкой мыши. Затем передвинуть указатель к тому месту, где надо разместить объект. В окне Object Inspector необходимо задать свойства компонента.

Для работы многих приложений требуется выбор одного из вариантов, перечень которых задается в виде списка (меню). Создание такого режима можно организовать с помощью визуального компонента RadioButton (радиокнопка), расположенного на странице Standard ( ). Компоненты RadioButton, собранные в одну группу, могут применяться для создания списка. В один момент может быть выбран только один из группы переключателей. Набор альтернатив, из которых выбирается одна, реализуется требуемым количеством радиокнопок, размещенных в одном контейнере (форме, панели и тому подобное).


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

б) сделать двойной щелчок мышью на компоненте меню, в результате будет выделен первый пункт меню, который еще предстоит определить;


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

Во время разработки приложения или во время его выполнения некоторые пункты меню можно сделать недоступными. Деактивация пунктов меню выполняется следующим образом:

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

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

Привет! Сегодня мы поговорим о создании меню игры. Ведь в последнее время красочно оформленное меню является очень важным фактором. Поставим перед собой следующие задачи:

  1. Использование динамического меню.
  2. Возможность загрузки меню из файла.
  3. Применение анимации.

Ну, думаю, пока достаточно. Если в процессе написания статьи появится что-либо еще, я обращу на это внимание.

Отступление. Кое-что о примере.

Часть 1. Описание базового класса.

В свете вышеизложенного во введении у меня получился следующий код:

Полное описание всех процедур и функций приводится в файле GameMenuUnit.pas архива, прилагаемого к данной статье в качестве примера использования меню. Мы рассмотрим лишь самые интересные, на мой взгляд, моменты.

Часть 2. Отрисовка меню.

Выводом меню на поверхность занимается процедура Draw. В качестве аргумента в нее передается isTimer логического типа. Если он равен Истине(True), тогда меню использует таймер для подсчета задержки между кадрами анимации, иначе таймер (вроде как) игнорируется. Рассмотрим пример: если свойство Interval таймера установлено не в нулевое состояние, то задержка между кадрами будет равна (для нижеследующего кода) Inteval*17; если же isTimer равен False, то используется процедура GetTickCount, не зависящая от таймера приложения. Но здесь следует заметить, что вызов TGameMenu.Draw (в коде примера) происходит из DXTimer.OnTimer, что говорит о косвенном влиянии таймера и на вывод меню с isTimer’ом равным False.

Пример: Draw вызывается из DXTimer.OnTimer с Interval’ом = 23; в этом случае задержка будет 115, а не 100, как в коде.

Часть 3. Отработка нажатия.

Для отработки нажатия клавиш мыши на элементах меню можно использовать два способа:

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

2. присвоение каждому элементу своего обработчика события нажатия кнопки мыши.

где Assigned(Items[ItemIndex].OnClick) – проверка на доступность вызова процедуры OnClick. Если вы хотите использовать второй способ, то при добавлении элементов необходимо определить процедуру OnClick.

Ну вот вроде бы как и все. Мы добрались до завершения статьи. Если что непонятно, необходимо пояснение или пример пишите. Отвечу всем.

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

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

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

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

Задачи урока

  • Дать общие представления о стандартном интерфейсе пользователя.
  • Работа с компонентами MainMenu и PopupMenu.

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

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

image002


Рисунок 1. Окно приложения

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

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

  1. Заголовок окна— элемент любого окна (хотя может и отсутствовать). Там находятся кнопки управления окном и его текстовый заголовок.
  2. Главное меню— элемент интерфейса, в котором довольно компактно, по пунктам, расположены все действия, которые можно осуществлять в приложении (или в данном окне). Главное меню на форме может быть только одно. В Delphi компонент, отвечающий за главное меню, носит название MainMenu (вкладка Standart).
  3. Контекстное меню — элемент интерфейса, в котором отображаются пункты меню, связанные с компонентом. Вызывается щелчком правой кнопки мыши на связанном компоненте. В Delphi компонент, отвечающий за контекстное меню, носит название PopupMenu (вкладка Standart).
  4. Панель инструментов — элемент интерфейса, обычно располагающийся под главным меню. Состоит из набора кнопок (инструментальных кнопок), которые дублируют часто используемые команды главного меню. В Delphi компонент, отвечающий за панель инструментов, носит название ToolBar (вкладка Win32).
  5. Панель статуса — элемент интерфейса, располагающийся в нижней части формы. В него обычно выводят служебную информацию. В Delphi компонент, отвечающий за панель статуса, носит название StatusBar (вкладка Win32).
  6. Всплывающая подсказка (Hint) выглядит следующим образом:.

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

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

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

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

  1. Откройте созданное нами ранее приложение в уроке № 4 — Текстовый редактор.
  2. Поместите на форму компоненты MainMenu и PopupMenu согласно рисунку 3.

image017


Рисунок 3

  1. Измените имена компонентов следующим образом:

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

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

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

  1. Приступим к созданию главного меню. Щёлкните два раза по компоненту MainMenu. В результате откроется окно специального редактора главного меню (рисунок 4).

image017


Рисунок 4

а) б) в)
Рисунок 5

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

image023

а) б)

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

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

  • За главное меню отвечает компонент MainMenu (вкладка Standart). На форме оно может быть только в единственном экземпляре.
  • За контекстное меню отвечает компонент PopupMenu (вкладка Standart). Оно привязывается к конкретному компоненту (компонентам) через специальное свойство PopupMenu этого компонента (компонентов). Для компонента может быть только одно контекстное меню.

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

Задачи урока

  • Работа с компонентом ToolBar.
  • Работа с компонентом ImageList.
  • Использование всплывающих подсказок (Hint).

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

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

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

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

image036


Рисунок 2

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

3. Переименуйте помещенные на форму компоненты следующим образом: ImageList1 — ImageList, ToolBar1 — ToolBar.

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

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

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

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

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

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

image044


Рисунок 5

image046


Рисунок 6

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

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

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

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

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

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

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

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

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

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

Читайте также: