Сейчас мы попробуем создать более сложное приложение, использующее визуальное оформление(форму). Пользователь должен будет ввести свое имя и возраст, а наша программа выведет их на экран.
Нам понадобятся 2 переменные типа Integer(это будут ID объектов-текстовых полей), 2 типа String, и одна типа Command(кнопка).
Пропишем их в поле var
Код:
var
itemid1,itemid2:Integer;
name,age:string;
cmd:command
Для начала работы с формами нужно перейти в режим формы командой ShowForm (чтобы вернуться обратно в режим рисования введите команду ShowCanvas)
Добавим первое текстовое поле на экран:
itemid1:=FormAddTextField('Введите ваше имя', '', 20, TF_ANY);
FormAddTextField - добавляет текстовое поле на экран. Параметры-Название(будет написано над полем),Что будет написано в поле стандартно, позиция относительно надписи, и флаг.
Первый параметр-Введите ваше имя,второй оставим пустым,третий желательно оставить 20, хотя можете поэкспериментировать.
Относительно флагов: существует несколько флагов текстового поля. TF_ANY-можно вводить любые символы,TF_NUMERIC-только числа, TF_PASSWORD-все символы заменяются символом *.
ietmid1-это ИД нашего объекта-текстового поля.
Заметьте: Repaint Вводить ненужно, т.к. мы работаем с формой.
Итак, продолжим.
Аналогично добавим второе текстовое поле, но уже с флагом TF_NUMERIC
itemid2:=FormAddTextField('Введите ваш возраст', '', 20, TF_NUMERIC);
Теперь добавим кнопку.
cmd:=CreateCommand('OK',CM_OK,1);
CreateCommand-добавляет кнопку на форму.
Первый параметр-надпись на кнопке, вторая-флаг, а третий параметр можно не трогать.
Отличие кнопки от текстового поля в том, что кнопку нужно дополнительной командой добавить на форму.
AddCommand(cmd)
В качестве параметра указываем ID этой кнопки, который хранится в переменной cmd.
Теперь нам нужно сделать задержку, чтобы приложение не закрывалось раньше времени. Однако delay тут уже не поможет-ведь пользователь может и не успеть написать текст, или напишет и будет ждать. Для задержки мы будем использовать кнопку и цикл repeat...until.
С помощью процедуры GetClickedCommand мы можем узнать ID последней нажатой клавиши или кнопки.
Итак, пишем цикл:
repeat Delay(100) until GetClickedCommand=cmd
То есть: повторять команду Delay(100)-задержка 0,1 секунды до тех пор, пока id нажатой кнопки не будет равен cmd-т.е. попросту пока мы не нажмем кнопку.
После того, как кнопка была нажата, нужно считать данные с текстовых полей.
Для этого существует процедура FormGetText(ID) - в ID нужно указывать ИД текстового поля.
Итак, читаем данные в переменные name и age:
name:=formgettext(itemid1)
age:=formgettext(itemid2)
Теперь нужно организовать вывод текста на экран.
Для начала переключимся в режим холста(рисования) командой
ShowCanvasТеперь выведем данные на экран командой DrawText, причем первую строчку сделаем красной, а вторую -синей:
SetColor(255,0,0)
DrawText('Ваше имя:'+name,0,0)
SetColor(0,0,255)
DrawText('Ваш возраст:'+age,0,30)
Не забудем перерисовать данные с "виртуального" экрана и поставим 10-секундую задержку:
repaint
delay(10000)
Готово! Полный листинг программы:
Код:
Program Forms;
var itemid,itemid2:integer;
cmd:command;
name,age:string;
Begin
ShowForm;
itemid:=FormAddTextField('Введите ваше имя:','',20,TF_ANY);
itemid2:=FormAddTextField('Введите ваш возраст:', '', 20, TF_NUMERIC);
cmd:=CreateCommand('OK',CM_OK,50);
AddCommand(cmd);
repeat
Delay(100);
until GetClickedCommand=cmd;
name:=formgettext(itemid);
age:=formgettext(itemid2);
ShowCanvas;
SetColor(255,0,0);
DrawText('Ваше имя: '+name,0,0);
SetColor(0,0,255);
DrawText('Ваш возраст: '+age,0,30);
Repaint;
Delay(10000);
End.