Для начинающих
[16]
С этих статей вырасли все, кто сейчас программирует на MP. Именно с этих статей надо начинать новичку, качество у них не всегда хорошее, но почитать стоит.
|
Разбираем.Обьясняем
[1]
В этой категории обьясняем, разьясняем библиотеки,примеры,мидлеты и т.д.
|
Прочее
[4]
Прочее, что не касается программирования: как настроить MP, что нужно для работы и др...
|
Главная » Статьи » Midlet Pascal » Для начинающих |
Hello world. Когда вы программировали на Pascale, то писали прогу HelloWorld таким образом: program HelloWorld; begin Writeln("Hello world"); // Это не работает на языке MidletPascal !!! end. На экране компьютера прорисовкой текста занимается MS-DOS, поэтому в Pascale достаточно написать команду Writeln. В телефоне MS-DOS нет поэтому приходится прорисововать текст самому, но это не так сложно, как может показаться на первый взгляд. Для этого используется ф-я DrawText. program HelloWorld; begin DrawText("Hello world", 0, 0); Repaint; end. Если ты откомпилируешь эту программу и попробуешь её запустить, тебе покажется что программа не запускается, на самом деле программа запускается прорисовывает текст и завершает свою работу очень быстро и мы нечего не замечаем. Для того чтобы увидеть результат работы программы добавим процедуру Delay, которая заставит процессор бездействовать время заданное в скобках. Оно задается в миллисекундах. program HelloWorld; begin DrawText("Hello world", 0, 0); Repaint; Delay(2000); end. Процедура Repaint это медленная процедура которая прорисовывает такие процедуры как DrawText с буфера мобильного телефона, на его экран. Но использовать эту процедуру следует с осторожностью, не следует вызывать её очень часто, так как этим можно сильно замедлить работу мидлета, нею следует пользоваться только после того как нужный вид экрана сформирован в буфере программы. Тоесть например нужно вывести два предложения, будет неправильным после первой процедуры DrawText вызвать Repaint, и после второй с выводом второго предложения, также вызвать процедуру Repaint. Нужно было сначала использовать две функции DrawText, а затем Repaint. Определение нажатия клавиш MIDletPascal предоставляет две функции для работы с клавиатурой: GetKeyPressed и GetKeyClicked. GetKeyPressed возвращает код нажатой в данный момент клавиши, GetKeyClicked возвращает код последней нажатой клавиши. Вот перечень скан-кодов возвращаемых этими функциями: KE_NONE любая KE_KEY0 0 KE_KEY1 1 KE_KEY2 2 KE_KEY3 3 KE_KEY4 4 KE_KEY5 5 KE_KEY6 6 KE_KEY7 7 KE_KEY8 8 KE_KEY9 9 KE_STAR * KE_POUND # Эти клавиши имеют стандартные скан-коды на всех мобильных телефонах. Но стрелки управления курсором, и другие не стандартные кнопки имеют разные скан-коды, на разных мобильных телефонах. Для решения данной проблемы MidletPascal использует функцию KeyToAction, которая переводит не стандартный скан-код, в стандартный: GA_NONE любая GA_DOWN вниз GA_LEFT влево GA_RIGHT вправо GA_FIRE центр Данный пример показывает как пользоваться этими функциями: program MoveText; var x, y: integer; keyCode: integer; begin repeat keyCode := GetKeyPressed; //возвращает нажатую в данный момент клавишу if KeyToAction(keyCode) = GA_UP then y := y - 1; if KeyToAction(keyCode) = GA_DOWN then y := y + 1; if KeyToAction(keyCode) = GA_LEFT then x := x - 1; if KeyToAction(keyCode) = GA_RIGHT then x := x + 1; SetColor(255, 255, 255); // устанавливаем цвет в белый FillRect(0, 0, GetWidth, GetHeight); //стираем содержимое экрана рисуя закрашеный // прямоугольник на весь экран SetColor(0, 0, 0); // устанавливаем цвет в чёрный DrawText("Hello world", x, y); // прорисовываем текст в нужном месте экрана Repaint; Delay(100); until (keyCode = KE_KEY0) or (KeyToAction(keyCode) = GA_FIRE); //если нажат 0 -выходим end. Если вам нужно чтобы пользователь ввёл какие-то данные в телефон (например имя), то нужно использовать не функции GetKeyPressed/GetKeyClicked а другие(будут рассмотрены позже). Рисование изображений В следуещем примере мы рассмотрим работу простого скринсейвера, написаннго на MidletPascal: Рисование изображений на экран осуществляется с помощью функции DrawImage program ScreenSaver; const up = 1; // константы задают направление в down = 0; // которых будет двигаться иконка left = 1; right = 0; var x, y : integer; // переменные с координатами иконки img : image; direction_x, direction_y : integer; // направление движения begin img := loadImage("/icon.png"); repeat // двигать иконку в зависимости с текущим направлением if direction_y = up then y := y - 1; if direction_y = down then y := y + 1; if direction_x = left then x := x - 1; if direction_x = right then x := x + 1; // проверка на касания границ экрана if x = 0 then direction_x := right; if x = (GetWidth – GetImageWidth(img)) then direction_x := left; if y = 0 then direction_y := down; if y = (GetHeight – GetImageHeight(img)) then direction_y := up; SetColor(255, 255, 255); FillRect(0, 0, GetWidth, GetHeight); DrawImage(img, x, y); //Функция прорисовки изображения Repaint; Delay(50); until GetKeyPressed <> KE_NONE; end. Компоновка нескольких файлов (unitов) Когда, разрабатываются большие проэкты, писать весь код мидлета в одном файле неудобно, лучше разделить на несколько файлов. Использовать эти функции можно точно так же как и в обычном Паскале, с помощью раздела uses, в котором перечесляется список используемых модулей... Чтобы продемонстрировать как это осуществить рассмотрим маленький пример: Сначала создаем новый проект, назовём его TestUnits. Потом выбераем Project -> New source file и дадим ему имя Complex; Вводим данный код файл Complex.mpsrc: unit Complex; interface type complex = record real_part, imag_part: real; end; function Add(a, b: complex): complex; function Sub(a, b: complex): complex; function MakeString(a: complex): string; implementation function Add(a, b: complex): complex; begin add.real_part := a.real_part + b.real_part; add.imag_part := a.imag_part + b.imag_part; end; function Sub(a, b: complex): complex; begin sub.real_part := a.real_part - b.real_part; sub.imag_part := a.imag_part - b.imag_part; end; function MakeString(a: complex): string; begin MakeString := "" + a.real_part + " + " + a.imag_part + "j"; end; end. Теперь введем код в файл проекта TestUnits.mpsrc: program TestUnits; uses Complex; //пользуемся написанным до этого модулем Complex; var x, y: Complex.complex; begin x.real_part := 2; x.imag_part := 3; // x := 2 + 3j y.real_part := 0; y.imag_part := 1; // y := j x := Complex.Add(x, y); DrawText(MakeString(x), 0, 0); Repaint; Delay(2000); end. Мы освоили некоторые основы работы с MidletPascal, переходите к следуещей главе в которой мы будем изучать основные элементы управления, различные текстовые поля, индекаторы прогресса и т. д. статья взята с http://aleksphone.narod.ru | |
Просмотров: 2973 | Комментарии: 1 | Рейтинг: 5.0/1 |
Всего комментариев: 1 | |||
| |||