Объект "Поле ввода" - страница 2

 
Vyacheslav Nekipelov:

Да, было бы можно. Но "мигание" поля ввода происходит, если нет флага до строки 

и плюс с поступлением нового тика.

Запоминание редактируемого поля и начала времени его редактирования используются как раз для контроля времени ввода. На случай, если курсор так и останется в поле, то через эти 15 сек флаг редактирования принудительно будет обнулен. И OnTick() сможет выполняться полностью, не дожидаясь события CHARTEVENT_OBJECT_ENDEDIT.

А выполнение этой строки обязательно когда начинаешь ввод и заканчиваешь ввод в поле? Может её засунуть туда-же?

В конце концов можно эту строку вызывать дважды при событии CHARTEVENT_OBJECT_CLICK и при CHARTEVENT_OBJECT_ENDEDIT

А перемещение курсора мыши, или ещё какие-то события не вызывает выполнение этой строки?

 
Alexey Viktorov:

А выполнение этой строки обязательно когда начинаешь ввод и заканчиваешь ввод в поле? Может её засунуть туда-же?

В конце концов можно эту строку вызывать дважды при событии CHARTEVENT_OBJECT_CLICK и при CHARTEVENT_OBJECT_ENDEDIT

А перемещение курсора мыши, или ещё какие-то события не вызывает выполнение этой строки?

Как раз и НЕ нужно, чтобы эта строка выполнялась. И вообще какая-либо функция. До того, как наконец-то не наступит CHARTEVENT_OBJECT_ENDEDIT и пользователь не завершит ввод. 

Если делать без флага, то сразу начинает мигать поле ввода, как только клик в поле объекта.

Если делать без принудительно обнуления его (вдруг пользователь просто оставил курсор в поле и больше никуда не нажимал), то в такой ситуации не сможет тогда выполняться OnInit(). И никак по-другому решить не получалось. Поэтому решил сделать так.

 

О том я и говорю.

Вот так не проверяли

   if(id==CHARTEVENT_OBJECT_ENDEDIT)
    TradePanel.OnEvent(id,lparam,dparam,sparam);

Я думаю, что мигание вызывает выполнение этого кода. А если его выполнить только после редактирования поля, то и мигания быть не должно.

 
Alexey Viktorov:

Я думаю, что мигание вызывает выполнение этого кода. А если его выполнить только после редактирования поля, то и мигания быть не должно. 

Получилась опечатка в моем предыдущем: имел ввиду не OnInit(), a OnTick().


По рекомендованному способу убирает тоже лишь "часть" миганий (при этом для проверки весь другой код в OnChartEvent() просто закомментировал).

Получается также, как в принципе и при моем способе - если сделать флаг только в одном месте в OnChartEvent(), до обсуждаемой строки. А так, конечно, думаю, сразу бы сделал примерно или также, как вы описали.

Поэтому без наличия еще этого же флага в начале OnTick() все равно мигание синхронное именно с новыми тиками оставалось.

 

А еще странно, что даже если флаг есть везде в начале - и в OnTimer(), и в OnTick(), и в OnChartEvent() - то все равно нет-нет да и один-два раза мигнет редактируемое поле даже и за эти обозначенные для флага 15 сек ))

Хотя ведь кроме вышеописанных функций больше никакие не используются....

В общем, сделанный вариант нормально в принципе рабочий. По крайней мере, он лучше, чем с самого начала мигающее редактируемое поле. И времени флага обычно должно быть вполне достаточно - редко курсор останется зачем-то в поле.