Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на Pascal / Delphi / Методичка - Работа с компонентами библиотеки VCL в среде Delphi [22]

.pdf
Скачиваний:
75
Добавлен:
02.05.2014
Размер:
187.91 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ФАКУЛЬТЕТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

КАФЕДРА ЭВМ

Работа с компонентами библиотеки

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

Компонент полностью занимает всю рабочую область формы