Лекция Паскаль 2 – настройка компонентов и форм, изменение их свойств


Тема: Формы и элементы управления.

Цель: Познакомиться с настройкой компонентов и форм: изменение их свойств, программирования обработчика события, использование окна сообщения в визуальной среде программирования Delphi.

1. Основные компоненты Windows-программы.

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

Знакомство с основными компонентами Windows-приложения начнем со страницы Standard палитры компонентов. На ней размещены 16 объектов, которые наиболее часто встречаются в программах: кнопки, списки, окна ввода и тому подобное. Набор и порядок компонентов на каждой странице можно конфигурировать: добавлять к имеющимся компонентов новые, изменять их количество и последовательность тому подобное.

Перечислим компоненты Delphi с палитры Standard и приведем некоторые замечания по их применению.

 

 

 

 

 

 

 

 

Объект-контейнер для вывода содержимого фреймов на форму. Нажать его можно только, если Вы заранее создали через File — New — New Items, Delphi Files — Frame один или несколько фреймов — тогда Frames предложит на выбор список фреймов, которые он может вывести на форму. Например, эффектно смотрится форма, когда в зависимости от ситуации на ней меняется конфигурация кнопок. Для создания такой формы программист должен заготовить несколько фреймов, которые при выполнении программы могут быть видимыми или невидимыми.
 

 

 

 

 

 

 

Компонент для внесения меню в программу. При размещении MainMenu на форму он выглядит, как обычная иконка. Иконки такого типа называют невидимыми компонентами, поскольку во время выполнения программы они становятся невидимыми. Создание меню включает три шага:

1. Размещение MainMenu на форму.

2. вызов дизайнера меню.

3. Определение пунктов меню в дизайнере меню.

  Меню, «всплывает». Этот тип меню появляется при щелчке правой кнопкой мыши (контекстное).

 

 

 

 

 

Компонент для отображения текста на экране. Вы можете изменять шрифт и цвет метки, дважды щелкнув на свойства Font в инспекторе объектов. Это легко сделать и во время выполнения программы, написав только одну строку кода.
 

 

Стандартный элемент управления Windows для ввода текстов. Он может быть использован для отображения короткого фрагмента текста и позволяет пользователю вводить текст во время выполнения программы.
 

 

Многострочный пользователем форматирования.  

и

текстовый редактор.              Используется отображения многострочного текста для без введение функций
 

 

 

Кнопка, которая позволяет осуществлять некоторые действия во время выполнения программы. В Delphi все делается очень просто. Разместив Button на форму, путем двойного щелчка Вы можете создать заготовку обработчика события — в данном случае это нажатие кнопки.
 

 

 

 

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

 

 

Зависимый переключатель, который используется для выбора только одного из нескольких вариантов. Для этого компонент объединяется с одним или несколькими такими же компонентами в группу. Щелчок мышкой на компоненте приводит к его выделения и снятия выделения раньше отмеченного компонента.
  Список выбора, содержащий список предлагаемых вариантов (опций) и дает возможность проконтролировать текущий выбор.
 

 

 

 

 

 

Раскрывающийся список; во многом напоминает ListBox, однако, в отличие от него, позволяет вводить информацию в маленьком поле ввода сверху ListBox.   Есть несколько типов ComboBox.   Из них наиболее популярен

«Выпадающий список» (drop-down combo box). Это — многострочное меню, в нерабочем состоянии свернуть в одного активного строки. При активации этот компонент разворачивается к полному списку.

 

 

 

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

 

Компонент контейнер, используемый для визуальных целей и для указания Windows, каков порядок перемещения по компонентам на форме при нажатии клавиши Таb.
Группа зависимых переключателей.              Содержит специальные свойства для обслуживания нескольких связанных между собой зависимых переключателей.
 

 

Панель, которая, как и GroupBox, служит для объединения нескольких компонентов. Содержит внутреннюю и внешнюю границы, позволяет создавать эффекты

«Нажатия» и «выпуклости».

 

 

 

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

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

 

Перечислим компоненты страницы Additional, наиболее часто употребляемые с некоторыми комментариями по их применению.

  Командная кнопка. Отличается от стандартной кнопки Button возможностью отображать пиктограммы.
  Пиктографическая кнопка. Используется, как правило, для быстрого доступа к опциям главного меню.
 

 

Аналог Edit, который обеспечивает возможность форматированного ввода. Формат определяется в свойстве EditMask. В редакторе свойств для EditMask есть заготовки для ввода — вывода даты, валюты и тому подобное.
  Таблица строк. Этот компонент обладает мощными свойствами для представления текстовой информации в табличном виде.
  Таблица изображений.              Используется для представления изображений в табличном виде.
  Рисунок. Используется для отображения изображений, в том числе пиктограмм и метафайлов.
  Фигура. С помощью этого компонента можно вставить на форму правильную фигуру — прямоугольник (квадрат), эллипс (круг).
  Предел. Служит для выделения отдельных частей формы трехмерными рамками и полосками.
 

 

