Главная страница
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.025 c
14-94155
4i
2004-02-06 23:11
2004.02.29
MyDoom


7-94195
Dima_dvp
2003-10-24 01:27
2004.02.29
DircetX или OpenGL запущен или нет.


3-93771
zamkom
2004-02-02 20:44
2004.02.29
Corrupt file - other then header


3-93794
staryx
2004-02-03 15:38
2004.02.29
Работа с БД с запросов.


14-94184
Phrodo
2004-02-10 11:52
2004.02.29
исходники Regmon - на sysinternals их уже нет :(