Форум: "Основная";
Текущий архив: 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