Помощь - Поиск - Пользователи - Календарь
Полная версия: Написание J2me приложений для телефонов.
Форум «Всё о Паскале» > Pascal, Object Pascal > 32 битные компиляторы
Altair
Вступление
MIDletPascal - язык программирования, предназначенный для создания мобильных приложений.
Компилятор MIDletPascal переводит код Pascal на Java bytecode (J2ME) .
Программы, написанные в MIDletPascal могут быть запущенны на любом мобильном устройстве ( типа мобильных телефонов) с Java - поддержкой.
MIDletPascal - удобное средство разработки, делающее новый шаг в развитии мобильного программирования.
С MIDletPascal, Вы сделаете новый шаг в мир мобильного программирования!

Особенности
  • Генерация быстрого и компактного Java™ bytecode.
  • Полная поддержка языка Pascal
  • Частично код может быть написан прямо на Java
  • Удобная работа с SMS.
  • Коммуникация по HTTP
  • Поддержка пользовательсткого интерфейса (формы).
  • Мультимедиа (работа со звуком, картинками)
  • легкая в использовании IDE
Примеры программ.
Программа выводит на экран сообщение которое меняет свой цвет с черного на белый неоднократно.
var color : integer;

begin
color := 0;
setFont(FONT_FACE_SYSTEM, FONT_STYLE_BOLD, FONT_SIZE_LARGE);

repeat
setColor(color, color, color);
color := color + 8;

if (color > 255) then
color := 0;

drawText('Hello world!', 0, 0);
repaint;
delay(100)
until false
end.


Программа - скринсейвер
program ScreenSaver; 

const up = 1; // these constants define the direction
down = 0; // in which the icon moves
left = 1;
right = 0;

var x, y : integer; // the current icon's left upper corner position
img : image; // handle of the image object
direction_x,
direction_y : integer; // the movement direction

begin
img := loadImage('/icon.png');

repeat
// move the icon according to the current direction
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;

// check if the icon hit the display border
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.


Пара слов о лицензии
Для персонального использования, без support'a, MIDletPascal распространяется бесплатно. (download)
Для комерческого ипользования
Лицензия на 1 человека - 40$
на <10 - 100$
более 10 - 300$

Этапы создания приложения
Пустое окно:
Нажмите для просмотра прикрепленного файла
Создание проекта
Нажмите для просмотра прикрепленного файла
Отладка - поиск ошибок
Нажмите для просмотра прикрепленного файла
Редактирование ресурсов
Нажмите для просмотра прикрепленного файла
Запуск программы. Эмуляция.
Нажмите для просмотра прикрепленного файла

Эмуляция
Что бы не проверять каждую программу на телефоне, желательно скачать и установить любой подходящий вам эмулятор мобильного устройства.

Оффициальный сайт:
http://www.midletpascal.com/
FreeMan
Хм. надо глянуть. если что открыть подфорум "Мобильный Паскаль"
Gothic_Snake
Дофольно интересно... Лезу смотреть smile.gif
hardcase
Хто тут сказал
Цитата

Полная поддержка паскаля?

НЕ ВЕРЬТЕ!!!

Например: нету УКАЗАТЕЛЕЙ - а без них в процедурном языке, таком как Паскаль или С, делать нечего.

Нету передачи параметров по Ссылке!! - это вообще не в сказке сказать, не format /all убрать!

Почему нету object? Ведь Java - объектно-ориентированный язык!

Такойвот кастрированный паскаль этот MIDlet.

Под мобилы лучшее писать на Яве, по крайней мере не появится более полная версия Паская. Ато от этого просто настроение падает - Зачем таким убожеством пользоваться.
Altair
Цитата
Полная поддержка паскаля?

Да полная.
Почитай стандарт языка. там нет объектов. Это уже объект Паскаль.
насчет передачи и указателей - еще не успели вкючить.
Цитата
Хто тут сказал

Цитата
full Pascal specification support

полная поддержка спецификации Паскаля
имеловь ввиду
hardcase
Цитата(Altair @ 13.01.2006 20:19) *

Да полная.
Почитай стандарт языка. там нет объектов. Это уже объект Паскаль.
насчет передачи и указателей - еще не успели вкючить.
полная поддержка спецификации Паскаля
имеловь ввиду

У них уже 2.01 версия вышла! и до сих пор таких тривиальных вещей нету...