Панель с полосками прокрутки. В отличие от компонента Panel автоматически вставляет полоски прокрутки, если размещены на ней компоненты выходят за ее пределы.
 

 

Список многовариантного выбора. Отличается от стандартного компонента ListBox наличием рядом с каждой опцией независимого переключателя типа CheckBox, который позволяет выбрать сразу несколько опций.
 

 

Граница. Этот компонент создает границу между двумя видимыми компонентами и дает пользователю возможность перемещать ее, увеличивая один компонент за счет другое.
 

 

Статистический текст. Отличается от стандартного компонента Label наличием собственного Windows-окна позволяет обводить текст рамкой или выделять его в виде «утопленной» части формы.

2. Элементы управления и их атрибуты.

При разработке программ в визуальных средах программист работает не только с формами. Существенной поддержкой выступают «визуальные компоненты». В интерфейсе Delphi заранее заготовлено несколько инструментальных закладок, которые содержат много очень удобных визуальных компонентов.

Визуальные компоненты представляют собой логически завершенный программный код, который выполняет операции с данными отдельных модулей. Практически любой программный код может быть представлен в виде компонента. Визуальный компонент — это заранее заготовленный тип данных, во многом подобный integer, string, array, хотя и гораздо сложнее. Перенося компонент с инструментальной линейки на форму, мы создаем в программе «экземпляр объекта», то есть переменную данного типа. Например, у нас была пустая форма. Открыв окно программы, мы увидим заготовку для написания кода:

 

Перенесем на форму кнопку (переменную типа TButton), и описание формы автоматически изменится:

 

На форме появилась переменная Button1 типа TButton (экземпляр объекта «кнопка»). Визуальные компоненты имеют пять групп основных характеристик:

Свойства (Properties) — параметры, описывающие характерные признаки объекта, например, ширина компонента на форме (Width), высота компонента (Height), доступность (логическая свойство Enabled) и др.Набор свойств для различных компонентов разный.В частности, в невидимых объектов нет ни «ширины», ни «высоты». События (Events) — набор действий на компонент, которые вызывают выполнения им некоторых программных операций.Эти действия могут быть как от внешних устройств (например, OnMouseDown — нажатие кнопки мыши в момент, когда указатель мышки находится над компонентом), так и программными (например, OnCreate — действия, которые

нужно выполнять при создании формы).

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

Еще две характеристики — Сообщение (Messages) и Контекст (Context) — определяют правила передачи управленческой информации между компонентами и режим графического отображения компонентов.

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

Задания. Необходимо создать программу, в которой на форму вынесены две большие кнопки с картинками (именно для этого используется компонент SpeedButton).На одной кнопке изображена кошку, на другой — мышку. Сначала кошка стоит перед норкой, откуда только выглядит мышиный хвостик. Когда пользователю надоедает ждать, он может нажать на кнопку «Кошка». Кошка мяукает и ложится спать. С норки появляется мордочка мышки. Если тапер нажать на кнопку «Мишка», то мышь выскакивает из норки, но видит кошку, пугается и прячется в норку, оставляя снаружи только хвостик. При этом кошка просыпается и снова стоит у норки.

Можно выделить четыре фазы действия этой программы:

Кошка стоит у норки, из которой выглядит мышиный хвостик (исходное положение).

Кошка спит, а мышка вылезла из норки (после нажатия кнопки «Кошка»).

Кошка стоит у норки, при этом мяукает, из норки выглядит мышиный хвостик (нажатия кнопки «Кошка»).

кошка спит, а с норки появляется мордочка мышки (нажатия кнопки

«Мышка»).

Если отвлечься от образного описания задачи, можно сделать вывод: программист столкнулся здесь с проблемой трехкратной замены картинок на кнопках. Картинка кошки в активном состоянии она «стоит» в недоступном состоянии — «спит», в нажатом состоянии — «мяукает». Картинка мышки в активном состоянии она «выглядит», в недоступном — «спряталась», в нажатом — «выбегает».

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

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

Картинки не масштабируются. Поэтому, например, если наши кнопки, например, имеют размеры 75 х 75, в графическом редакторе нужно рисовать картинки высотой 70 пикселей и шириной 210 ​​пикселей (то есть трижды по 70 точек). Удобнее это сделать, нарисовав сначала три однотонные рамки, которые будут затем вытертые.

Порядок рисования картинки определяется компонентом SpeedButton: ее левый фрагмент выводится при не нажата активной кнопке, средний — при отключенной (свойство «доступность» Enabled установлена в состояние false), правый — временно выводится в момент нажатия кнопки.

