Как выполнить проверку
Модераторы: 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;