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

Лабник по СПО

.pdf
Скачиваний:
9
Добавлен:
05.06.2015
Размер:
1.59 Mб
Скачать

Создание проекта

Запускаем систему программирования CodeGear RAD Studio, выбираем среду программирования С++Builder или Delphi и создаём новый проект типа VCL Forms Application. Сохраняем проект в подготовленной заранее папке, присваиваем модулю имя

UnWork1, а проекту - имя Work1.

Активируем форму проекта, выделяем в окне инспектора объектов свойство Name, присваиваем форме имя fmWork1. Имя формы не должно совпадать с именем файла модуля формы. Вводим заголовок первой формы Работа №1 - создание приложения. Форма 1. Проверяем работу программы.

Для исследования взаимодействия форм, созданных в одном проекте, необходимы как минимум две формы.

Командой FilegNewgForm-Delphi или FilegNewgForm-C++ Builder создаём вторую форму, вводим имя второй формы fm2Work1, вводим заголовок второй формы Форма №2 работы №1. Для того чтобы вторая форма была видна, в её свойстве Visible устанавливаем значение True. Командой FilegSave As... сохраняем модуль второй формы под именем Un2Work1. Проверяем работу программы, убеждаемся, что обе формы видны.

Размещаем на формах кнопки, редакторы и метки. Четыре кнопки, две метки и три редактора помещаем на главную форму (рис.1.12), две кнопки - на вторую форму

(рис.1.13).

Рис.1.12. Форма 1 проекта Work1

Рис.1.13. Форма 2 проекта Work1

21

PDF created with pdfFactory Pro trial version www.pdffactory.com

Изменяем заголовки кнопок на Кн1, Кн2, Кн3, Кн4, Ф2Кн1 и Ф2Кн2, имена кнопок не изменяем. В свойства Text всех редакторов главной формы добавим строку Text. В тексты редакторов второй формы введём строки: Редактор 1 формы 2 и Редактор 2 формы 2. Проверяем работу программы.

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

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

Текст программы на языке Delphi

Убедившись, что проект создан, программа запускается и обе формы проекта видны, приступаем к написанию текста программы.

Объявляем переменную Ch1 типа String в разделе Public класса TfmWork1. Вне класса объявляем строковую константу Ch2, со значением Ch2 не член класса. Переменную Ch1 не инициализируем, поскольку переменные члены класса не могут инициализироваться при объявлении.

Public

Ch1 :String; End;

Var

fmWork1: TfmWork1;

Const Ch2=' Ch2 не член класса ';

Инициализацию переменной Ch1 производим в обработчике события формы OnCreate. Для создания процедуры выбираем в инспекторе объектов событие формы OnCreate, и вносим в заготовку процедуры FormCreate необходимые операторы.

Procedure TfmWork1.FormCreate(Sender: TObject);

Begin Ch1:=' Ch1 член класса формы ' End;

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

Создаём процедуру Pr1, которая должна читать текст из редактора Edit1, объединять его с текстовой константой Ch1 и выводить объединённый текст на метку Label1. Процедуру Pr1 создаём как члена класса формы. Написание процедуры начинаем с написания прототипа в секции Public.

Public

22

PDF created with pdfFactory Pro trial version www.pdffactory.com

Ch1 :String;

Procedure Pr1(St :String); End;

Переменная St является формальным параметром, заменяемым фактическим параметром при вызове процедуры. После объявления процедуры составляем её описание. В заголовке описания, к имени процедуры члена класса формы нужно добавить имя класса владельца процедуры. Если написать свойство Caption без имени метки, то текст будет выведен в заголовок формы.

Procedure TfmWork1.Pr1(St :String); Begin Label1.Caption := St End;

При написании оператора не следует весь текст набирать посимвольно. После набора имени объекта ставим точку, ждём появления списка свойств объекта (рис.1.14) и выбираем требуемое свойство.

