Программирование на Pascal / Delphi / Методичка - Работа с компонентами библиотеки VCL в среде Delphi [22]
.pdfМИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ФАКУЛЬТЕТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ
КАФЕДРА ЭВМ
Работа с компонентами библиотеки
Visual Component Library (VCL) в среде Delphi.
Часть II.
Методические указания к лабораторным работам.
Дисц. ”Алгоритмические языки и программирование” и ”Программирование и применение ЭВМ”
спец. 220100
Киров, 2003
УДК 681.3
К21Шиндяева Е. Н. Работа с компонентами библиотеки Visual Component Library (VCL) в среде Delphi. Часть
II.
Киров: Изд-во ВГУ, 2003, – 16 с.
Рецензент: д.т.н., зав. каф. РЭС Петров Е. П.
Рис. 6; Библиогр.7: Назв. |
Редактор |
|
|
Подписано в печать |
Усл. печ. л. 1 |
Бумага офсетная |
Печать матричная |
Заказ № |
тираж 50. |
Текст напечатан с оригинал-макета, предоставленного составителем.
610 000, г. Киров, ул. Московская, 36.
Оформление обложки, изготовление – ООО «Альфа-Полекс», ПРИП
ВГУ Лицензия ЛР № 020519 от 20.06.97г.
©Вятский государственный университет.
©Е.Н.Шиндяева, 2003
|
|
3 |
|
|
|
Оглавление |
|
1. |
Цель работы ............................................................................................. |
4 |
|
2. |
Элементы интерфейса как заготовка программы ............................... |
4 |
|
3. |
Типовые приемы использования стандартных компонент VCL ........ |
4 |
|
|
3.1 |
Создание простейшего проекта ...................................................................................................... |
4 |
|
3.2 |
Необходимые элементы оформления проекта ............................................................................... |
5 |
|
3.3 |
Создание проекта с использованием меню .................................................................................... |
6 |
|
3.4 |
Оформление парольного ввода информации ................................................................................. |
7 |
|
3.5 |
Использование поля примечаний ................................................................................................... |
8 |
4 |
Практической задание ......................................................................... |
8 |
|
Список литературы....................................................................................... |
9 |
||
ПРИЛОЖЕНИЕ А....................................................................................... |
10 |
||
ПРИЛОЖЕНИЕ Б ....................................................................................... |
11 |
4
1. Цель работы
Целью работы является практическое освоение методологии и принципов создания базовых стандартных элементов интерфейса Windows-программы в среде визуального проектирования.
2.Элементы интерфейса как заготовка программы
Основная причина бурного развития сред визуального проектирования – необходимость освободить разработчика
программ от необходимости рутинной работы по созданию стандартизированных элементов интерфейса разрабатываемого проекта. Число таких элементов в настоящее время довольно велико и продолжает расти, причем внутренняя структура многих из этих элементов весьма сложная.
Однако базовые элементы интерфейса (кнопки, меню, строки ввода и тому подобное) уже вряд ли будут принципиально совершенствоваться. Их состав, свойства, принципы использования являются практически промышленным стандартом и одинаковы в любой среде разработки современных программ. Рассмотрим создание стандартных элементов интерфейса на примере работы с компонентами библиотеки VCL (Visual Component Library) в среде Delphi.
Базовые стандартные элементы расположены на странице Standart палитры компонент Delphi (рисунок 1). Все эти объекты такая же часть Windows, как мышь или окно.
Рисунок 1 Свойства, общие для внешнего оформления этих компонент, приведены в приложении А, характеристики компонент
в приложении Б. При создании программы размещение компонент на форме и определение их свойств трудностей не представляет – среда визуального проектирования и создавалась для того, чтобы подобных трудностей не возникало. От разработчика требуется определить реакции на задействование введенных компонент – эта часть создания программного продукта автоматизации не подлежит и является сущностью работы программиста. Классические приемы «включения в работу» стандартных компонент приведены нижу.
3.Типовые приемы использования стандартных компонент VCL
3.1Создание простейшего проекта
Впредставленном ниже проекте используем следующий минимальный набор компонент.
Button – стандартная кнопка, обычно кнопка используется для запуска действия, при этом задействуют только метод OnEvent (реакция на нажатие). Свойство Default=True ассоциирует вводимый компонент с кнопкйо Enter, Cancel=True - с кнопкой Esc. Свойства Color для оформления надписи (Caption) у кнопки нет. Амперсант,
помещенный в тексте надписи, указывает быструю Alt-клавишу запуска, например, Capion=A&Ppend вызывает срабатывание кнопки при нажатииAlt-P. Свойство ModalResult=true определит обязательность нажатия для закрытия дочернего окна.
Label – метка, используется как надпись или как область вывода информации для чтения. Как и для кнопки, для метки можно определить клавишу быстрого доступа, но она будет запускать связанный с меткой компонент (по FocusControl). Свойство AutoSize=True определяет минимизацию размера метки под текст надписи, Aligment –
центровку этого текста, WordWrap – возможность расположения текста в несколько строк, Transparent – прозрачность при наложении на другие элементы.
Edit – строка ввода. Заголовка (Caption) у этого компонента нет, но есть свойство Text как содержимое строки. Это свойство можно как считывать, так и присваивать (при необходимости с ограничением длины назначением свойства MaxLength). При вводе конфиденциальной информации указывают отображаемые символы (обычно «*») при этом нужно переопределить свойство PasswordChar, задав его отличным от #0.
Составим проект для суммирования двух чисел, вводимых с клавиатуры. При этом на форме нужно разместить четыре надписи (с задаваемыми
свойствами Caption) и пятую надпись с пустой Caption – для отображения суммы. Определить две строки ввода для суммируемых чисел (против меток «первое» и «второе») и одну кнопку «Расчет» для запуска процедуры суммирования чисел.
После двойного щелчка по кнопке можно заполнить шаблон процедуры реакции на нажатие этой кнопки (рамкой выделен вводимый текст).
procedure TForm.Button1Click(Sender: TObject); var a,b,c: real;
s: string; code: integer;
5
begin
{ввод данных из полей редактирования} val(edit1.text,a,code);
val(edit2.text,b,code); c:=a+b; str(c:-10:4,s); {перевод числа в строку} label5.Caption:=s
end;
3.2 Необходимые элементы оформления проекта
Приведенный ниже вариант программы вполне работоспособен. Но в подобных программах обязательное требование в части их оформления – предусмотреть реакции на ввод символов в полях редактирования, например, защиту от ввода букв или второй десятичной точки. При нажатии Enter естественно переносить курсор в следующее поле редактирования или выполнять другие действия, если ввод данных завершен. В обработчиках событий (закладка Events инспектора событий Delphi) для полей ввода определим методы OnKeyPress, задав им имена, например e1 и e2. Затем после двойного щелчка заполним шаблоны процедур.
procedure TForm.e1(Sender: TObject; var Key: Char); begin
{защита поля редактирования на ввод числа} case key of
‘0’..‘9’, chr(8):;
‘.’: if pos(‘.’,edit1.text)>0 then key:=chr(0); ‘-’: if length(edit1.text)>0 then key:=chr(0);
chr(13): edit2.SetFocus; else key:=chr(0);
end;
end;
Вторая процедура отличается от первой лишь реакцией на нажатие клавиши Enter
procedure TForm.e2(Sender: TObject; var Key: Char); begin
... edit2.text ...
chr(13): edit2.font.color:=clRead;
...
end;
Текст процедуры TForm1.Button1Click желательно оформить как самостоятельную процедуру, например,
Procedure Summa(edit1,edit2: tEdit; label5: TLabel);
...
и вызывать ее внутри TForm1.Button1Click, так и в реакции на Enter в процедуре TForm1.e2, при этом окончание ввода данных сразу запустит вычисления.
Введем кнопку очистки полей ввода и вывода результата для нового расчета. Заголовок кнопки определим как Caption=«новое», зададим реакцию OnClick (двойным щелчком на кнопке).
procedure TForm1.Button2Click(Sender: TObject); begin
{очистка полей ввода} edit1.text:=‘ ’; edit2.text:=‘ ’; label5.caption:=‘ ’;
edit1.SetFocus
end;
Введем кнопку выхода
procedure TForm1.Button3Click(Sender: TObject); begin
form1.close {завершение приложения}
end;
6
3.3 Создание проекта с использованием меню
Меню как интерфейсный элемент используется практически во всех серьезных приложениях. В Windows поддерживается два типа меню – строчное, которому соответствует компонент MainMenu, и всплывающее (или локальное) – ему соответствует компонент PopupMenu. Обычно эти типы используются в комбинации.
MainMenu позволяет поместить главное меню в программу. При размещении на форме этот компонент выглядит как иконка. Создание меню включает три шага:
−помещение MainMenu на форму;
−вызов дизайнера меню через свойство Items в инспекторе объектов;
−определение пунктов меню в дизайнере меню.
PopupMenu позволяет создавать всплывающее меню, которое появляется по щелчку правой кнопки мыши на объекте, к которому оно привязано. У видимых объектов имеется свойство PopupMenu, где и указывается нужное меню. Создается PopupMenu аналогично главному меню.
Разместим на форме две строки ввода с реакцией OnKeyPressed типа
case key of ‘0’..‘9’,‘-’, chr(8):;
‘.’: if pos(‘.’,edit1.text)<>0 then key:=chr(0);
chr(13): edit2.SetFocus; else key:=chr(0) end;
Здесь допускается ввод только цифр и одной десятичной точки. Для второй строки ввода смена фокуса при нажатии Enter не выводится.
Введем четыре метки в качестве заголовков «введи 2 числа», «a=», «b=», «результат», а также пятую метку без заголовка для вывода информации.
Поместим на форме меню и введем пять пунктов по горизонтали: «расчет», «новое», «выход». В пункт расчета добавим выпадающее меню из четырех пунктов – для суммы, разности, произведения и частного. Пунктам назначим допустимые клавишные эквиваленты (например, Ctrl++ - можно, Ctrl+* - нет).
Введем в окне редактора две универсальных процедуры – по считыванию информации из строк ввода и по выводу результата в пятую метку (с именем label5):
procedure input(edit1, edit2: tEdit); var code: integer;
begin {ввод данных из полей редактирования} val(edit1.text,a,code); val(edit2.text,b,code) end;
procedure output(label5: TLabel); var s: string
begin {вывод результата} str(c:-10:4,s); {перевод числа в строку} label5.Caption:=s end;
При этом в описании глобальных переменных необходимо добавить три числа (var a,b,c: real).
Реакции расчетных пунктов меню будут однотипными, различающимися лишь видом арифметической операции. Пример для пункта «деление»:
input(edit1,edit2); if b<>0 then
begin c:=a/b; output(label4) end else label4.Caption:=‘некорректно!’
Пункт «новое» аналогичен ранее описанному
edit1.text:=‘ ’; edit2.text:=‘ ’;
7
label5.caption:=‘ ’; edit.SetFocus
Самый простой пункт меню – это закрытие формы: form1.close.
3.4 Оформление парольного ввода информации
Составим проект по форме вида
Свойство Ctl3D формы определим как False (окна парольного ввода обычно создают без трехмерности). Разместим на форме три чистые строки ввода со свойством Enabled=False (ввод данных закрыт), AutoSize=False, PasswordChar=‘*’.
Рядом со строками ввода разместим три метки указав FocusControl на соответствующие строки ввода.
Введем две кнопки: «OK» со свойством Default=True и «Cancel»
со свойстовом Cancel=True. На обработчик событий OnClick кнопки «OK» введем
MessageBox(0,‘получен’,‘Доступ:’,$1000); {..вызов рабочих процедур..} Close
На обработчик событий OnClick кнопки «Cancel» - просто Close.
Для первой строки ввода определим обработчик OnKeyPressed:
Var a: boolean; begin
If Key=#13 then begin {реакция на Enter} a:=Edit1.Text=‘333’; Label2.Enabled:=a; Edit2.Enabled:=a;
If a then begin Edit2.SetFocus; Edit1.Enabled:=false end
else
If MessageBox(0,‘не получен!’,‘Доступ:’,$1000)=idRetry
then Edit1.text:=‘ ’ {очистка строки ввода} else Form1.Close; end end;
Вторая область ввода станет доступна, если в первой будет введен пароль (здесь строка «333»).
Для второй строки ввода определим обработчик OnChange с рядом условий по вводу информации
WITH Sender AS TEdit do {работа со строкой ввода}
If (Length(Text)>1) {длина вводимой строки} and(Length(Text)<5)
and(StrToInt(Text)mod 2=0) {анализ числа}
Then begin MessageBeep(0); {удаление последнего символа} Text:=Copy(Text,1,Length(Text)-1);
SelStart:=Length(Text) end; {позиция ввода}
а также обработчик OnKeyPressed (для реакции на Enter)
If Key=#13 then begin {активизация меток и полей ввода}
Edit3.Enabled:=Edit2.Text<>‘ ’;
Label3.Enabled:=Edit3.Enabled;
If Edit3.Enabled then Edit3.SetFocus end;
Кнопка «OK» будет доступна лишь при совпадении непустых текстов во второй и третьей строках ввода
(OnKeyPressed для Edit3):
If Key=#13 then begin {активизация кнопки «OK»}
Button1.Enabled:=(Edit2.Text<>‘ ’)and (Edit2.Text=Edit3.Text);
If not Button1.Enabled then begin
8
MessageBox(0, ‘неверно подтвержден!’,‘Пароль:’,$0030); Edit3.Text:=‘ ’ end;
3.5 Использование поля примечаний
Примечание (визуальный компонент Memo) может включать множество строк в отличие от строки ввода Edit, то есть подразумевает работу с большими текстами. В Memo можно переносить слова, сохранять в ClipBoard фрагменты текста и восстанавливать их, выполнять другие базовые функции текстового редактора с ограничением на объем текста 32Кб. Свойства BorderStyle, ReadOnly, HideSelection, MaxLength – то же что и у строки ввода.
Специфические свойства:
−Lines – содержимое Memo как набор строк;
−Align – заполнение пространства формы по краям;
−AlingMent – выравнивание текста внутри формы;
−ScrollBars – наличие полос прокрутки содержимого поля;
−WordWrap – автоперенос текста от правого края.
Для удобства работы с полем примечаний как с текстовым редактором имеются свойства WantTabs и WantReturns, которые «восстанавливают в правах» функции клавиш Enter и Tab применительно к работе с текстом.
Свойство Lines можно не только определять, но и загружать из файла и выводить в файл. Пример:
Разместим на форме Memo с заголовком «Редактор файла File1.pas». Установим свойства ScrollBars=ssBoth, Align=alClient (полное заполнение формы). На событие OnCreate формы введем
Memo1.Lines.LoadFromFile (‘e:\delphi3\files_1\file1.pas’);
Memo1.Lines.SaveToFile(‘file1.bak’);
На событие OnCloseQuery формы введем
Memo1.Lines.SaveToFile(‘file1.pas’);
При этом получим простой текстовый редактор файла file1.pas с записью резервной копии в файл file1.bak.
4Практической задание
1.1Составить проект для нахождения корней квадратного уравнения по тем его коэффициентам, вводимым с клавиатуры. Предусмотреть реакции на некорректный ввод символов в полях редактирования (например, поставить защиту от ввода букв или второй десятичной точки). При нажатии Enter переносить курсор в следующее поле редактирования (а на завершении ввода выполнять вычисления). Предусмотреть кнопки «расчет», «новые данные» и «выход».
Всем введенным компонентам задать ярлычки с оперативной подсказкой (Hints). При оформлении компонент
использовать по возможности различные цвета и шрифты.
1.2Выполнить проект по п.4.1, но с использованием меню для выполнения действий.
1.3Модернизировать п.4.2, введя запрос пароля на вход в программу. Определить заголовок проекта
(Project/Options/Application) и там же выбрать значок (Load Icon) из файла с расширением «ico». Уникальный значок можно создать в редакторе (Tools/Image Editor).
1.4Составить проект «редактор текстового файла» с использованием компонента Memo. Имя загружаемого и сохраняемого файла берется из строк ввода (Edit). Предусмотреть кнопки «очистка строк ввода», «сохранить», «сохранить как» и «выход» с запросом сохранения измененного содержимого Memo.
1.5Выполнить проект по п.4.4, но с использованием меню для выполнения действий.
9
Список литературы.
1.Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. -Харьков: Фолио, 1997. - 368 с.
2.Дантеманн Д., Мишел Д., Тейлор Д. Программирование в среде Delphi /Пер. с англ. -К.: НИПФ "ДиаСофт Лтд.", 1995. -
608с.
3.Дарахвелидзе П.Г., Марков Е.П. Delphi - среда визуального программирования. - СПб.: BHV, 1996. -352 с.
4.Калверт Ч. Программирование в Windows: Освой самостоятельно за 21день / Пер. с англ. - М.: БИНОМ, 1995. - 496 с.
5.Калверт Ч. Delphi 2: Энциклопедия пользователя / Пер. с англ..- К.: НИПФ11 ДиаСофт Лтд.11, 1996. -- 736 с.
6. Конопка Р. Создание оригинальных компонент в среде Delphi / Пер. с англ.- К.: НИПФ "ДиаСофт Лтд.", 1996. - 512 с.
7.Культин Н.Б. Программирование в Turbo Pascal 7.0 и Delphi. - СПб.: BHV,1998. -240с.
8.Матчо Дж., Фолкнер Д. Delphi / Пер. с англ. - М.: БИНОМ, 1995. -464 с.
9.Матчо Дж. и др. Delphi 2: Руководство для профессионалов / Пер. с англ. -СПб.: BHV, 1997. -784 с.
10.Орлик С.В. Секреты Delphi на примерах. - М.: БИНОМ" 1996. -316 с.
11.Рубенкинг Н. Программирование в Delphi для "чайников". - К.:"Диалектика", 1996. - 304 с.
12.Сван Т. Основы программирования в Delphi для Windows 95 / Пер. с англ. -К.: "Диалектика", 1996.-480с.
13.Сурков Д.А., Сурков К. А., Вальвачев А.Н. Программирование в среде Borland Pascal для Windows. - Мн.: Высш.
шк., 1996. - 432 с.
14.Федоров А., Рогаткин Дм. Borland Pascal в среде Windows. - Киев: "Диалектика", 1993. - 656 с.
15.Хендерсон К. Руководство разработчика баз данных в Delphi 2 / Пер. с англ. -К.: "Диалектика", 1996. -544с.
16.Microsoft Press: Руководство программиста по Microsoft Windows 95 / Пер. с англ. - М.: "Русская Редакция", 1997. -
600с.
10
ПРИЛОЖЕНИЕ А
(справочное) Таблица А.1 Цвет компонента или объекта (свойство Color)
Значение |
Цвет |
clBlack |
Черный |
clMaroon |
Темно-красный |
clGreen |
Зеленый |
clOlive |
Оливковый |
clNavy |
Темно-синий |
clPurple |
Фиолетовый |
cl Teal |
Сине-зеленый |
clGray |
Серый |
clSilver |
Серебряный |
clRed |
Красный |
clLime |
Ярко-зеленый |
clBlue |
Голубой |
clFuchsia |
Сиреневый |
clAqua |
Ярко-голубой |
clWhite |
Белый |
Таблица А.2 Системные цвета Windows, определяемые цветовой схемой
Значение |
Цвет для элемента |
clBackground |
фон окна |
clActiveCaption |
заголовок активного окна |
clInactiveCaption |
заголовок неактивного окна |
clMenu |
фона меню |
clWindow |
фон Windows |
clWindowFrame |
рамка окна |
clMenuText |
текст элемента меню |
clWindowText |
текст внутри окна |
clCaptionText |
заголовок активного окна |
clActiveBorder |
рамка активного окна |
clInactiveBorder |
рамка неактивного окна |
clAppWorkSpace |
рабочая область окна |
clHighlight |
фон выделенного текста |
clHighlightText |
выделенный текст |
clBtnFace |
кнопка |
clBtnShadow |
фон кнопки |
clGrayText |
недоступный элемент меню |
clBtnText |
текст кнопки |
Таблица А.3 Базовые свойства Color как шестнадцатеричные константы
Цвет |
|
Значение |
|
Цвет |
Значение |
|
Черный |
|
$000000 |
|
Синий |
$000080 |
|
Светло-синий |
|
$0000FF |
|
Зеленый |
$008000 |
|
Светло-зеленый |
|
$00FF00 |
|
Сине-зеленый |
$008080 |
|
Голубой |
|
$00FFFF |
|
Коричневый |
$800000 |
|
Светло-красный |
|
$FF0000 |
|
Темно-сиреневый |
$800080 |
|
Сиреневый |
|
$FF00FF |
|
Оливковый |
$808000 |
|
Светло-желтый |
|
$FFFF00 |
|
Темно-серый |
$808080 |
|
Белый |
|
$FFFFFF |
|
Светло-серый |
$C0C0C0 |
|
Таблица А.4 Выравнивание компонента внутри формы (свойство Align) |
||||||
|
|
|
|
|
|
|
Значение |
|
|
Расположение компонента |
|||
alNone |
Без выравнивания на месте размещения при создании программ |
|||||
|
(значение по умолчанию) |
|
|
|||
alTop |
Перемещение в верхнюю часть формы, ширина компонента становится |
|||||
|
равной ширине формы (высота не меняется) |
|
|
|||
alBottom |
Перемещение в нижнюю часть формы, ширина становится равной |
|||||
|
ширине формы (высота не изменяется) |
|
|
|||
alLeft |
Перемещение в левую часть формы, высота компонента сановится |
|||||
|
равной высоте формы (ширина неиз меняется) |
|
|
|||
alRight |
Перемещение в правую часть формы, высота становится равной высоте |
|||||
|
формы (ширина не изменяется) |
|
|
|||
alClient |
Компонент полностью занимает всю рабочую область формы |