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