Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-94053
Silentor
2003-12-24 20:47
2004.02.29
класс TгарантированнядоставкаUDP ?


1-93898
Tatyana
2004-02-16 00:37
2004.02.29
Событие.


4-94235
BaDeVlad
2003-12-22 09:05
2004.02.29
Окно в BackGround е


14-94139
Goida
2004-02-04 15:52
2004.02.29
Кто знает, где можно хорошую музыку скачать?


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский