Добро пожаловать на MidletPascal - а теперь еще скоро и Android и Iphone...
Авторизироваться
Меню сайта
Категории раздела
Для начинающих [16]
С этих статей вырасли все, кто сейчас программирует на MP. Именно с этих статей надо начинать новичку, качество у них не всегда хорошее, но почитать стоит.
Разбираем.Обьясняем [1]
В этой категории обьясняем, разьясняем библиотеки,примеры,мидлеты и т.д.
Прочее [4]
Прочее, что не касается программирования: как настроить MP, что нужно для работы и др...
Наш опрос
На чем вы хотите создавать игры для телефона?
Всего ответов: 288
Мини-чат
200
Статистика

Онлайн : 1
Гостей: 1
Пользователей: 0
Главная » Статьи » 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_UP вверх
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


Категория: Для начинающих | Добавил: admin (08.01.2009)
Просмотров: 1934 | Комментарии: 1 | Рейтинг: 5.0/1
Всего комментариев: 1
12.12.2010 в 14:29 Спам
У вас тут ошибок много. Вместо " нужно вставлять '

У меня из-за этого куча ошибок было в вашем мидлет паскале. Сам я работаю в дельфи. Ладно, удачи Вам и вашему сайту)

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]