Рис.1.14. Окно выбора свойств объекта в среде программирования Delphi

Встроенная программа, подсказывающая имена свойств, событий и методов объектов, называется Знаток кода - Code Insight.

Замечание. Если после набора имени объекта и постановки точки не появляется список свойств, значит, в тексте программы допущена ошибка. Либо допущена ошибка в имени объекта, или объекта ещё нет в проекте, или процедура член класса не объявлена в классе.

Для исключения ошибок в именах имена объектов лучше копировать из свойства Name инспектора объектов.

В обработчик события OnClick первой кнопки Button1 записываем вызов процедуры Pr1. В качестве фактического параметра записываем результат операции объединения переменной Ch1, символа "+" и текста редактора Edit1.

Procedure TfmWork1.Button1Click(Sender: TObject); Begin Pr1(Ch1+' + '+Edit1.Text) End;

После написания текста процедуры проверяем правильность вывода текста на метку.

23

PDF created with pdfFactory Pro trial version www.pdffactory.com

Если всё правильно, создаём процедуру Pr2 как не члена класса формы. Написание процедуры начинаем с объявления процедуры вне класса формы.

Var

fmWork1: TfmWork1;

Const Ch2=' Ch2 не член класса ';

Procedure Pr2(St :String);

После объявления процедуры составляем её описание. Так как процедура Pr2 объявлена вне класса формы, то при вызове метки, являющейся членом класса формы, нужно указать имя объекта владельца метки.

Procedure Pr2(St :String);

Begin fmWork1.Label2.Caption := St End;

Затем в обработчик события OnClick второй кнопки Button2 записываем вызов процедуры Pr2. В качестве фактического параметра записываем результат операции объединения переменной Ch2, символа "+" и текста редактора Edit2.

Procedure TfmWork1.Button2Click(Sender: TObject); Begin Pr2(Ch2+' + '+Edit2.Text) End;

Проверяем работу кнопки и добавляем операторы для вывода текста на поверхность формы.

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

Procedure TfmWork1.Button2Click(Sender: TObject);

Begin

With Canvas Do

Begin

Font.Color:= clGreen;

//Цвет шрифта.

Brush.Color:=clYellow;

// Цвет фона.

Font.Size:=20;

//Размер шрифта.

Font.Style:=[fsBold, fsItalic]

//Стиль шрифта.

End;

Canvas.TextOut(10,10,Ch2+' + '+Edit2.Text);

Pr2(Ch2+' + '+Edit2.Text)

End;

24

PDF created with pdfFactory Pro trial version www.pdffactory.com

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

Создаём процедуру Pr3 без прототипа. Так как процедура Pr3 не является членом класса, то для обращения внутри процедуры к форме необходимо указать имя формы.

Procedure Pr3(St :String);

Begin

fmWork1.Caption:=St+' без прототипа'

End;

В процедуру Button3Click третьей кнопки вводим вызов процедуры Pr3. Проверяем вывод текста в заголовок формы. Проверяем, будет ли вызываться процедура Pr3 кнопкой Button3, если описание процедуры Pr3 поместить после описания процедуры Button3Click.

Procedure TfmWork1.Button3Click(Sender: TObject);

Begin

Pr3(Edit2.Text+' + '+Ch2)

End;

Возможны три способа программного нажатия кнопки по изменению текста редактора

Edit1.

Первый способ. Вызов процедуры Button1Click с именем кнопки.

Procedure TfmWork1.Edit1Change(Sender: TObject);

Begin

Button1Click(Button1)

End;

Второй способ. Вызов процедуры Button1Click с записью вместо имени служебного слова

Sender.

Procedure TfmWork1.Edit1Change(Sender: TObject);

Begin

Button1Click(Sender)

End;

Третий способ. Прямое обращение к событию кнопки по имени.

Procedure TfmWork1.Edit1Change(Sender: TObject);

Begin

Button1.Click

End;

25

PDF created with pdfFactory Pro trial version www.pdffactory.com

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

