Тема: Подтверждение закрытия формы ввода / коррекции
При закрытии формы ввода / коррекции
- при нажатии на кнопку закрытия модального окна,
- при нажатии клавиши Esc
- при нажатии кнопки "Выйти" на форме
возникла необходимость подтверждения выхода из формы по причине корректировки многих записей и для предотвращения случайного выхода.
Для этого было предложено использовать макрос
"Контроль закрытия формы EditScreen"
/*****Контроль закрытия формы EditScreen*****/
oDlg:keyboard := {|x,y,o| ;
IF(x=27.AND.SetAlert(;
,{;
IF(cLangID=[ru];
,'Отменить ввод/коррекцию ?';
,"Відмінити ввод/корекцію ?");
};
,{;
IF(cLangID=[ru];
,'Отменить';
,"Відмінити");
,IF(cLangID=[ru];
,'Продолжить';
,"Продовжити");
};
)=1;
,CommonKeyboardBlock(x,.T.,o);
,);
}
oDlg:close := {|x,y,oForm| ;
IF(SetAlert(;
,{;
IF(cLangID=[ru];
,'Отменить ввод/коррекцию ?';
,"Відмінити ввод/корекцію ?");
};
,{;
IF(cLangID=[ru];
,'Отменить';
,"Відмінити");
,IF(cLangID=[ru];
,'Продолжить';
,"Продовжити");
};
)=1;
,(oForm:lLoopEditScreen := .F., lSuccess := .F., nIni := NIL, IF(oForm:lModal,,oForm:destroy()));
,.F.);
}
/*******************************************/В INI-файле формы данный макрос применялся следующим образом
/**************INI-файл формы***************/
BEFORECOMP=410,["411,'Контроль закрытия формы EditScreen'"]\
BEFOREBLOCK=oDocObj:=SpViewDoc():oCurrentDoc,RunFevalFromEditor("Контроль закрытия формы EditScreen",)
/*******************************************/Но при тестировании диалог подтверждения при нажатии клавиши Esc появлялся лишь находясь на текстовом поле.
Однако на полях выбора ОАУ, полях выбора из массива, кнопках "Ввести" / "Выйти" подтверждения не было.
Блок кода oDlg:keyboard в макросе не срабатывал.
Также данный макрос не обрабатывал случай выхода по нажатию кнопки "Выйти" на форме.
Прошу помочь разобраться с подтверждением при выходе с формы ввода / коррекции для любых попыток выхода.