Thu, 17 May  |   Login English version  |  OS2.Ru  
В начало
Об OS/2
Новости
Публикации
DevCenter
База данных
Каталог ресурсов
Биржа труда
TeamDB
Форумы и общение
Опросы и конкурсы
Russian Team OS/2
На первую страницу OS2.Ru
 Вокруг OS/2 |  Программы и технологии |  Аппаратура |  Разработчикам |  Мастерская
Поиск по: Добавить закладку OS2.Ru в панель Netscape 6/Mozilla
OS2.Ru > Articles > Dev > Prog > Vpprog
2001-04-21
Логвинов Дмитрий
(версия для печати)

Программирование в Virtual Pascal: PM и TurboVision

О Virtual Pascal

Краткое знакомство

Среда разработки Virtual Pascal появилась по нынешним меркам довольно давно. В январе 1995 года Виталий Мирянов выпустил первую публичную альфа-версию VP (да да, VP написан нашим соотечественником, если кто не знал :-). Это была полноценная среда разработки языка Pascal визуально практически совпадающая с Borland Pascal 7.0 и совместимая с ним по синтаксису. Весь компилятор и core debugger были написаны на ассемблере, компилятор отличался весьма хорошим оптимизатором, а среда разработки была написана на самом VP. Конечно, в VP имелись и ошибки, но тем не менее, это была самая мощная реализация Pascal под OS/2 и я до сих пор с удовольствием вспоминаю общение с VP beta 003, когда писал инсталлятор к своему "Русскому фикспаку".

После бета-релиза VP, этот продукт вместе с Виталием "купила" английская компания fPrint, где и продолжилось его развитие. VP стал кроссплатформенным с поддержкой Win32 и даже Linux, но первая и основная операционка для VP все-таки OS/2. С версии 2.1 VirtualPascal стал бесплатным, что дало этому продукту еще один ощутимый плюс. Кроме того, в составе VP идет достаточно полная и толковая документация по OS/2 API (в некотором смысле, заменающая OS/2 Toolkit)

Константин Окуньков


Новая версия VP (2.1) производит весьма пристойное впечатление:



  • Это полность FreeWare версия.
  • До недавних пор разрабатывалась английской фирмой, т.е. недавно была коммерческой.
  • Выходной код полностью 32-битный.
  • Поддерживаются выходной формат файла для различных платформ. Текущая версия имеет возможности генерировать код для Win32s (32-битный код для Windows 3.11), Win32d (Win95-NT), OS2 (32 бита), DPMI (поддержка устанавливается дополнительным пакетом), Linux (не пробовал, но опции имеются). В документации приводится некоторая информация о возможности расширения списка поддерживаемых платформ.
  • Имеется хорошая документация по возможностям IDE, Pascal Language Manual, OS2 API.
  • Программирование производится в IDE, написанном на Turbo Vision и совпадающем по возможностям с Borland IDE. VP IDE работает под платформами OS/2 и Win95-NT.
  • Паскаль соотвествует по уровню Delpi 2. В частности, это дает возможность писать программы на Turbo Vision с использованием новой объектной модели (Class contra Object).
  • В виде исходников приложен код Turbo Vision (бесплатно !!!), компилируемый подо все возможные платформы.
  • Полнофункциональный debug, аналогичный борландовскому. (Но дебаг DPMI возможен только в полуоси).
  • И наконец, сам проект VP был начат нашим соотечественником.

Virtual Pacal с дополнительным пакетом для DPMI и различными примерами для программирования доступен на сайте www.vpascal.com.

Примеры программирования

Программирование в этом паскале дает чисто эстетическое удовлетворение (если не считать проблем Паскаля как языка :-). Мои примеры программирования сделаны для OS/2, но это не должно смущать, т.к. аналогичные вещи можно делать для Wind95-NT. Пакет с DPMI позволяет даже использовать многопоточность, правда в невытесняющей моде.


Простенькое окно для PM


Писать для Presentation Manager весьма просто. Так просто, что даже не верится. Причина, почему популярны среды с визуальным проектированием окошек заключается не в сложности программирования под PM, а в том, что среды с визуальным проектированием предлогают готовые шаблоны для различных нужд. Если же самому приходится создавать все эти меню и вложенные окна, то приходится изобретать велосипед заново, а это может быть весьма долгим процессом. Но если необходимо понимание того, что именно делают среды с визуальным проектированием или необходимо создать простенькое окно, то не стоит бояться прямого общения с PM API. Все там достаточно просто.

Программа, создающая окно, должна подключить соответствующие библиотеки и быть слинкована для работы с PM:

uses OS2Def, OS2PMApi, OS2Base;

{$PMTYPE PM} // Программируем для PM

