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

Вниз

Глюк DBGrid (или несинхронность указателя и подсветки)   Найти похожие ветки 

 
Nobody2004   (2004-02-18 14:20) [0]

Может, кто-нибудь сталкивался с такой проблемой:
в DBGrid слева имеется индикатор текущей записи в виде черного треугольника.
При перемещении курсора по записям с помощью стрелки либо с помощью левой кнопки мыши, естественно, синхронно передвигаются и индикатор, и подсветка. Но если использовать ролик мыши (который между левой и правой кнопками), то передвигается только подсветка, а индикатор остается на месте.
Пользователь считает, что текущей записью является та, на которой подсветка,но на самом деле текущая запись - это та запись, на которую указывает индикатор.
Если поочередно использовать и ролик мыши, и стрелки вверх-вниз на клавиатуре,то можно добиться того, что появится несколько индикаторов. Как бороться с таким глюком,то есть как сделать так, чтобы при использовании ролика мыши указатель и подсветка также двигались бы синхронно, как при использовании, например, клавиш "стрелка вверх/вниз"?
"Не использоват TDBGrid" - этот вариант не подходит, т.к. уже давно имеется программа, написанная не мной, которая более-менее стабильно работает, причем почти на каждом событии грида висит какой-либо код, в общем, если отказаться от DBGrid, будет много геморроя.


 
Плохиш   (2004-02-18 14:26) [1]

Вариант один, который не подходит


 
Плохиш   (2004-02-18 14:27) [2]

Хотя, есть ешё один: Заменить все мышки на мышки без колёсиков ;-)


 
Nobody2004   (2004-02-18 14:31) [3]

Н-да, мля. Как все запущено ...


 
SergP ©   (2004-02-18 14:42) [4]

>Плохиш (18.02.04 14:27)
>Хотя, есть ешё один: Заменить все мышки на мышки без колёсиков ;-)

Или на всех мышках колесики пообламывать....


 
Semin Aleksei   (2004-02-18 15:14) [5]

Можно сделать наследника (Delphi5)

TMyGrid = class(TDBGrid)
private
procedure WMMouseWheel(var Message: TWMMouseWheel); message WM_MOUSEWHEEL;
end;

...

procedure TDBSGrid.WMMouseWheel(var Message: TWMMouseWheel);
begin
{Можно доп. проверить на nil DataSource и DataSet}
if DataSource.DataSet.Active then begin
if Message.WheelDelta > 10 then DataSource.DataSet.Prior;
if Message.WheelDelta < -10 then DataSource.DataSet.Next;
end;
end;


 
Плохиш   (2004-02-18 15:20) [6]

>Semin Aleksei (18.02.04 15:14) [5]

А вопрос до конца прочитать?


 
Semin Aleksei   (2004-02-18 15:46) [7]

Да, не дочитал...
Можно с помощью св-ва WindowProc (TDBGrid) перехватить
функцию окна т.е. грида и написать там обработку колесика.

Если в проекте все формы с гридом наследованы от одной, то
можно написать универсальный код в предке.


 
Nobody2004   (2004-02-18 16:16) [8]

А что, изменений при таком подходе будет мало.
Спасибо, попробую.

>Можно сделать наследника (Delphi5)

>TMyGrid = class(TDBGrid)
> private
> procedure WMMouseWheel(var Message: TWMMouseWheel); message >WM_MOUSEWHEEL;
>end;

>...
>
>procedure TDBSGrid.WMMouseWheel(var Message: TWMMouseWheel);
>begin
> {Можно доп. проверить на nil DataSource и DataSet}
> if DataSource.DataSet.Active then begin
> if Message.WheelDelta > 10 then DataSource.DataSet.Prior;
> if Message.WheelDelta < -10 then DataSource.DataSet.Next;
> end;
>end;


 
Плохиш   (2004-02-18 16:25) [9]


Nobody2004 (18.02.04 16:16) [8]
>А что, изменений при таком подходе будет мало.

Да совсем ничего, всего-то заменить во всём проекте TDBGrid на TMyGrid. Желаю успехов ;-)



Страницы: 1 вся ветка

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
4-94253
UNIVERSAL
2003-12-22 09:08
2004.02.29
Ошибка в Делфи 5


1-93856
Khabibulin
2004-02-16 17:02
2004.02.29
ScrollBars


1-93875
Zeus_Chess
2004-02-16 12:50
2004.02.29
ГИБРИД ИНИШНИКА И ТИПИЗИРОВАННОГО ФАЙЛА


1-93855
Grinder
2004-02-16 16:46
2004.02.29
Resize в ListView


1-93973
zamkom
2004-02-18 14:10
2004.02.29
Оптимизация кода.