Диалоговое окно выбора режима
В этом фрагменте мы расширили набор нестандартных команд (константы cmСаn,…, cmAdd), ввели новую функцию Control и предусмотрели необходимые процедуры в теле обработчика событий. Заметим, что режимы редактирования записи и добавления новой записи очень схожи по организации диалога с пользователем, поэтому он" реализуются в рамках одной процедуры AddItem и управляются параметром обращения к ней.
Функция Control используется для создания диалогового окна выбора продолжения. В качестве значения этой функции будет возвращаться одна из пяти новых команд. В начальном варианте функция возвращает команду cmСаn, что интерпретируется обработчиком событий как указание на завершение работы с диалоговым окном. Поэтому, если Вы вставите указанный текст в программу и запустите ее, поведение программы останется прежним.
Займемся реализацией функции Control. Она должна создать диалоговое окно выбора режима, получить с его помощью команду, идентифицирующую выбранный режим, и вернуть эту команду в качестве своего значения:
Function Control: Word; {Получает команду из основного диалогового окна} const X = 1; L = 12; DX= 13; But: array [0..4]of String [13] = {Надписи на кнопках:} ('~1~ Выход ','~2~Убрать ','~3~ Искать ', '~4~ Изменить ','~5~ Добавить '); Txt: array [0..3]of String [52] = ( {Справочный текст:} 'Убрать – удалить запись, выделенную цветом', 'Искать – искать запись, начинающуюся нужными буквами', 'Изменить – изменить поле (поля) выделенной записи', 'Добавить – добавить новую запись'); var R: TRect; D: PDialog; k: Integer; begin R.Assign(7.6.74.15); D: = New{PDialog,Init(R, 'Выберите продолжение:')); with D do begin for k: = 0 to 3 do {Вставляем поясняющий текст} begin R.Assign(l,l+k,65.2+k); Insert(New(PStaticText,Init(R,#3+Txt[k]))) end; for k: = 0 to 4 do {Вставляем кнопки:} begin R.Assign(X+k*DX,6,X+k*DX+L,8); Insert(New(PButton, Init(R,But[k],cmCan+k,bfNormal))) end; SelectNext(False); {Активизируем первую кнопку} end; Control: = DeskTopA.ExecView(D); {Выполняем диалог} end; {Control}
Сначала создается диалоговое окно с заданными размерами (чтобы программе стал доступен тип TDialog, укажите в предложении Uses модуль Dialogs). Затем в цикле:
for k: = 0 to 3 do
В окно вставляется поясняющий текст (см. рис.15.10).
Рис. 15.10. Диалоговое окно функции Control