Чтобы картинка не смещалась при нажатии кнопки, левый и правый ее фрагменты лучше копировать, изменяя лишь часть деталей (кошка «мяукает»). По завершении рисования опорные рамки нужно вытереть.

 

Таким же образом выполняем три фрагмента рисунке мышки.

Теперь внесем картинки кошки на кнопки. Выделяем кнопку, выбираем свойство Glyph, щелчком мыши на поле ввода вносим нужные значения и в окне открывается, указываем имя файла. По умолчанию в свойствах NumGlyphs (количество картинок) установлено значение 1, то есть, одна картинка (выводится центральная часть выполненного рисунке). Меняем это значение на 3 — у нас заготовлено 3 картинки на кнопку. Аналогичным образом делаем и с картинками мышки.

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

На кнопке SpeedButton1 ( «кошка») выбираем строку обработчика кода OnClick и вписываем в процедуру две строки:

На кнопке SpeedButton2 ( «мышка») выбираем строку обработчика кода OnClick и

вписываем в процедуру две строки:

Такая программа действует в соответствии с поставленной задачей.

В завершение несколько слов о в правилах интерпретации рисунка. При вставке компонента Image левая нижняя точка рисунке (пиксел) определяет «цвет прозрачности», если в свойства Transparent установлено значение true. На кнопке отображаются не все точки этого цвета, и на рисунке просвечивается серый фон.

В свойство NumGlyphs можно вводить числа от 1 до 4, при этом:

Если там находится 1, то одна и та же картинка выводится на поверхность кнопки независимо от ее состояния.

Если там находится 2, левый фрагмент рисунке выводится на кнопку в активном (в том числе и нажатом) состоянии, а правый — в недоступном состоянии.

Если там находится 4, то значит, что у нас есть еще и четвертая картинка для фиксации кнопки в нажатом состоянии.

Для «кнопок с фиксацией» на форме нужно разместить несколько SpeedButton, в которых в свойстве GroupIndex содержится одно и то же число.В таком случае эти кнопки считаются группой; при нажатии одной кнопки она фиксируется, а все остальные — отжимаются в выходной активное состояние. На зафиксированной кнопке и выводится четвертый фрагмент рисунка. Такой режим является удобным для программирования некоторых автоматизированных тестов с выбором одного из нескольких вариантов ответы.

Предлагаем Вам еще один пример шуточного задачи.Внести изменения в предыдущее задание таким образом, чтобы получить картинку «Мартовские коты» — если нажать на кнопку с котом, он «кричит», затем ложится спать, а второй кот просыпается — и наоборот.

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

код и тому подобное. Хватает только изменения одного свойства: заменить для SpeedButton2 название файла (теперь это один и тот же рисунок как для первой, так и для второй «кошек»). Программный код совпадает с кодом программы «Кошка-мышка».

3. Использование окон сообщений.

Визуальная среда Delphi позволяет применять в программах стандартные окна сообщений, импортируемые из WinAPI. Таких окон несколько, и возможности ввода данных с их помощью очень ограничены. Однако эти окна имеют и положительные свойства. Во-первых, их легко программировать; во-вторых, они являются окнами модельного диалога, могут прерывать программу и позволяют ввести данные или подтвердить определенное действие даже из цикла или рекурсивной функции.

Окно сообщений.

Функция MessageBox является удобным средством для вывода на экран небольшого сообщения. синтаксис:

k = messagebox (номер окна, заголовок, строка, код кнопок) Параметры этой функции:

Номер окна — это числовое значение, атрибут окна, которое вызвало окно сообщения.Используется для много оконных пользовательских приложений. В однооконном приложении в номере окна относится 0.

Заголовок — строка, которая будет выводиться в заголовке окна сообщения.

Строка — текстовая информация, которая выводится в окне сообщения.Заметим, что ширина окна определяется длиной этой строки или суммарной шириной кнопок (если строка окажется короче суммарной ширины кнопок). Высота окна

