Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
ВнизГлюк 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c