Я знаю стандарт языка. Процедурное программирование - осталось в прошлом (моё субъективное мнение). Сейчас ООП - де факто принято стандартом.

Дело в том, что Паскаль по своей сути постоянно работает с памятью - кучей. Каждый уважающий себя программист постоянно обращается к GetMemory, FreeMemory, New, Dispose. что мы видим здесь?
Нету динамического выделения памяти! - Почему? да потому что низззя енто делати в Яве - ансейф коуд и сборка мусора.
Яве и указателей-то нету - другая идеология. Вот поэтому нельзя реализовать ПОЛНЫЙ стандарт Паскаля.

Хочу заметить, без УКАЗАТЕЛЕЙ, на Паскале низззя реализовать ни одну стандартную структуру данных как то: список, дерево и т.п. А как без таких вещей программить? - никак.
Altair
ты все сказал ?
Цитата
А как без таких вещей программить? - никак.

ты на телефоне фундаментальные задачи хочешь решать ?

Мидлет Паскаль полностью обеспечивает создание J2ME приложений.
hardcase
Я просто подумывал, как написать инженерный калькулятор (вернее перенести таковой с Делфи) на мобильник.
А там я парсю выражение и т. д. и т.п.
На MIDlet он точно не пойдет. а на жаве писать лень.

Я говорю о том, что MIDlet паскать горрраздо слабее Явы.

Но я всёже буду следить за обновлениями - вдруг вырастет в чёнить более серьёзное.
Altair
Цитата
Я говорю о том, что MIDlet паскать горрраздо слабее Явы.

Сам по себе, да. согалсен.
Но там же вроде можно вставки на java делать... это его расширяет.
hardcase
Цитата(Altair @ 13.01.2006 20:48) *

Сам по себе, да. согалсен.
Но там же вроде можно вставки на java делать... это его расширяет.

Понимаешь в чём дело.....
Я сторонник "чистого" языка. Если для реализации чего-то на одном языке надо делать вставку на другом (ассемблер не в счёт - все там будем), то такой язык - не очень хороший язык или он просто не подходит для решения поставленной задачи.

Зачем ява, если я вроде как программлю на Паскале? [риторический вопрос]
virt
Цитата
Каждый уважающий себя программист постоянно обращается к GetMemory, FreeMemory, New, Dispose.

А если я смог обойтись без вызова этих процедур ,то я себя не уважаю??

Списки в яве есть stack and lists on Java . Интерфейса к ним нет.
xds
Тезисы - по делу и просто так:
1) Язык Java, в некотором роде - ассемблер платформы Java. На мой взгляд, язык довольно-таки качественный - ровный и полностью объектно-ориентированный. Короче, я не против!
2) Компиляция в Java Platform bytecode с других языков - почему бы и нет? MIDlet Pascal? Да на здоровье! Ведь запросто возможен случай, когда человек: а) хочет быстро простой, но очень полезный и нужный MIDlet; б) не знает Java; в) знает Паскаль.
3)
Цитата
Каждый уважающий себя программист постоянно обращается к GetMemory, FreeMemory, New, Dispose.
The rule of thumb: динамическое выделение памяти следует применять тогда и только тогда, когда размер структуры данных станет известен в момент выполнения. Всё! Если известно, что структура "в общем-то динамическая", но при выполнении всегда вырастает до одного и того же фиксированного размера - кукиш вам, а не динамика: массив "с запасом" и вперёд! Ведь выделение блоков во всех "усреднённых" реализациях кучи (именно такие применяются в компиляторах ЯВУ) - это почти всегда цикл!
GoodWind
товарищи, никто не нашел в MIDletPascal аналог GetPixel ? mega_chok.gif
можт кто на яве дописать может ?
hardcase
Цитата(virt @ 13.01.2006 22:11) *

А если я смог обойтись без вызова этих процедур ,то я себя не уважаю??

Дело в том, что у меня ещё не было ни одной более-менее серьёзной программы, в которой я не использовал бы функции для работы с памятью. Подразумевается использование их во многих базовых классах моего производства, которые я постоянно использую, т.к. они несколько удобнее стандартных.
xds
Цитата(GoodWind @ 15.01.2006 0:08) *

товарищи, никто не нашел в MIDletPascal аналог GetPixel ? mega_chok.gif
можт кто на яве дописать может ?

