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

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

Как отследить перемещение к предыдущей записи набора данных? [D7, XP]


dimon777 ©   (2006-12-19 15:28:00) 

Необходимо при перемещении к предыдущей записи набора данных выполнять некоторое действие. Пытаюсь работать с событием Table.AfterScroll. Как в этом случае распознать когда пользователь перемещается к предыдущей записи ("вверх" по набору данных), а когда к следующей ("вниз")?


MsGuns   (2006-12-19 17:36:00) [1]

А без Ух! либа никак нельзя, эге ж ?


dimon777   (2006-12-19 17:22:00) [2]

>Anatoly Podgoretsky ©   (19.12.06 17:13) [9]

Сообщил, еще где-то в октябре.

У EhLib редко выходят обновления.

У Дмитрия Большакова, как пишут на форуме EhLib, ребёнок недавно родился (Что, конечно,  здорово, и мои поздравления ему),  но забот ему сейчас тем более хватает. Когда это руки дойдут до исправления.
Вот и пытаюсь пока самостоятельно как-то исправить ситуацию.


Anatoly Podgoretsky   (2006-12-19 17:13:00) [3]

> dimon777  (19.12.2006 17:04:08)  [8]

Если ты обнаружил глюк то надо сообщить об этом авторам.


dimon777   (2006-12-19 17:04:00) [4]

> Anatoly Podgoretsky ©   (19.12.06 16:40) [7]

Для меня исходники EhLib слишком сложная вещь.

Ну открыл я DBGridEh.pas версий 3.6 и 4.1.  Поиск по F3 "HideDuplicates" выявил следующие отличия:

1) function HaveHideDuplicates: Boolean;  в версии 4.1 объявлена в разделе protected TCustomDBGridEh = class, а в версии 3.6 в procedure TCustomDBGridEh.Scroll(Distance: Integer);

2) В 4.1 procedure TCustomDBGridEh.Scroll(Distance: Integer);

заремлено

(*if (FooterRowCount > 0) then
       begin
         ClipRegion := BoxRect(0, TopDataOffset, ColCount - 1, RowCount - FooterRowCount - 2);
         ClipRegion.Right := ClientWidth;
         WindowsScrollWindowEx(Handle, 0, -RowHeight * Distance, NewRect, ClipRegion,
           0, {nil,} SW_Invalidate);
       end else*)
         WindowsScrollWindowEx(Handle, 0, -RowHeight * Distance, NewRect, NewRect,
           0, {nil,} SW_Invalidate);

3)В этой же процедуре в версии 4.1  NewRect := BoxRect(0, TopDataOffset, ColCount - 1, RowCount-1);  
а в 3.6 NewRect := BoxRect(0, TopDataOffset, ColCount - 1, 1000);

Мне вобщем это ни о чём не говорит.

Как вообще понять как происходит отрисовка Gridа? В какой последовательности происходят все события?
Отладчик не "вываливается" в модули DBGridEh, если идти по F7 -Trace into


Anatoly Podgoretsky   (2006-12-19 16:40:00) [5]

> dimon777  (19.12.2006 16:37:06)  [6]

Может вместо того, чтобы чесать левое ухо правой рукой заняться первопричиной, оно правильнее.


dimon777   (2006-12-19 16:37:00) [6]

>Anatoly Podgoretsky ©   (19.12.06 16:16) [5]

Само собой. Grid при обработке этих событий иногда "мерцает" т.е. иногда заметно как он прорисовывает горизонтальные линии на этом столбце, а потом убирает. Зачем же ему мерцать еще и при перемещении "вверх" по набору данных?

Конечно эффективней было бы глянуть в  Ehlibовские исходники и исправить то, почему этот глюк появился в 4.1, ведь в 3.6 его не было. Но мне не удалось понять его причину... Пусть Большаков сам разбирается.


Anatoly Podgoretsky   (2006-12-19 16:16:00) [7]

> dimon777  (19.12.2006 16:12:04)  [4]

Ну мучайся, кроме того обработка событий и анализ это не бесплатно.


dimon777   (2006-12-19 16:12:00) [8]

При перемещении сверху вниз этого глюка нет, он появляется только если перемещаться снизу вверх. Зачем же нагружать лишними событиями?


Anatoly Podgoretsky   (2006-12-19 16:04:00) [9]

> dimon777  (19.12.2006 15:55:02)  [2]

Зачем для этого определять направление?


dimon777   (2006-12-19 15:55:00) [10]

Странная, конечно, кто ж спорит :)

Это связано с глюком со свойством DBGridEh.Columns.HideDuplicates:=True в версии EhLib4.1. При перемещении "вверх" по набору данных появляются горизонтальные линии на столбце, которых не должно быть. Вот я и пишу в событии Table.AfterScroll

DBGridEh1.Columns[2].HideDuplicates:=False;
DBGridEh1.Columns[2].HideDuplicates:=True;


Извращение, конечно, но помогает. Можешь посоветовать что-то получше?


Desdechado   (2006-12-19 15:34:00) [11]

в before scroll запоминать текущую, в afterscroll сравнивать запомненное с новой
хотя странная задача...


Наверх

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