Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.015 c
3-93781
Я хороший ;)
2004-02-03 05:49
2004.02.29
Связь с DBListBox


3-93787
Санек
2004-02-03 18:43
2004.02.29
Как создать вычисляемое поле в рантайме ?


1-94019
Vitalik
2004-02-17 00:51
2004.02.29
Объектный подход при работе с файлами


1-93948
morev_s_a
2004-02-17 18:19
2004.02.29
Как напечатать несколько графиков на одной странице?


14-94149
Lancelot
2004-02-05 14:39
2004.02.29
Игрушка TRON 2.0




   Наверх