Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Событие при прокрутке 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... кто его знает, может в нем и ввели. не пользуюсь, так что что в нем "лишнего" навводили точно сказать не могу.


Наверх

Титульная страница Поиск, карта сайта Написать письмо