![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Событие при прокрутке DBGrid... [D7, Paradox]
Asail © (2005-12-11 17:14:00)Здрасте!
Есть dbGridEh, какое событие можно использовать для отслеживания перемещения в таблице между записями.
Важно, чтобы событие генерировалось только при перемещении с помощью грида, а не внутри кода (т.е. TTable.Next, TTable.Last и т.д.)
Спасибо!!!
msguns (2005-12-12 09:38:00) [1]Судя по всему проблема в том, что периодически надо "ножками" "бегать" по НД (перебор записей с подсчетом, "закладки", поиски и т.д.) и в этом случае
отключать обработку AfterXXXX.
ИМХО, решается так, как уже было сказано ввкерху - с помощью Disable/EnableControls датасету
Anatoly Podgoretsky (2005-12-12 08:39:00) [2]Да надо просто постановку сменить, что то не так
ЮЮ (2005-12-12 08:02:00) [3]Отключение контролов не отключит вызова обработчика DataSet-а. В тех же случаях, когда ксть желание отключить обаботчик в тексте кода, лучше делать так:
Table.AfterScroll := nil;
try
// теперь манипуляции с Table не вызовут обработчик AfterScroll
finally
Table.AfterScroll := TableOnAfterScroll;
end;
sniknik (2005-12-11 22:43:00) [4]> Имелось ввиду, что в обработчике события проверять, отключено или нет отображение.
аааа... проверку в событии на ControlsDisabled делать вместо флага...
> Только блымать сильно будет :(
да нет, наоборот, в таком виде хорошая идея, на большинство операций (поиск/сортировка/цикл по таблице/...) и так контролы отключаеш. постаратся только не делать "мелких" переходов в один нехт. а для остального даже правильнее контролы отключать. хороший стиль выработается.
Desdechado (2005-12-11 21:30:00) [5]Имелось ввиду, что в обработчике события проверять, отключено или нет отображение. Если отключено, то это внутрикодовое перемещение по записям, если нет - то визуальное.
А отключать отображение только на время внутрикодовых движений по записям, а потом включать. Вот.
Только блымать сильно будет :(
sniknik (2005-12-11 21:04:00) [6]если сделать DisableControls то отключатся контролы, тот же грид. а событие скролинга у таблици...
т.е. ничем не поможет. все одно будут происходить.
Desdechado (2005-12-11 19:57:00) [7]можно и без флага обойтись
например, при внутрикодовом перемещении делать DisableControls, а в обработчике проверять его
хотя, по сути, тот же флаг...
sniknik (2005-12-11 18:35:00) [8]> А другого варианта нет?
есть, но наверное посложнее будет...
сделать наследника от грида и вести там это событие, в самом гриде олавливать действия приводяшие к смене записи (нажатия на клавиши, события от скролбара, //может чегото еще) проверять действительно ли это событие привело к скроллированию(к примеру нажатие клавиши вниз на последней записи(eof) не приведут к скролу) и вызывать свое самодельное событие если оно попределено. (в общем ничего невозможного, но потруднее... ;)
Asail (2005-12-11 18:11:00) [9]А другого варианта нет?
Очень неохота бегать по всей проге и выискивать, куда ставить флаг.
Да и помнить про этот флаг надо, когда буду изменять чего.
Некрасиво как-то...
Но, за совет - спасибо!
sniknik (2005-12-11 17:30:00) [10]дополнительный флаг вводи, на разделение. т.к. событие не дублируется.
procedure TForm.TableAfterScroll(DataSet: TDataSet);
begin
if isNoAuto then begin
...
end;
end;
isNoAuto:= false;
TTable.Next;
isNoAuto:= true;
хотя... dbGridEh... кто его знает, может в нем и ввели. не пользуюсь, так что что в нем "лишнего" навводили точно сказать не могу.