preload
Янв 01

Массивы (arrays)
Массивы определяются следующим образом:

type chessFieldType = array[1..8, 1..8] of integer;

Этим выражением был задан новый тип - массив, размером 8 х 8 полей целочисленного типа. Можно задавать массивы в секции 'var':

type
chessFieldType = array[1..8, 1..8] of integer;
var
chessField: chessFieldType;

то же самое, что:

var
chessField: array[1..8, 1..8] of integer;

Следующий пример считает количество пустых клеток на шахматной доске:

type chessFieldType = array[1..8, 1..8] of integer;
var chessField: chessFieldType;
i, j, count: integer;
begin
...
{ Инициализация шахматной доски: заполнение некоторых клеток фигурами }
...
count := 0;
for i:=1 to 8 do
for j:=1 to 8 do
if chessField[i, j] = 0 then count := count + 1;
end.

MIDletPascal поддерживает массивы любой размерности. Вы можете использовать 1-, 2-х, или даже 10-размерные массивы (которые, правда, потребляют очень много памяти и нет уверенности в том, что они реально полезны).

При использовании массивов необходимо остерегаться попыток доступа к запредельным элементам массива. Например, следующий код вызовет падение мидлета:

var a:array[1..5] of integer;
begin
a[7] := 10; { a[7] не существует и здесь мидлет упадёт }
end.


Янв 01

Комбинированный тип (record)
Данная особенность языка позволяет создавать собственные типы данных, являющиеся совокупностью других типов. Например, если вы пишете игру, где игрок управляет персонажем на экране, вы вполне можете использовать комбинированный тип для описания позиции, здоровья и прочих параметров персонажа:

type heroType = record
positionX, positionY: integer;
health: integer;
end;

Чтобы создать переменную свежезаданного типа, используйте обычную формулировку в секции 'var':

var hero: heroType;

Также вы можете использовать созданный тип в качестве параметра, при описании процедур и функций:

function isHeroDead(hero: heroType): boolean;
begin
if (hero.health <= 0) then
isHeroDead := true;
else
isHeroDead := false;
end;

Новый тип может быть определен непосредственно в секции 'var':

var hero: record
positionX, positionY: integer;
health: integer;
end;

Чтобы получить доступ к отдельным элементам комбинированного типа, используйте оператор "." (точка):

...
{ передвигаем персонажа вправо }
hero.positionX := hero.positionX + 1;
...

Нельзя копировать впрямую из переменной в переменную данного типа:

var
a, b: record
x: integer;
end;
begin
...
a := b; { это - неправильно }
...
a.x := b.x; { нужно копировать каждый элемент комбинированного типа }
end.

Рекламное агентство Промо-зона - лучшие календари кубики трансформерв.


Янв 01

Тип resourceПри создании мидлета, вместе с классами в архиве JAR можно разместить различные файлы ресурсов приложения. Ресурсами можно распоряжаться, используя следующие процедуры и функции:


· openResource
· resourceAvailable
· closeResource
· readByte
· readLine


Пример:

var res   : resource;
byte  : integer;
line  : string;
index : integer;
begin
res := openResource('/data.txt');

if (resourceAvailable(res)) then
begin
byte := readByte(res);
line := readLine(res);

closeResource(res);
end;

showForm;
index := formAddString('Byte is: ' + chr(byte));
index := formAddString('Line is: ' + line);
delay(1000);
end.


Янв 01

Тип httpMIDletPascal предоставляет базовые вазможности для работы с HTTP. Соединения HTTP идентифицируются переменными соответствующего типа, 'http'. У HTTP следующий жизненный цикл:

· открытие подключения к удалённому web-серверу
· установка метода запроса http
· добавление полей-заголовков запроса (необязательно)
· добавление данных в тело запроса (только в случае, если запрос имеет тип POST)
· отправка запроса и ожидание ответа от сервера
· получение желаемых полей-заголовков из ответа
· получение данных ответа
· закрытие соединения


Следующий пример демонстрирует возможности соединения по HTTP:

var conn: http;
htmlBody: string;
contentType: string;
begin
if not openHttp(conn, 'http://www.google.com') then halt;
setHttpMethod(conn, GET);
addHttpHeader(conn, 'User-agent', 'MIDletPascal browser');
if sendHttpMessage(conn) <> 200 then halt;
htmlBody := getHttpResponse(conn);
contentType := getHttpHeader(conn, 'Content-type');
closeHttp(conn);
end.

Встроенный эмулятор не поддерживает соединения по HTTP. Для тестирования HTTP без телефона рекомендуется использовать эмулятор Wireless Toolkit от Sun.


Янв 01