— это высота строки плюс высота кнопок. Если нужную строку, состоящую из нескольких строк, в его текст необходимо вписать коды перевода строки (# 13), например:

«Наша Таня» + # 13 + ‘Громко плачет,’ + # 13 + ‘Уронила в речку мячик »

Код кнопок определяет, какой их набор будет выведен в окне сообщение:

  • MB_AbortRetryIgnore — Abort, Retry, Ignore
  • MB_OK — OK (по замалчивания)
  • MB_OK_Cancel — OK, Cancel
  • MB_RetryCancel — Retry, Cancel
  • MB_YesNo — Yes, No
  • MB_YesNoCancel — Yes, No, Cancel Иконка в окне определяется константами:
  • MB_IconExclamation, MB_IconWarning — знак «»
  • MB_IconInformation, MB_IconAsterisk — знак «И»
  • MB_IconQuestion — знак «?»
  • MB_IconStop, MB_IconError, MB_IconHand — знак «Х»

Для значений, которые возвращает функция в зависимости от того, какая кнопка нажата, есть соответствующие константы (символьные или числовые):

Кнопки окна сообщений и их обозначения:

кнопка Константа (символьная) Значения (числовое)
OK IDOK 1
Cancel IDCancel 2
Abort IDAbort 3
Retry IDRetry 4
Ignore IDIgnore 5
Yes IDYes 6
No IDNo 7

Функцию MessageBox можно использовать как процедуру без возврата значения.

Например напишем программу, которая выводила следующий стих в окне сообщения:

В зависимости от выбранного ответа на форме появлялся бы надпись «Да» или «Нэт».

Данная программа реализуется следующим кодом:

 

Окно предупреждения.

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

k = messagedlg (строка, тип окна, перечень кнопок, число_help) Параметры этой функции:

Строка — текст, который выводится в окне предупреждения.

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

      • mtWarning — знак «!» в треугольнике;
      • mtError — знак «х» в кружочке;
      • mtInformation — буква «и» (синяя) в белом кружочке;
      • mtConfirmation — знак «?» в кружочке;
      • mtCustom — пустое окно без знака.

Список кнопок — множество зарезервированных констант.Допустимые следующие значения, каждое из которых определяет соответствующую кнопку:

      • mbOK — кнопка OK;
      • mbCancel — кнопка Cancel;
      • mbYes — кнопка Yes;
      • mbNo — кнопка No;
      • mbAbort — кнопка Abort;
      • mbRetry — кнопка Retry;
      • mbIgnore — кнопка Ignore;
      • mbAll — кнопка All;
      • mbNoToAll — кнопка NoToAll;
      • mbYesToAll — кнопка YesToAll.

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

YesToAll, то для этого в квадратных скобках нужно записать: [mbAll, mbNoToAll, mbYesToAll].

Обратите внимание на то, что нажатие кнопки возвращает соответствующее значение:

 

      • mrNone — ничего не нажата (0)
      • mrOk — кнопка OK (1);
      • mrCancel — кнопка Cancel (2)
      • mrAbort — кнопка Abort (3)
      • mrRetry — кнопка Retry (4)
      • mrIgnore — кнопка Ignore (5);
      • mrYes — кнопка Yes (6)
      • mrNo — кнопка No (7)
      • mrAll — кнопка All (10);

число_help — числовой код для вызова контекстной помощи.

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

Ширина окна определяется длиной строки или суммарной шириной кнопок.

Высота — это строка плюс кнопочка.

Пример использования окна предупреждения:

 

Нужно вывести на экран окно с двумя кнопками Yes i No, а затем — окно с ответом «Да, прочитал» или «Нет, не прочитал» в зависимости от выбора кнопки в первом окне.

Текст программы следующий:

 

Позиционированы окно предупреждений MessageDlgPos

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

k = messagedlg (строка, тип окна, перечень кнопок, число_help, x, y);

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

Окно ввода InputBox.

Это окно предназначено для ввода строки. Окно вызывается следующей функцией:

s = inputbox (заголовок, подсказка, строка по умолчанию) Параметры функции:

заголовок — надпись на строке заголовка окна;

подсказка — строка текста, который выводится над элементом Edit в этом окне;

строка по умолчанию — исходный текст в окне до начала введения.

Пример. Нужно написать параметры для регистрации игрока в случае успешно завершенной игры.

Текст программы следующий:

 

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

4. Теоретические вопросы для самоконтроля.

1. Для чего предназначены компоненты MainMenu, PopupMenu, Label, Edit, которые находятся в палитре компонентов Standard?

2. Для чего предназначены компоненты Memo, Button, CheckBox, RadioButton, которые находятся в палитре компонентов Standard?

3. Для чего предназначены компоненты ListBox, ComboBox, GroupBox, RadioGroup, которые находятся в палитре компонентов Standard?

4. Для чего предназначены компоненты BitBtn, SpeedButton, StringGrid, DrawGrid, которые находятся в палитре компонентов Additional?

5. Для чего предназначены компоненты Image, Shape, CheckListBox, StaticText, которые находятся в палитре компонентов Additional?

6. Что представляют собой визуальные компоненты?

7. В чем заключается особенность сообщений и контекстов?

8. Перечислите возможности, которые предоставляет окно сообщений MessageBox.

9. Перечислите возможности, которые предоставляет окно предупреждений MessageDlg.

10. Для чего предназначено окно ввода InputBox?

[Всего голосов: 3    Средний: 5/5]

Читать  Теоретические основы программирования на языке PASCAL, составление алгоритмов