Содержание. | Организация программы | Общие положения. |
DBasic (DB) представляет собой MDI-приложение, в каждом из окон которого может выполняться одна из программ, причем каждая из программ является отдельной нитью. Т.е. DBasic является принципиально мультизадачным приложением. Это первое принципиальное отличие DBasic от Visual Basic фирмы Microsoft (VB).
Первая программа DBasic запускается из командной строки. Например:
c:\dbasic\exe\dbasic.exe step01.basДалее эта программа может запустить другие с помощью оператора RUN.
RUN step02.basили функции RUN().
RES=RUN( step02.bas, 0 )В результате выполнения оператора загружается новая программа, открывается новое окно и программа начинает выполнятся. При этом выполнение текущей программы не приостонавливается, а продолжается дальше. При необходимости эти программы могут взаимедействовать посредством глобальных переменных или сигналов. Разница между этими двумя способами запуска программ состоит в том, что в первом случае значение переменной HPARENT не определено, а во втором случае равно идентификатору окна запускающей программы. В результате используя фунцию VARGET можно получить значения переменных родительской программы.
При разработке DBasic большое внимание было уделено доступности функций уже встроенных в Windows. Т.е. практически отсутствует дублирование функций GDI и других в функциях самого DB. Если какая-либо функция необходима программисту, то он всегда может это сделать непосредственно. Для реализации этой идеи каждой программе доступен ряд глобальных и локальных переменных.
HDC= USER32!GetDC( HWND ) NewPen= GDI32!CreatePen( 0, 2, Color ) OldPen= GDI32!SelectObject( HDC, NewPen ) GDI32!MoveToEx( HDC, X, Y, 0 ) GDI32!LineTo( HDC, X+8, Y ) GDI32!LineTo( HDC, X+8, Y+8 ) GDI32!LineTo( HDC, X, Y+8 ) GDI32!LineTo( HDC, X, Y ) GDI32!SelectObject( HDC, OldPen ) GDI32!DeleteObject( NewPen ) USER32!ReleaseDC( HWND, HDC )Это второе важное отличие DB от VB. Расплатой за это является не переносимость кода в другую ОС, но Windows достаточно распространен, так-что вряд-ли это так существенно.
Третьей важной особенностью DB является механизмы обработки событий. Дело в том, что в отличии от VB здесь механизм событиий основан на привязки кода события к некоторой метки программы, эта привязка осуществляется оператором EVENT. Например:
EVENT 40000,DRAW ... DRAW: RES=PARAM ... ENDЗдесь для того, чтобы инициировать событие с кодом 40000 DB или внешняя программа должна выполнить функцию
SendMessage( HWND, WM_COMMAND, 40000, lParam )Сам DB может это осуществить функцией EVENT(). При этом DB начнет выполнять код от метки DRAW до оператора END. А переменная PARAM будет присвоено значение lParam. Этот механизм существенно упрощает процесс создания внешних DLL модулей и(или) программ взаимодействующих с DB.
Здесь надо обратить внимание на то, что каждая нить в Windows-приложении должна иметь собственный обработчик событий, но DB создает таковой, только для главного окна программы, а оно в свою очередь ретранслирует сообщения дочерним. В результате все события DB на самом деле выполняются в основной нити DB и все окна принадлежат ей. Хотя сами DB-программы выполняются в разных нитях. Следствием это является:
EVENT 40100,WINDOW RES=EVENT( HWND, 40100 ) RES=ATTACH( hEdtWnd,0,0 ) RES=WAIT(QUIT) END WINDOW: Class="EDIT"; lpClass=VARPTR(Class) hEdtWnd= USER32!CreateWindowExA( 0, lpClass, 0, 1345323204, 0, 0, 0, 0, HWND, 0, HINST, 0 ) END
Четвертым отличием является то, что DB не имеет встроенных объектов, а все они выполняются ввиде внешних DLL-модулей, причем это не ActiveX элементы. Возможно это недостаток, однако платой за это является простота их разработки и отсутствие необходимости их регистрации на каждом компьютере, что очень удобно при разработке сетевого приложения. Т.к. все DLL-модули размещаются на сервере, например, в той-же директории, что и DB, и все. Никаких действий на клиентской машине делать не надо. В то-же время при необходимости использования ActiveX элементов их можно поместить в обволакивающий DLL-модуль, который должен будет выполнить функции его регистрации и конвертации данных и сообщений для DB. Так-что эта не фотальная проблема.
Содержание. | Общие положения. |