Тип recordStore
Хранилище на мобильных телефонах аналогично файлам на компьютерах: приложения могут сохранять некие данные в хранилище и впоследствии получать обратно сохранённые данные. Как и файлы, хранилища идентифицируются по имени. Их нельзя группировать внутри каталогово и каждый установленный мидлет имеет доступ только к своим собственным хранилищам. В отличии от файлов, где данные сохраняются последовательно, хранилище больше напоминает массив, где каждая запись имеет свой собственный индекс.

var rs: recordStore;
index: integer;
name: string;
begin
// Записываем некие данные в хранилище
rs := openRecordStore('names');
index := addRecordStoreEntry(rs, 'John Smith');
closeRecordStore(rs);

// Считываем данные
rs := openRecordStore('names');
name := readRecordStoreEntry(rs, index);
closeRecordStore(rs);
end.

См. также:
openRecordStore, closeRecordStore, deleteRecordStore, addRecordStoreEntry, readRecordStoreEntry, deleteRecordStoreEntry, getRecordStoreSize


Янв 01

Тип command
Мидлеты J2ME не имеют кнопок в привычном виде как, например, приложения Windows. Вместо этого, пользователь может воспользоваться так называемыми "командами" (commands) для обеспечения "кнопочного" функционала.

Команды могут быть добавлены на форму или графический экран. Когда форма отображается на экране устройства (вызовом процедуры showForm), добавленные команды будут вставлены в форму. Если экран переключён в графическое представление (showCanvas), команды, связанные с формой будут убраны с экрана, вместо них появятся команды, ассоциированные с графическим дисплеем. Посмотрим на следующий пример:

var formCommand, canvasCommand: command;
begin
formCommand := createCommand('Show canvas', CM_SCREEN, 1);
canvasCommand := createCommand('Show form', CM_SCREEN, 1);

{ add the canvas form onto the canvas (the canvas is displayed by default) }
addCommand(canvasCommand);

{ switch to form display }
showForm;

{ add the form command to the form display }
addCommand(formCommand);

{ forever switch between the canvas and the form display }
while true do
begin
if getClickedCommand = formCommand then
showCanvas;
if getClickedCommand = canvasCommand then
showForm;
end;
end.

Устройства, не имеющие больших дисплеев, не все команды будут отображены на экране. Устройство само решает, какие (если есть) команды отобразить. Другие команды (с меньшим приоритетом) будут сгруппированы посредством своего рода выпадающего меню, которое доступно после нажатия соответствующих кнопок на клавиатуре устройства.

Некоторые устройства (например, мобильные телефоны Motorola) не отображают команду сразу после вызова addCommand; они будут "дожидаться" вызова процедуры repaint.


Янв 01

Тип image

Графические изображения представлены типом image. Функция loadImage загружает изображение из файла-ресурса в переменную данного типа.


Янв 01

Тип string

Тип string

Строковый тип (string) используется для представления текста и содержит последовательности символов. В отличии от строк в других диалектах Паскаля, строки в MIDletPascal не являются массивами символов. MIDletPascal имеет несколько процедур и функций для работы со строками. Следующие операторы применимы к данному типу:

· Операторы сравнения: =, <> (сравнение строк, чувствительное к регистру)
· Оператор сложения: + (вторым операндом может быть строка, целое число, символ или логический тип)

Взглянём на пример:

var text: string;
begin
text := 'It is now ' + getHour(getCurrentTime) + ' o''clock ';
drawText(text, 0, 0);
repaint;
delay(2000);
end.

Чтобы добавить в строку символ "кавычки" ('), вводите его в строке два раза подряд и в этом случае MIDletPascal не проинтерпретирует его как признак окончания строки.


Янв 01

Тип real

Тип real

Вещественный тип (real) представляет нецелые числа (десятичные дроби). Мобильные устройства не имеют аппаратной поддержки операций с реальными числами, потому MIDletPascal реализует программную эмуляцию. В силу этого, операции с реальными числами очень медленны - вы должны понимать, что приложения со сложной математикой могут исполняться очень долго. Использование реальных чисел также увеличивает результирующий размер мидлета: он может "подрасти" до 5 килобайт дополнительно.

Следующие операторы могут использоваться реальными числами:

· Операторы сравнения: =, <>, <, >, <=, >=
· Операторы сложения/вычитания: +, -
· Операторы умножения/деления: *, /

Также MIDletPascal предоставляет около 20 функций для работы с реальными числами и предопределенную константу 'pi'.


Янв 01

Тип integer

Тип integer

Целочисленный тип (integer) представляет любое целое число между -2,147,483,647 и 2,147,483,647. Следующие операторы применимы с целочисленным типом:

· Операторы сравнения: =, <>, <, >, <=, >=
· Операторы сложения/вычитания: +, -
· Операторы умножения/деления: *, /, div, mod. Нет никакой разницы между "/" и div. mod возвращает остаток от целочисленного деления.