18.4 Пример запроса, ввода, вывода для Win -программы
При выполнении лабораторной работы в системе Builder во многих задачах нужен запрос, ввод строки из окна и вывод результата в другое окно.
Запрос должен появиться на форме до нажатия кнопки и поэтому он записывается в одной из функций, связанных с формой, например, в конструкторе TForm1 или функции FormCreate. Обычно для запросов используют надписи, т.е. компоненты TLabel. Пример запроса:
Label1 -> Caption = " Введите строку в окно и нажмите кнопку";
По запросу вводится строка в окно, например, в Edit1, и только после этого
нажимается кнопка для запуска метода Button1Click.
Приведем примеры применения метода Button1Click для ввода, обработки и вывода строки. Пусть во введённой строке нужно изменить первые два символа и затем вывести полученную новую строку.
В первом примере не будем использовать строковые функции
для изменения строки ss и поэтому будет работать следующий простой вариант
void _ _fastcall TForm1:: Button1Click (TObject * Sender) {
String ss = Edit1-> Text ; ss[1] = ' * '; ss [2] = ' # ' ; Edit2->Text = ss ; }
Во втором примере полагаем, что нужны обычные строковые функции для строки ss и для этого объявим новую строку с указателем Mci. Указатель Mci позволяет работать со String-строкой как с обычной символьной строкой (char *), т.к. метод c_str( ) выполняет преобразование строки ss в Mci. Для строки Мсi можно применять обычные строковые функции языка С с заголовочным файлом string.h .
void _ _fastcall TForm1:: Button1Click (TObject * Sender) {
String ss ; ss = Edit1->Text ;
char * Mci ; Mci = ss .c_str ( ) ; / / далее любые функции для C
Mci[0] = ' * '; Mci [1]= ' # ' ; / / пример обработки строки Mci
Edit2->Text = Mci ;
}
Память для строки выделяет конструктор класса String при создании объекта ss.
Результаты работы обеих программ совпадают - будет выведена изменённая строка.
18.5 Преобразование строк
Для получения строк класса AnsiString из других типов можно использовать конструкторы класса AnsiString. Их много и они перегружены. Например,
int m =25; String st (m ); Edit1 ->Text = st;
float x = 1.45; String st2 (x ); Edit2 ->Text = st2;
Здесь объявляются объекты st, st2 c инициализацией их, и для этого автоматически вызываются конструкторы, см. раздел 15.4.
Для преобразования чисел в строки и обратно можно использовать функции
StrToInt (String ), StrToFloat (String ), IntToStr (int ), FloatToStr (float )
Например, оператор
m= StrToInt (Edit1 ->Text) ;
выполнит ввод значения m из окна Edit1, а оператор
Edit2 ->Text= IntToStr(m+100) ;
выведет значение ( m+100) в окно Edit2.
В старших версиях можно последний оператор записать как Edit2 ->Text = m+100;
Для строк класса АnsiString можно использовать различные перегруженные операции, например, при выводе соединять в одной строке несколько строк
знаком плюс . Пример:
Label1-> Caption = "Students: " + Edit1->Text + " " + Edit2->Text ;
Edit3-> Text = String (_ _DATA_ _) + " " + String (_ _TIME_ _) ;
Последний оператор выводит дату и время.
Рассмотрим другие способы получения строк.
Преобразование целого числа j в обычную строку ss выполняет
часто применяемая функция itoa c прототипом в <stdlib.h>:
char * itoa ( int j, char *ss, 10);
где 10 - это основание десятичной системы счисления, т.к. возможны и другие.
Для преобразования строк классов string и AnsiString в обычные строки
можно использовать метод c_str ( ):
string a ; Edit3 -> Text = a . c_str ( );
18.6 Применение функций ShowMessage, MessageBox для ввода-вывода
Eсть очень простая функция ShowMessage для вывода строки str в окно, заголовком которого является имя выполняемого приложения:
ShowMessage ( str);
Для вывода текста можно также вызвать метод MessageBox, который имеет 3 аргумента:
Application -> MessageBox ( “ текст ”, “заголовок окна ”, 0 );
Здесь текст и заголовок могут быть любыми. Имя Application является
указателем на объект, которым является вся ваша программа. Последний параметр определяет вид окна сообщений и при его нулевом значении в окне есть кнопка ОК. Возможны и другие значения этого параметра, например, 1, 2, 3, 4, 5. Пример:
Application -> MessageBox ( “ Значения: ”, “ REZ-T from vst.cpp ” ,0 );
Эту функцию можно использовать и для вывода чисел, но числа должны быть преобразованы в строку, например, с помощью функции sprintf из языка С. Эта функция выполняет преобразование с учетом формата. Она уже рассматривалась в разделе 13.2 и использовалась в С-программе построения графика. Её вызов таков:
sprintf ( str, “ упр.инф. “, значения );
например, sprintf ( str, “ k= % i x=%5.2f \n“ , k , x );
Здесь str – это строка символов, т.е. это либо символьный массив, либо указатель. Для функции sprintf нужно подключить заголовочный файл <stdio.h> . После такого преобразования можно в одно окно MessageBox выводить несколько чисел:
Application -> MessageBox ( str, “ Получено: ” , 0 );
Рассмотренный метод MessageBox c тремя аргументами входит в библиотеку VCL системы Builder. В библиотеке Windows API есть такая же функция, но у неё четыре аргумента.
//---------------------------------------------------------------------------
Многие из операторов уже рассматривались ранее, и здесь рассмотрим
только новые и сложные.
Имя 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
- 10.3 Операторы управления
- 10. 4 Оператор мультиветвления switch
- 10.6 Применение функции printf для форматирования
- 11.1 Графические программы
- 11.2 Построение символьного графика
- 11.4 Построение графика в графическом режиме
- 12.1 Передача данных для построения графика в MathCad
- 12.4 Указатели
- 12.5 Описание указателей
- 12.6 Указатели для массивов и строк
- 13.3 Оператор динамического выделения памяти new
- Void main ( ) {
- Void tab( ); };
- Void main ( ) {
- 15.1 Класс объектов, элементы класса
- 15.2 Доступ к элементам класса
- 15.3 Вызов элементов класса
- 15.4 Конструкторы классa
- 15.5 Пример класса Tkplk
- 16.1 Наследование
- 16.2 Полиморфизм
- 16.3 О перегрузке функций и операций
- 17. 1 Среда программирования и библиотека vcl
- 17.2 Консольное приложение в Builder
- При выполнении лабораторных работ в дисплейном классе используется
- 17.5 Вид экрана в builder
- 17.6 Работа с проектом в системе Builder
- 18.1 Редактор кода
- 18.4 Пример запроса, ввода, вывода для Win -программы