TURBO PASCAL |
Новости
|
Использование оверлея
Модули Turbo Vision разработаны с учетом возможного использования их в оверлейных программах. Все они могут быть оверлейными за исключением модуля Drivers, который содержит процедуры обработки прерываний и другой системный интерфейс низкого уровня. При разработке оверлейных программ старайтесь спроектировать логические последовательности вызовов тех или иных модулей так, чтобы по возможности уменьшить свопинг (динамический обмен оверлеев). Поскольку программы Turbo Vision рассчитаны на интенсивное использование диалога с пользователем, размещайте (если это возможно) все процедуры, связанные с некоторой точкой диалога, в том же модуле, в котором создается и исполняется соответствующий модальный элемент. Например, используемые в программе диалоговые окна, как правило, порождаются от TDialog, а диалоговые элементы этих окон - от TInputLine и TListViewer. Если Вы поместите все три порожденных типа в один модуль, Ваша программа будет исполняться быстрее, так как взаимосвязанные вызовы объектов не будут приводить к свопингу оверлеев. Заметим, что размеры всех основных оверлейных модулей - Арр, Objects, Views, Menus приблизительно одинаковы и составляют около 50 Кбайт. С учетом Ваших собственных объектов, обеспечивающих интенсивное взаимодействие с пользователем и порожденных от TWindow или TDialog, типичный размер оверлейного буфера составит не менее 64 КБайт. Если Вы хотите минимизировать потери времени на свопинг и в то же время создать достаточно компактную программу, Вам придется поэкспериментировать с размером оверлейного буфера и/или испытательной зоны. Вы можете также возложить на пользователя Вашей программы ответственность за выбор размера оверлейного буфера, предусмотрев соответствующий параметр в строке вызова программы. В следующем примере показан возможный способ инициации оверлея. {$F+,0+,S-} {$М 8192,65536,655360} Uses Overlay, Drivers, Memory, Objects, Views, Menus, Dialogs,istList, StdDlg, App; {Объявляем оверлейные модули:} {$0 App } {$O Dialogs } {$0 HistList } {$0 Memory } {$0 Menus } {$0 Objects } {$0 StdDlg } {$O Views } const OvrBufDisk=96*1024;{Размер буфера без EMS-памяти} OvrBufEMS=72*1024;{Размер буфера при использовании EMS-памяти} type ТМуАрр = object (TApplication) Constructor Init; Destructor Done; Virtual; ..... end; {TMyApp} Procedure InitOverlays; var FileName: String [79] ; begin FileName := ParamStr(0); Ovrlnit(FileName) ; if OvrResult <> 0 then begin PrintStr('Невозможно открыть оверлейный файл ', FileName); Halt; end; OvrinitEMS; if OvrResult = 0 then OvrSetBuf(OvrBufEMS) else begin OvrSetBuf(OvrBufDisk) ; OvrSetRetry(OvrBufDisk div 2); end end; {InitOverlays} Constructor TMyApp.Init; begin InitOverlays; TApplication.Init; ..... ..... end; {TMyApp.Init} Destructor TMyApp.Done; begin ..... ..... TApplication.Done; end; {TMyApp.Done} var MyApp: TMyApp; begin MyApp.Init; MyApp.Run; MyApp. Done; end. В этой программе используется механизм размещения оверлеев в исполняемом EXE-файле. Для этого после компиляции программы используйте команду ДОС copy/b MyProg.exe+MyProg.ovr MyProg.exe Чтобы определить маршрут поиска EXE-файла, в процедуре InitOverlays проверяется параметр вызова с номером 0. Заметим, что в этот параметр автоматически помещается маршрут доступа к загруженной программе только в том случае, когда Ваш ПК работает под управлением MS-DOS версии 3.0 и выше. Обратите внимание: размер оверлейного буфера можно сделать меньшим, если программа обнаружит доступную EMS-память, ведь в этом случае потери времени на свопинг будут минимальными. Разумеется, инициация оверлея осуществляется до обращения к TApplication.Init, т.к. модуль Арр, в котором находится этот метод, сделан в программе оверлейным.
|
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |