Ловим Фокус.Все привет! Это опять я. Тема сегодняшнего урока «контроль действий пользователя». Будем следить за тем, куда и почему ходит пользователь по форме нашей обработки. | | Автор статьи: skunk | Редакторы: aka AMIGO Последняя редакция №2 от 03.08.10 | История URL: http://kb.mista.ru/article.php?id=65 | |
Казалась бы тривиальная задача. Кладем на форму «текст» с вызывающей функцией и все. Но, у всего есть свое «но». Например, такая фишка не сечёт смену фокуса в ячейках таблицы, в пределах одной строки. Ситуацию спасает принудительное перерисовка формы (за это мне сказал mszsuz, за что ему огромный респект). Но опять получаем «но». Спасать-то оно спасает. Если элементу формы было присвоенное, или изменено значение, а если нет, то баста карапузики. Ничего не происходит. Что не есть гуд.
Решение было получено совершенно случайно. Просто я в этот момент бился с другой бодягой, и мне надо было юзать ОбработкуОжидания. Вот юзая ее мы вместе mszsuz и победили данную проблему.
Решение.
Все как обычно, кладем на форму объект «текст». В его формуле его свойств пишем GetAttrib(). В модуле отчета набираем:
//*******************************************
function GetAttrib()
Name = Form.ActiveControl();
// …
// здесь размещаем код, какой вам надо
// …
Form.Refresh();
endfunction
//*******************************************
procedure Init()
GetAttrib();
Form.IdleProcessing("Init", 0);
endprocedure
А в процедуре при открытии формы запускаем процедуру Init. Примерно так:
//*******************************************
procedure OnOpen()
// …
// здесь размещаем код, какой вам надо
// …
Form.IdleProcessing("Init", 1);
endprocedure
Ну, вроде все. Удачи, вам в делах наших тяжких ;))
Санкт-Петербург, Декабрь 2005 года.
skunk |