Диалоговое окно выбора режима
Во-вторых, обратили ли Вы внимание на то, что в процедуре TNotebook.Work указатель PW инициируется оператором:
PW: = New(PWorkWin, Init(R));
А динамическая память, выделенная для размещения экземпляра объекта TWorkWin, не возвращается обратно в кучу? Если да, то у Вас есть хорошие шансы избежать многих неприятностей при программировании в среде Turbo Vision. Конечно же, нам следовало где-то в программе позаботиться об удалении ненужного нам экземпляра объекта. Чтобы не усложнять программу, я не стал этого делать: если вставить оператор:
Dispose(PW, Done)
Сразу за оператором:
DeskTop.Insert(PW)
То вновь созданное окно будет тут же удалено с экрана, поэтому оператор Dispose нужно разместить в обработчике событий TNotebook.HandleEvent (подумайте, где именно).
После включения диалогового окна в цепочку действий, связанных с инициацией PW, появилась возможность приостановить исполнение программы в процедуре Work: вместо оператора:
DeskTop.Insert(PW)
Вставьте следующие строки:
Control: = DeskTop.ExecView(PW); Dispose(PW, Done)
И добавьте описание переменной Control:
var ….. Control: Word;
В отличие от процедуры Insert процедура ExecView не только помещает видимый элемент на экран, но и приостанавливает дальнейшее исполнение программы Work до тех пор, пока не закончится диалог с пользователем.
И, наконец, еще одно усовершенствование. Работа с программой станет удобнее, если сразу после чтения файла с данными она перейдет к их показу. Реализовать это очень просто: добавьте вызов процедуры Work в процедуру FileOpen следующим образом:
Procedure TNotebook.FileOpen; …. .begin ….. if OpFileF then begin ….. Work{Переходим к работе} end; ….. end; {FileOpen}
Если Вы внесете в программу все описанные изменения и запустите ее на счет, то при попытке выйти из режима просмотра на экране будет развернуто диалоговое окно, показанное на рис. 15.10. "Нажатие" на любую кнопку этого окна не приводит ни к каким последствиям – наше окно пока откликается только на стандартную команду cmClose, связанную с клавишей Esc.
Файл с данными DataType пока еще не существует. Чтобы программа смогла нормально работать, в диалоговом окне открытия файла укажите произвольное имя, например MYDATA. После завершения работы программы будет создан пустой файл MYDATA.DAT.