Первый шаг состоит в получении так называемого якоря терминала. Для чего это надо - неизвестно. Возможно, атавизм прошлого, а возможно - мудрое предвидение будущего со стороны IBM.

var AB: HAB;
AB := WinInitialize(0);

Соотвественно, в конце программы должны отпустить якорь:

WinTerminate(AB);

Теперь зарегистрируем новый класс окон в системе:

const ClassName: PChar = 'testproc';
WinRegisterClass(
	AB,
	ClassName,
	ClientWndProc,
    CS_SIZEREDROW);

Функция ClientWndProc, описанная ниже, осуществляет обработку сообщений от системы. Это так называемая функция окна. Экспортировать ее не надо, VP сам сделает ее доступной для OS.

Теперь можно создать собственно окно типа ClassName со свойствами, обозначенными в flStyle:

var hwndFrame, hwndClient: HWND;
var flStyle: ULong;

flStyle := FCF_TITLEBAR or FCF_SYSMENU
      or FCF_SIZEBORDER or FCF_MINMAX
      or FCF_SHELLPOSITION or FCF_TASKLIST;

hwndFrame := WinCreateStdWindow(
    HWND_DESKTOP,
	WS_VISIBLE,
	flStyle,
	ClassName,
	'test program',
	0,
	0,
	0,
    @hwndClient);

Создадим очередь сообщений для окна:

var mq: HMQ;
mq := WinCreateMsgQueue(AB, 0);

Запустим бесконечный цикл чтения сообщений из очереди:

var Msg: QMsg;
while WinGetMsg(AB, Msg, 0, 0, 0) do WinDispatchMsg(AB, Msg);

Когда придет время окну закрыться, WinGetMsg вернет величину 0 и программа выполнится дальше. Мы должны по завершению программы освободить окно:

WinDestroyWindow(hwndFrame);
закрыть очередь сообщений для нас:
WinDestroyMsgQueue(mq);
и отдать якорь:
WinTerminate(AB);

Вся полезная деятельность программы заключена в функции ClientWndProc:

function ClientWndProc(Wnd: HWND; Msg: ULONG;
         Mp1, Mp2: MParam): Integer; cdecl;
begin
result := WinDefWindowProc(Wnd, Msg, Mp1, Mp2);
end;

В таком виде окно не делает ничего, даже не прорисовывает фона окна. Поэтому функцию окна делают более сложной:

case Msg of
WM_Create: <что-то делать при создании окна>
WM_Destroy: <что-то сделать при закрытии окна>
WM_Paint: begin // нарисуем чего-нибудь
    ps := WinBeginPaint(Wnd, 0, nil);
    WinQueryWindowRect(Wnd, Bound);
    WinDrawText(ps, -1, 'Привет', Bound,
                	CLR_NEUTRAL, CLR_BACKGROUND,
                    DT_CENTER or DT_VCENTER or
                    DT_ERASERECT);
    WinEnxPaint(ps);
    result := 0;
	end;
	else
    result := WinDefWindowProc(Wnd, Msg, Mp1, Mp2);
end;
Исходные тексты программы


Использование TurboVision

Как-то неловко приводить в примере использование широко известной TurboVision. Наверное все очень хорошо ее знают. Но для полноты описания возможностей Virtual Pascal приведу тривиальный пример:

program TVTest;
{$PMType VIO}
uses App;

var
Application: TApplication;

begin

Application.Init;
Application.Run;
Application.Done;

end.


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


Обсудить материал (число отзывов:0)


предыдущий материал  |  следующий материал


 Вокруг OS/2 |  Программы и технологии |  Аппаратура |  Разработчикам |  Мастерская


Новости
15/08: GoldenCode выпустит Java 1.4 для OS/2
14/06: Fix #16 rus / Warp4
30/05: Перерыв в работе OS2.Ru
Все новости..

В каталоге
Дерево каталога
Новые поступления

Публикации
Боремся с зависанием PM и зомби - WatchCat + HardKill
(Samorukov Alex , 2001-10-11)

DSync - куда может быть проще?
(Okounkov Konstantin, 2001-09-28)

WarpGoGo: переводим музыку в MP3
(Okounkov Konstantin, 2001-09-26)

Все материалы

Решения
Tips & tricks

Активные опросы
Используете ли Вы OS2.Ru tab в Netscape ?

Все опросы
Первая страница  |   Об OS/2  |   Новости  |   Публикации  |   База данных  |   Каталог ресурсов  |   Биржа труда  |   TeamDB  |   Форумы общения  |   Опросы и голосования  |   OS2.Ru DevCenter
Дизайн, оформление © 1996-2000 Copyright WebTeam. Использование материалов OS2.Ru без согласия авторов и координаторов запрещено
Powered by OS/2