Implementation

Uses Un2Work1;

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

Uses UnWork1;

Делаем двойной щелчок по четвёртой кнопке и создаём оператор, записывающий текст на метку Label1 второй формы. Перед именем метки добавляем имя второй формы.

Procedure TfmWork1.Button4Click(Sender: TObject);

Begin

fm2Work1.Label1.Caption:='Вывод текста на метку формы 2'

End;

Проверяем, будет ли работать процедура Button4Click, если удалить Uses со ссылкой на модуль Un2Work1.

Организуем вызов процедур Pr1 и Pr2 модуля UnWork1 кнопками Button1Click и Button2Click, помещёнными на вторую форму. Для того чтобы было видно, как работает вызов процедур первой формы со второй формы, выведем на метки сумму текстов двух редакторов, находящихся на разных формах.

Procedure Tfm2Work1.Button1Click(Sender: TObject);

Begin

fmWork1.Pr1(Edit1.Text+' + '+fmWork1.Edit1.Text)

End;

Procedure Tfm2Work1.Button2Click(Sender: TObject);

Begin

Pr2(fmWork1.Edit2.Text+' + '+Edit2.Text)

End;

Попробуем со второй формы вызвать процедуру Pr3. Убедимся, что это невозможно.

Создадим у первой и второй кнопок первой формы подсказки, поясняющие действия кнопок. Для этого в свойства Hint данных кнопок введём тексты Вызов процедуры Pr1 и Вызов процедуры Pr2. В свойства кнопок ShowHint введём значения True. При подведении

26

PDF created with pdfFactory Pro trial version www.pdffactory.com

курсора к кнопке должны появляться соответствующие подсказки. По умолчанию подсказки имеют жёлтый фон и исчезают через 1,5 с.

Цвет фона, время показа подсказки и время между моментом подведения курсора к объекту и появлением подсказки можно задавать. Изменение параметров подсказки произведём операторами, записанными в процедуру FormCreate, в этом случае параметры подсказки будут задаваться при каждом создании формы.

Цвет фона подсказки задаётся оператором: Application.HintColor := clWhite;

Время показа подсказки в миллисекундах задаётся оператором: Application.HintHidePause := -1;

Если задать значение HintHidePause равным –1, то подсказка не будет закрываться, пока курсор не уйдёт с объекта.

По умолчанию подсказки появляются не сразу, а с задержкой на 50 мс, после подведения курсора к объекту. Время задержки можно задать оператором: Application.HintPause := 0;

Обычно подсказка содержит короткий текст, чтобы не занимать много места рядом с объектом, но можно расширить это пояснение в любом месте экрана дополнительным текстом. Длинное сообщение можно поместить в строку Hint сразу после короткого, отделив его символом "|", например:

Подсказка | Длинное сообщение

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

Application.OnHint:= ShowLongHint;

Данное событие возникает в момент появления подсказки. По этому событию длинное сообщение можно вывести в любом объекте, способном отображать текст, например, в метке, на панели или в заголовке формы с помощью процедуры ShowLongHint. Прототип процедуры ShowLongHint создаём в секции Public.

Procedure ShowLongHint(Sender: TObject);

Потом создаём описание процедуры.

Procedure TfmWork1.ShowLongHint(Sender: TObject);

Begin

Label2.Caption := Application.Hint

End;

27

PDF created with pdfFactory Pro trial version www.pdffactory.com

Для вывода длинной части подсказки можно использовать невизуальный компонент типа TApplicationEvents. Устанавливаем на форму объект ApplicationEvents1 и создаём обработчик события OnHint этого объекта. В этом случае не требуется создавать свою процедуру ShowLongHint. Оператор вывода подсказки записываем в процедуру

ApplicationEvents1Hint.

Procedure TfmWork1.ApplicationEvents1Hint (Sender: TObject);

Begin

Label2.Caption := Application.Hint

End;

