Иллюстрированный самоучитель по Tirbo Pascal




Инкапсуляция новых полей и методов - часть 2


Control: Word; 

begin

New(PD, Init(cdNormal,0));{Создаем диалоговое окно}

Control := DeskTop.ExecView(PD){Используем окно}

ChDir(PD.Dirlnput.Data);{Устанавливаем новый каталог}

Dispose(PD, Done){Удаляем окно из кучи} 

end; {TNotebook.ChangeDir}

Несколько слов по поводу реализации процедуры TNotebook. ChangeDir. В ней используется объект TChDirDialog, входящий в модуль StdDlg. С помощью этого объекта создается диалоговое окно, позволяющее выбрать новый диск или каталог. После создания и использования экземпляра объекта TChDirDialog в его поле

Dirlnput.Data

устанавливается строка типа PathStr, задающая новый каталог (и, возможно, новый диск).

Чуть сложнее обстоит дело с процедурой DOSCall, которая должна реализовать временный выход в ДОС. Дело в том, что перед выходом необходимо сохранить в куче текущее состояние программы, а после возврата нужно восстановить состояние программы, в том числе и вид экрана. Чтобы реализовать имеющиеся в Turbo Vision средства сохранения и восстановления программы, в предложение Uses необходимо добавить ссылку на модуль Memory. Вот текст метода TNotebooLDOSCall:

Procedure TNotebook.DOSCall;

{Временный выход в ДОС} 

const

txt ='Для возврата введите EXIT в ответ'+' на приглашение ДОС...'; 

begin

DoneEvents;{Закрыть обработчик событий}

DoneVideo;{Закрыть монитор экрана}

DoneMemory;{Закрыть монитор памяти}

SetMemTop(HeapPtr) ;{Освободить кучу}

WriteLn(txt);{Сообщить о выходе}

SwapVectors;{Установить стандартные векторы}

{Передать управление командному процессору ДОС:}

Exec(GetEnv('COMSPEC'),''); 

{Вернуться из ДОС:}

SwapVectors; {Восстановить векторы) 

SetMemTop(HeapEnd); {Восстановить кучу} 

InitMemory; {Открыть монитор памяти}

InitVideo;{Открыть монитор экрана} 

InitEvents;{Открыть обработчик событий} 

InitSysError;{Открыть обработчик ошибок}

Redraw {Восстановить вид экрана} 

end; {DOSCall}

Процедуры DoneXXXX завершают работу отдельных частей Turbo Vision, а процедуры InitXXXXосуществляют обратные действия. С помощью процедуры SetMemTop в ДОС передается информация о фактически используемой динамической памяти (по умолчанию программе предоставляется вся доступная память). Этот вызов освобождает неиспользуемую в данный момент часть кучи для размещения в ней командного процессора COMMAND.COM. После возврата из ДОС вызов SetMemTop используется еще раз - для того, чтобы зарезервировать за программой всю ранее выделенную ей память. Процедура Redraw восстанавливает все видимые элементы экрана.




Содержание  Назад  Вперед