Как выполнить проверку
Модераторы: m0p3e, edward_K, Модераторы
Как выполнить проверку
Всем привет, есть в окне интерфейса 2 поля для ввода дат - начала и конца периода. Как запретить пользователю вводить дату начала периода больше чем дата конца, ну или хотя бы выводить соответствующие предупреждение при ошибочном вводе, есть ли какое-то стандартное событие окончания ввода даты в поле, наподобие cmPick? Спасибо!
быть не может, это фантастика
cmCheckField - событие возникает, после модификации.
cmCheckField - событие возникает, после модификации.
Код: Выделить всё
Interface TestDt;
var
DtBeg, DtEnd: Date;
view as select * from kated;
Screen Scr;
Fields
DtBeg: NoProtect;
DtEnd: NoProtect;
<<
.@@@@@@@@@@ .@@@@@@@@@@
>>
end;
HandleEvent
cmCheckField:
{
if (DtBeg > DtEnd)
Message('Начальная дата больше конечной даты!')
}
cmInit:
{
DtBeg := Date(01,01,2007);
DtEnd := Date(02,01,2007);
}
end;
end.
в общем такая проблема, события cmCheck, cmSetDefault уходят на уровень интерфейса, а не обрабатываются на уровне окна. Я бы и рад их там обрабатывать. НО!, вылезает куча проблем, например CurField работает неверно для полей объявленных в окне, возвращает отрицательные числа и проверка вида if(CurField() = #my_window_field) не проходит. #statusline "statgal" ставил и в cfg файле и в сорце интерфейса, не помогает! Что еще можно попробовать???
Выше постом я чуток прогнал. Вылезла интересная особенность! CurField() нельзя кэшировать! Т.е. взять один раз, записать в переменную и затем сравнивать с константами вроде #field1 и #field2. Т.е., вот так неправильно
var _field : integer;
//---------------------------------
handleEvent
cmPick:
{
_field = CurField();
if (_field = #field1 or _field = #field2)
}
а правильно только так
handleEvent
cmPick: if (CurField() = #field1 or CurField2() = #field2)
сурово!
но как же быть с событиями, вылетающими за пределы окна. Такое ощущение, что окно становится неактивным в какой-то момент и событие уходит выше. Sucks
var _field : integer;
//---------------------------------
handleEvent
cmPick:
{
_field = CurField();
if (_field = #field1 or _field = #field2)
}
а правильно только так
handleEvent
cmPick: if (CurField() = #field1 or CurField2() = #field2)
сурово!
но как же быть с событиями, вылетающими за пределы окна. Такое ощущение, что окно становится неактивным в какой-то момент и событие уходит выше. Sucks
Спасибо за помощь и советы! Пока забил правда, а то уже хаками попахивает, вынес все из окна в отдельный фейс, теперь события уже никуда не денутся Ну а с case я тоже делал, но не знал как объединить несколько case в один, только сейчас узнал что вот так:
case CurField() of
#field1, #field2 : {}
end;
case CurField() of
#field1, #field2 : {}
end;