Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.12;
Скачать: CL | DM;

Вниз

Событие при прокрутке 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
15-1137880245
lookin
2006-01-22 00:50
2006.02.12
Как по вашему, Кайли Миноуг хорошая певица?


8-1125408065
SpyBoy
2005-08-30 17:21
2006.02.12
Уровень звука


8-1124699608
Новичек11
2005-08-22 12:33
2006.02.12
Эквалайзер к MS Media Player


6-1131124608
S_T_E_P_A_N___
2005-11-04 20:16
2006.02.12
Подсчет трафика по сети


3-1134258885
orbal
2005-12-11 02:54
2006.02.12
DBGridEh - PickList