Главная страница
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.02 c
4-94230
DelphiN!
2003-12-20 20:34
2004.02.29
Как послать сообщение открытому в данный момент окну


1-93983
ses
2004-02-16 22:58
2004.02.29
Разъезжаются кнопки на форме при запуске на другом компьютере


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


6-94077
Gefest
2003-12-22 20:35
2004.02.29
Массив по сети


6-94088
S@shka
2003-12-25 10:01
2004.02.29
Вопрос по TCP