Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];

Вниз

Как в DBGrid отловить MouseWheel?   Найти похожие ветки 

 
Alex_C   (2008-12-10 14:43) [0]

События OnMouseWheel у DBGrid нет. Как отловить?


 
KilkennyCat ©   (2008-12-10 14:45) [1]

Как и в любом другом компоненте.


 
Alex_C   (2008-12-10 15:07) [2]

Как в другом не получается.
procedure CMMouseWheel(var Message: TCMMouseWheel); message CM_MOUSEWHEEL;
вот при использовании колесика мышки в Memo - попадаем в эту ф-цию, а вот в DBGrid - нет.


 
Dimka Maslov ©   (2008-12-10 15:58) [3]

события от движения мыши и нажатия кнопок направляются в то окно, над которым расположен курсор, но события от колеса мыши посылаются в активное окно (как и события от клавиатуры).


 
DVM ©   (2008-12-10 23:55) [4]


> Alex_C

Отловить то можно, но работать оно все равно будет не ахти.


 
Германн ©   (2008-12-11 01:01) [5]


> DVM ©   (10.12.08 23:55) [4]
>
>
> > Alex_C
>
> Отловить то можно, но работать оно все равно будет не ахти.
>
>

Почему "не ахти"?


 
DVM ©   (2008-12-11 10:52) [6]


> Германн ©   (11.12.08 01:01) [5]

Да как то странно работает. Сколько не пытался прикрутить - не выходит как надо. В результате плюнул на это.
В идеале, хотелось бы, чтобы при прокрутке колесиком происходили все те же действия, что при нажатии стрелок вверх, вниз на клавиатуре. Т.е и текущая выбранная строка менялась и грид прокручивался при необходимости. Такого поведения мне добиться не удалось. Либо одно работает, либо другое. Возможно делал я не так.


 
DVM ©   (2008-12-11 11:01) [7]


> Германн ©   (11.12.08 01:01) [5]

Проще всего повесить на OnMessage TApplicationEvents следующее:

procedure TfrmMain.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
begin
 if Msg.message = WM_MOUSEWHEEL then
   begin
     Msg.message := WM_KEYDOWN;
     Msg.lParam := 0;
     if Msg.wParam > 0 then
       Msg.wParam := VK_UP
     else
       Msg.wParam := VK_DOWN;
     Handled := False;
   end;
end;

Ну можно еще проверку ввести, что грид в фокусе и т.д. Оно работает. Но почему то не всегда. Иногда перестает. Т.е грид прокручивается, а вот перемещения по записям уже не происходит.


 
Германн ©   (2008-12-12 00:46) [8]


> DVM ©   (11.12.08 10:52) [6]
>
>
> > Германн ©   (11.12.08 01:01) [5]
>
> Да как то странно работает.


> Т.е грид прокручивается, а вот перемещения по записям уже
> не происходит.
>

А с чего бы возникло бы "перемещение по записям"? Будет свободная минутка посмотри генофонд. И узри что в TDBGrid не переопределён ни один метод связанный с колесом мышки. Они просто унаследованы без изменений у TCustomGrid. А TCustomGrid, как ты сам понимаешь, знать ничего не знает о каких-то там "наборах данных".


 
DVM ©   (2008-12-12 10:38) [9]


> А с чего бы возникло бы "перемещение по записям"?

я бы понял, если бы оно вообще не возникало, а ведь возникает но не всегда. Вот это странно. Кстати, раз уж зашел разговор, я еще раз не поленился, посмотрел и придумал вроде надежный способ:

Так:

type
 TMyClass = class(TControl);

procedure TfrmMain.DBGridNewProc(var Message: TMessage);
var
 d: short;
begin
 if (Message.Msg = WM_MOUSEWHEEL) then
   begin
     d := HIWORD(Message.wParam);
     d := d div WHEEL_DELTA;
     DbGrid1.DataSource.DataSet.MoveBy(-d)
   end
 else
   TMyClass(DBGrid1).WndProc(Message);
end;

Ну и в

procedure TfrmMain.FormCreate(Sender: TObject);
begin
 DBGrid1.WindowProc := DBGridNewProc;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
1-1229676379
parasolka
2008-12-19 11:46
2009.12.20
Фокус в DBGrid


1-1228947824
angvelem
2008-12-11 01:23
2009.12.20
C to pascal


15-1255770792
Вайка
2009-10-17 13:13
2009.12.20
S. T. A. L. K. E. R. Зов Припяти. Как Вам?


2-1256897496
pesad
2009-10-30 13:11
2009.12.20
Быстрая графика


15-1256327662
SkyN
2009-10-23 23:54
2009.12.20
компонент простейшего dns сервера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский