Вступаем в контакт!
🕛 25.03.2008, 12:28
Ты уже написал своё первое приложение для мобилы на MIDLETPascal. Но там ничего особенного не происходило - просто текст на дисплее двигался, по нашему велению конечно. Это были основы Чудо-Языка : ты увидел структуру программы, познакомился с основными функциями. Теперь бы пора написать что-нибудь посерьёзнее, например форму. Простую форму для контактирования приложения с пользователем. Это всегда очень важно - ведь чтоб твоя прога была востребована, она должна быть простой в понимании и управлении, и даже самые сложные функции должны быть показаны пользователю, как простое нажатие на кнопочку. Ну, хватит трёпа лишнего, давай кодить! Открывай МобильныйПаскаль, создовай новый проект и доведи его до вида, показанного на Листинге. Листинг: program Form; var NameId, NumberId, AgeId : Integer; Name, Number, Age : string; cmdNext, cmdexit : command; begin showForm;//показываем форму //создаём элементы управления NameId := FormAddTextField('Enter your name', '', 20, TF_ANY); NumberId := FormAddTextField('Enter your phone', '', 20, TF_PHONENUMBER); AgeId := FormAddTextField('Enter your age', '', 20, TF_NUMERIC); //создаём команду(кнопку) cmdNext := createCommand('Next', CM_OK, 1); AddCommand(cmdNext); repeat until GetClickedCommand = cmdNext; //берём текст, введёный пользователем Name := FormGetText(NameId); Number := FormGetText(NumberId); Age := FormGetText(AgeId); //выводим информацию на дисплей ShowTextBox('Information', 'Hello ,' + Name+ ' Your age - ' + Age + ' Your Number - ' + Number, 200, TF_ANY); cmdExit := CreateCommand('Exit', CM_EXIT, 1); AddCommand(cmdExit); repeat delay(100); until GetClickedCommand = cmdExit; end. Это и есть сегодняшний пример. Простая прога с формой, на которой расположены элементы ввода. Юзер вводит туда свои данные, потом прога их анализирует и выводит всё в нужных местах. Давай попробуем разобраться, что мы тут понаписали? Блок Var - это блок объявления переменных, всё как в обычном Паскале. Здесь у нас введены три строковые пременные, две команды и три преременные, через которые будут создаваться поля ввода текста, т.е. это индификаторы. Сложно? Не сложнее чем всегда! Щас всё станет понятнее. Далее идёт главный блок begin...end. , в котором расположено тело программы. Всё начинается с процедуры ShowForm. Эта процедура выводит на дисплей форму, которая может содержать в себе ярлыки, картинки, поля текста и другие пользовательские элементы интерфейса. Именно на созданной форме мы и будем размещать наши поля ввода. Далее, собствено, идёт создание полей ввода функцией FormAddTextField. Давай посмотрим на неё поближе: function FormAddTextField(prompt, defaultValue: string; maxSize: integer; constraints:integer ):integer; Эта функция имеет четыре параметра:1. prompt : string. Это текст, который отобразится над полем ввода, то есть TITLE. 2. defaultValue: string Это текст, который будет отражён в новом поле ввода. Чтоб поле было пустое, ставь вместо параметра ''. 3. maxSize: integer; Это максимальное количество символов, которое пользователь сможет забить в поле ввода. 4. constraints:integer; Это ограничение ввода. Т.е. можно вводить только то, что здесь указанно. Например, номер телефона, значит вводиться будут только цифры, да и то определённое количество. Вот какие значения может принимать параметр constraints: * TF_ANY - можно писать любые знаки; * TF_EMAIL - только адресса электронной почты; * TF_NUMERIC - только числа; * TF_PHONENUMBER - можно вводить только номер телефона, в 10-ти значном формате; * TF_URL - только URL; * TF_PASSWORD - все знаки будут скрыты под звёздочками, типа пароль;
Дальше мы создаём команду (типа кнопку), функцией CreateCommand: function CreateCommand(label:string; commandType:integer; priority:integer): command; Эта функция имеет три параметра:
1. label:string; Это название кнопки. Название должно быть довольно коротким. 2. priority:integer; Это приоритет будущей кнопки. Чем меньше значение, тем больше приоритет. 3. commandType:integer; Это параметр определяет намерения команды. Например, надо создать кнопку "назад", значит ставим параметр в CM_BACK. Это чертовски повышает читабильность кода в большом проекте. Вот какие значения может принимать параметр commandType: * CM_SCREEN - любой тип команды. * CM_BACK * CM_CANCEL * CM_OK * CM_HELP * CM_STOP * CM_EXIT * CM_ITEM
В нашем случае кнопка будет подтверждть ввод пользователя, поэтому в качестве параметра commandType укажем CM_OK. Итак, мы создали форму, на ней три поля ввода с разной возможностью ввода : числа, буквы и номер телефона, ещё мы создали кнопку, по нажатию на которую нам надо двигаться дальше. Для этого применяем цикл repeat until GetClickedCommand = cmdNext; Функция function GetClickedCommand: command возвращает последнюю нажатую команду. Значит в программе ничего не будет происходить, пока юзер не нажмёт на кнопку "Next". А если он всё таки нажмёт на кнопку, то переменным мы присваиваем введённые в поля ввода значения, с помощью функции function FormGetText(textFieldID:integer):string. Эта функция возвращает значения, введённые в поле ввода, по индификатору элемента интерфейса. После работы с переменными, мы создаём и показываем полноэкранное текстовое поле процедурой : procedure showTextBox(title: string; initialContents: string; maxSize: integer; constraints: integer); которая имеет четыре параметра:
1. title: string; Название текстового пространноства. 2. initialContents: string; Это текст, который будет выведен сразу по созданию элемента. 3. maxSize: integer; Максимальное количество символов, которое может быть забито. 4. constraints:integer; Это ограничение ввода. Я уже про них говорил. Вот какие значения может принимать параметр constraints здесь: * TF_ANY - можно писать любые знаки; * TF_EMAIL - только адресса электронной почты; * TF_NUMERIC - только числа; * TF_PHONENUMBER - можно вводить только номер телефона, в 10-ти значном формате; * TF_URL - только URL;
С помощью этой процедуры ты можешь создать полноценный текстовый редактор на мобилу, а у нас этот элемент интерфейса используется только для отображения информации, которую ввёл пользователь. После того, как текст вывелся мы снова создаём команду и применяем цикл задержки. Всё очень просто! Теперь ты знаешь основные приёмы создания пользовательского интерфейса для приложений на мобилы. Но элементов, которые мы рассматрели может быть мало, поэтому я покажу тебе исходник более продвинутой формы, а разобраться в нём попробуй сам: program MegaForm; var stringID, textID, passID, imgID, gaugeID, choiceID, maleID, femaleID: integer; cmdExit: command; begin ShowForm; //создаём разные элементы управления stringID := FormAddString('Just some title'); textID := FormAddTextField('Enter name', 'Вася', 20, TF_ANY); passID := FormAddTextField('Enter password', '', 20, TF_PASSWORD); imgID := FormAddImage(LoadImage('/icon.png')); gaugeID := FormAddGauge('Choose your age', true, 100, 18); choiceID := FormAddChoice('Select your gender', CH_EXCLUSIVE ); maleID := ChoiceAppendString(choiceId, 'Male'); femaleID := ChoiceAppendString(choiceId, 'Female'); cmdExit := CreateCommand('Exit', CM_EXIT, 1); AddCommand(cmdExit); repeat until GetClickedCommand = cmdExit; end. Ну вот и всё, что хотел сказать.