Для изменения значка формы нажимаем на кнопку с тремя точками, расположенную в правой части свойства формы Icon, и загружаем рисунок с расширением *.ico. В интегрированной среде CodeGear RAD Studio 2007 не предусмотрен графический редактор для создания икон, поэтому надо вызвать отдельный редактор Icofx или другой редактор, позволяющий создавать файлы с расширением *.ico. Стандартный размер иконы для формы 16×16 пикселей.

Стандартный размер иконы для проекта 32×32 пикселя. Икона для значка проекта и ярлыка программы вводится в диалоговом окне Project Options командой

ProjectgOptionsgApplicationgLoadIcon.

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

Procedure Tfm2Work1.FormCloseQuery

(Sender: TObject; Var CanClose: Boolean);

Begin fmWork1.Close

End;

Можно получить те же результаты, установив на вторую форму кнопку Выход и введя в

неё команду на закрытие программы. В этом случае при закрытии второй формы кнопкой

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

Procedure Tfm2Work1.ClosePrClick(Sender: TObject);

Begin

Close;

28

PDF created with pdfFactory Pro trial version www.pdffactory.com

fmWork1.Close

End;

Проектирование приложения на языке С++

Убедившись, что проект создан и запускается и обе формы проекта видны, приступаем к написанию текста программы.

В заголовочном файле UnWork1.h объявляем переменную Ch1 типа AnsiString в разделе public класса TfmWork1. Вне класса объявляем переменную Ch2, со значением Ch2 не

член класса.

 

public:

// User declarations

__fastcall TfmWork1(TComponent* Owner); AnsiString Ch1;

};

AnsiString Ch2 = " Ch2 не член класса ";

Инициализацию переменной Ch1 производим при создании главной формы в обработчике события формы OnCreate, поскольку переменные члены класса не могут инициализироваться при их создании. Для создания заготовки функции выбираем в инспекторе объектов событие формы OnCreate, и вносим в заготовку функции FormCreate оператор инициализации переменной Ch1.

void __fastcall TfmWork1::FormCreate(TObject *Sender)

{

Ch1 = " Ch1 член класса ";

}

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

Создаём функцию Pr1, которая должна читать текст из редактора Edit1, объединять его с текстовой константой Ch1 и выводить объединённый текст на метку Label1. Функцию Pr1 создаём как члена класса формы. Написание функции начинаем с создания её прототипа в секции public заголовочного файла.

public: // User declarations __fastcall TfmWork1(TComponent* Owner); AnsiString Ch1;

void Pr1(AnsiString St);

};

29

PDF created with pdfFactory Pro trial version www.pdffactory.com

После объявления функции составляем её описание. void TfmWork1::Pr1(AnsiString St)

{

Label1->Caption = St;

}

Для исключения ошибок в именах имена объектов лучше копировать из свойства Name объекта в инспекторе объектов.

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

При написании операторов не следует весь текст набирать посимвольно. После набора имени объекта ставим стрелку, ждём появления списка свойств объекта (рис.1.15) и выбираем требуемое свойство.

Рис.1.15. Окно выбора свойств объекта в системе С++ Builder

Встроенная программа, подсказывающая имена свойств, событий и методов объектов, называется Знаток кода - Code Insight.

Замечание. Если после набора имени объекта и постановки стрелки не появляется список свойств, значит, в тексте программы допущена ошибка. Либо допущена ошибка в имени объекта, или объекта ещё нет в проекте, или функция, описываемая как член класса, не объявлена в классе.

В обработчик события OnClick первой кнопки Button1 записываем вызов функции Pr1. В качестве фактического параметра записываем строку, полученную в результате операции объединения переменной Ch1, символа "+" и текста редактора Edit1.

void __fastcall TfmWork1::Button1Click (TObject *Sender)

{

Pr1(Ch1+" + "+Edit1->Text);

}

30

PDF created with pdfFactory Pro trial version www.pdffactory.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]