На Java дела обстоят плохо: только MIDP 2.0 (не на всех устройствах), предварительно загнать картинку в Image, затем Image.getRGB(). Жадно и несовместимо. Собственно, объект класса Graphics (это MIDP-аналог класса TCanvas в VCL) не связан напрямую с физическим растром - так что GetPixel возможен только у буферизованного растра, т. е. объекта класса Image. А зачем тебе GetPixel понадобился?
GoodWind
дык дему писать =)))
xds
Дык зачем в деме GetPixel? Что конкретно ты сделать хочешь?
GoodWind
хотел эффект motion-blur к картинке добавить =)
xds
В MIDP 1.0 с большой вероятностью невозможно. В MIDP 2.0, напротив, есть множество способов. Быстрее всего будет через Image.getRGB() и Graphics.drawRGB(). MIDP 2.0 поддерживает альфа-канал, что упрощает реализацию "motion blur".
virt
GoodWind
а ты дополнительный массив заведи ,и там дублируй содержиммое экрана. Тогда GetPixel не надо.
GoodWind
Virt, медленно, пробовал
xds
Быстро будет с drawRGB() - она получает весь массив сразу.
GoodWind
т.е. хелп в MIDletPascal неполный ? или ты имеешь в виду вставки java-кода... и где вообще инфу можно взять ?

зы. как перевести мидлет в полноэкранный режим ? (series40, nokia 6610)
xds
Я имею в виду стандартную библиотеку Java, которая и определяет потенциальные возможности приложений. Поскольку MIDletPascal так или иначе использует CLDC/MIDP, то я предполагаю, что в нём должны существовать те или иные возможности для обращения к большинству средств библиотеки - через вставки на Java, или ещё как-нибудь. Описание всех классов CLDC и MIDP есть в Sun J2ME WTK.

В Nokia 6610 MIDP 1.0 - полноэкранного режима или совсем нет, или только при использовании Canvas. Например, на Siemens S55 Canvas всегда в полноэкранном режиме, а Screen - в окошке. Если MIDletPascal всегда выводит через объект потомка Screen, то полноэкранный режим получить невозможно.
Altair
Полноэкранный режим:
Нажмите для просмотра прикрепленного файла
GoodWind
Altair: уже нашел.. да, я чайник..... не увидел
xds: 6610 поддерживает только MIDP 1.0, полноэкранный режим поддерживается благодаря NokiaAPI...

где читать инфу по программированию соток ?
Bill Gates
Подскажите, где скачать Windows-эмулятор J2ME?
На сайте midlepascal.com ссылки только на километровые дистрибутивы, едмнственное ,что сноесное там midletemulator, но он работает только из браузера.
Киньте ссылку на нормальный эмулятор!!!!!!!!!!
GoodWind
на www.allnokia.ru (или на его форуме) есть Nokia 7210 SDK - весит около 7 метров... меньше не видел...
Bill Gates
Как проигрывать звуки?!
Если делать, как в хелпе:
Код

program alexf;
begin
    if not OpenPlayer('/alexf.mid', 'audio/midi') then Halt;    
    if not SetPlayerCount(-1) then Halt;
    if not StartPlayer then Halt;

    repeat until false;
end.

то все нормально компилируется, однако при запуске возникает ошибка.
[br]
Ничего не понимаю... sad.gif
Bill Gates
Есть ли в мидлет паскале аналог keypressed (именно ее, а не readkey)???
GoodWind
Цитата
function GetKeyPressed: integer;
Returns the code of the key that is currently pressed, or KE_NONE if no key is pressed. The standard key codes have predefined constant values:
· KE_KEY0
· KE_KEY1
· KE_KEY2
· KE_KEY3
· KE_KEY4
· KE_KEY5
· KE_KEY6
· KE_KEY7
· KE_KEY8
· KE_KEY9
· KE_STAR
· KE_POUND


Example
Код
begin
  while GetKeyPressed <> KE_STAR do
    begin
      Delay(100);
    end;
end.
Bill Gates
А как быть с миди?
GoodWind
Цитата
А как быть с миди?

не смог заставить миди работать =(
GoodWind
www.mobilab.ru - доки по программированию под мобильные устройства.
Dr.Bugy
Цитата(Altair@13.01.2006 20:19 )
Почитай стандарт языка

А где его можно почитать?
Altair
Статья "Пишем игры на MIDletPascal"

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

Мидлет Паскаль в ВикиПедии

Полезные модули

validol
Кто знает как можно позвонить?
Есть к примеру номер: 123456, нужно его набрать и поговорить с человеком на другом конце.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.