
- •18.1 Редактор кода
- •18.2 Операторы ввода-вывода для Windows-программ
- •18.3 Использование компонентов Label , Edit для ввода-вывода
- •18.4 Пример запроса, ввода, вывода для Win -программы
- •18.5 Преобразование строк
- •18.6 Применение функций ShowMessage, MessageBox для ввода-вывода
- •19.1 Пример программы
- •Void _fastcall tForm1::Button1Click(………)
19.1 Пример программы
Разработаем программу-«страшилку». Имея заголовок «Программа бесплатного доступа в Интернет », она будет работать с окнами и полосой прокрутки, а в конце выдавать сообщение, что диск С форматирован. Конечно, форматирования диска при этом не будет.
Запустим Builder и выберем имена для текста на С++ и проекта
( см. раздел 17.6). Создадим на главной форме надпись Label1,
кнопку Button1 и два окна редактирования Edit1, Edit2. Размеры и расположение
этих объектов легко изменяются (отметить и использовать стрелки). Укажем здесь,
что размеры объектов, как и ряд других параметров, можно изменять тремя способами:
1) растягивая или сжимая объекты на экране с помощью курсора, 2) изменяя значения
их свойств в Инспекторе объектов, 3) изменяя значения их свойств в программе.
Поместим в нижнюю часть формы компонент ScrollBar – это горизонтальная (свойство Kind) полоса прокрутки. Положение ползунка будет изменяться в течение
нескольких секунд от 0 до 100%, имитируя исполнение программы. Чтобы получить такое время работы, используем стандартную функцию задержки sleep языка С, для которой нужен заголовочный файл dos.h. Функция sleep ( ) имеет один целый аргумент
и реализует задержку в сек.
Пусть форма будет иметь следующий вид.
- - - - - - - - - - - - - - - -
Label1
Button1
Edit1
Edit2
ScrollBar1
SSSs
- - - - - - - - - - - - - - - -
Рис. 19.1 Форма и объекты на ней.
В Инспекторе объектов в свойство Caption надписи Label1 занесем название
«Программа бесплатного доступа в Интернет».
Далее щелкнем 2 раза по кнопке и запишем в функцию Button1Click текст программы. Кроме метода Button1Click, используем также конструктор TForm1::TForm1.
Заготовка для него расположена чуть выше текста функции Button1Click.
Запишем в него только 2 оператора ( см. ниже). Эти операторы при создании формы будут сразу выполнены.
( Вместо конструктора TForm1::TForm1 можно использовать метод TForm1::FormCreate. Его можно вызвать, щелкнув дважды в любом месте формы, и затем записать в эту функцию те же два оператора.)
#include <stdio.h> // for sprintf
#include <fstream.h>
#include <dos.h> // for sleep
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1 (TComponent* Owner) : TForm(Owner)
{ Form1->Edit1->Text=" Нажать " ;
Form1->Edit2->Text=" кнопку ";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click (TObject *Sender)
{ int nend= 15; // столько шагов ползунка
int secDelay= 1; // задержка ползунка в сек
char s[80];
ShowMessage("Gratis!"); // gratis (лат.)=бесплатно
ofstream cout ("d:\\Papka\\myz1.txt", ios::app);
if (!cout) ShowMessage("No file");
sprintf (s, " nend =%i secDelay=%i", nend, secDelay);
Application->MessageBox ( s, "From Button1Click", 0);
for ( int j=0; j<=nend; j++ ) // цикл для ползунка
{ sleep (secDelay);
int jpolz = 100.* ( j / float(nend) );
ScrollBar1 ->Position = jpolz;
}
Edit1->Text= "Извините!"; //::::: или Edit1->TEdit::Text
Edit2->Text= " Выполнено форматирование диска С ! Sic volo!";
Beep( );
Form1-> Canvas->Pen->Color = clBlack;
Canvas->Brush->Color = clRed;
Canvas->Ellipse(450,350,550,400); Beep( );
}
//---------------------------------------------------------------------------
Многие из операторов уже рассматривались ранее, и здесь рассмотрим
только новые и сложные.
Имя TForm1 – это имя класса, для которого создаются конструктор
TForm1 :: TForm1 и метод TForm1 :: Button1Click.
Модификатор _fastcall показывает, что аргументы передаются в функцию
через процессорные регистры, что ускоряет вызов.
TObject - базовый класс для всех классов библиотеки VCL.
*Sender – это указатель на объект - «отправитель» вызова.
Имя потока cout используется в этой программе для вывода в файл.
Свойство Position определяет положение ползунка в объекте ScrollBar1:
ScrollBar1->Position = jpolz;
здесь jpolz – это целая переменная с диапазоном изменения от 1 до 100.
При запуске программы первым выполнится конструктор, т.е. функция
TForm1 :: TForm1( …..) , т.к. он связан с главной формой. Конструктор выведет
в окна Edit1, Edit2 указанные тексты ( свойство Text), которые заменят
те тексты, которые были в этих окнах при проектировании.
После нажатия кнопки появится небольшое окно-сообщение ShowMessage
с именем проекта в верхней части, словом "Gratis!" ниже и с кнопкой ОК.
Нажав OK, получим следующее сообщение от программы. Если подключение файла myz1.txt произойдет нормально, то следующим сообщением будет окно с заголовком
“From Вutton1Click”. В нём появятся два числа nend, secDelay и кнопка ОК.
Значения nend, secDelay определяют количество шагов ползунка для отображения на линейке и время задержки для каждого его положения.
Далее нажать ОК и на экране в полосе прокрутки будет двигаться ползунок вправо. В его конечном положении текст в окнах Edit1, Edit2 изменится.
Используя свойства Font кнопок и окон, можно изменить вид
всех выводимых на экран текстов.
Перейдём к заключительным операторам программы, в которых используется
свойство Canvas. Этим свойством обладают многие компоненты, например, TForm, TImage, TPaintBox, и оно соответствует поверхности (канве, холсту) для рисования
на ней. Рисовать можно пером (Pen) или кистью (Brush). Это сложное свойство,
которое само обладает рядом свойств. Обращение к конкретным свойствам
требует использования указателя на указатель, т.е. двух или более стрелок.
Примерами такого обращения являются операторы установки цветов пера и кисти
Form1-> Canvas->Pen->Color = clBlack; Canvas->Brush->Color = clRed;
Здесь выбраны черный и красный цвета. Следует обратить внимание, что имя объекта
Form1 ( это основная форма) можно здесь опускать.
Метод Ellipse( . . .) позволяет нарисовать эллипс с указанными координатами в пикселах. Контур эллипса рисуется пером выбранного цвета, а закрашивается кистью.
В классе ТCanvas есть много других методов для получения графических изображений, например, Draw, LineTo, MoveTo, Pie, Rectangle, TextOut.
Для получения помощи в системе нужно указать слово или объект
и нажать клавишу F1. Для указания нужного окна можно использовать клавишу TAB.
Исполняемый exe-файл, полученный после завершения работы,
- это Windows-приложение, и его можно переносить на любые ПК без системы Builder.
В заключение этого раздела ещё несколько слов о функции sleep.
Эта стандартная функция реализует задержку в сек. Для миллисекунд аналогичная функция имеет имя delay. Обе функции в Builder C++ считаются устаревшими ( англ. obsolete ) и выбраны здесь для упрощения программы. В системе Builder для интервалов времени используется класс TTimer из раздела System палитры компонентов. Здесь его рассматривать не будем, но рекомендую вам попытаться самостоятельно модернизировать рассмотренную программу с применением компонента Timer. Этот таймер, если он включён, отсчитывает время независимо от логики приложения и процессов в ОС.
19.2 О выполнении лабораторной работы 5
Задание: разработать Windows-приложение для своей задачи.
Порядок выполнения лабораторной работы приводится в методических указаниях
и здесь кратко рассмотрим только основные этапы.
Пусть есть программа на С++, состоящая только из операторов #include и функции
main.
Начнем с разработки интерфейса пользователя, т.е. с создания формы с объектами на ней. Пусть программа будет запускаться кнопкой, а ввод-вывод осуществляться в окна Edit.
1. Запустить Builder. Появится главная форма Form1.
Это уже готовый к доработке проект и его нужно предварительно сохранить.
2. Сделать заголовком формы свою фамилию. Для этого в Инспекторе объектов
ввести свою фамилию в поле Caption для формы Form1.
3. Создать объект “стандартная кнопка” на форме.
Для этого щелкнуть по значку Button на палитре компонентов и затем щелкнуть на форме в том месте, где сразу появится кнопка с надписью Button1.
4. Изменить надпись на кнопке.
5. Создать также окна Edit1, Edit2, …, если в программе будут вводиться или выводиться числа.
Переходим к составлению программы, которая будет работать при нажатии кнопки.
6. Щелкнуть 2 раза по кнопке и сразу появится текст на С++. Это заготовка для функции, которая будет запускаться при нажатии кнопки.
Она имеет заголовок