Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

Скрулл в DBGrid   Найти похожие ветки 

 
sergeyst ©   (2007-02-09 09:24) [0]

Всем привет! Как в DBGrid сделать перемещение по записям колесиком мышки (т.е. WM_VSCROLL получает грид и говорит квери, к которому прицеплен next или prev)?


 
Ega23 ©   (2007-02-09 09:58) [1]

Просмотри внимательно свой вопрос. Ты уже сам на него ответил.


 
sergeyst ©   (2007-02-09 10:19) [2]


> Ega23 ©   (09.02.07 09:58) [1]

На словах, а как это написать?


 
Ega23 ©   (2007-02-09 10:20) [3]

буквами


 
sergeyst ©   (2007-02-09 10:51) [4]

Ega23 ©   (09.02.07 10:20) [3]
Потомка сделать не получится - как я там укажу Query? Или я ошибаюсь? А если перехватывать это событие в приложении, то как отследить, что мышь на гриде? По координатам? Вроде ясно, а как-нибудь по-другому можно?


 
Плохиш ©   (2007-02-09 11:08) [5]


> sergeyst ©   (09.02.07 10:51) [4]
> Потомка сделать не получится - как я там укажу Query?

А как указываешь его в DBGrid?

А потомка делать придётся и перекрывать в нём методы DoMouseWheelDown и DoMouseWheelUp.


 
Desdechado ©   (2007-02-09 11:09) [6]

цитирую sniknik ©   (30.12.03 14:57) [6]

TMyDBGrid = class(TDBGrid)
  procedure WMMouseWheel(var Msg: TWMMouseWheel); message WM_MOUSEWHEEL;
end;

procedure TMyDBGrid.WMMouseWheel(var Msg: TWMMouseWheel);
begin
if DataSource.DataSet.Active then begin
  if Msg.WheelDelta > 10 then DataSource.DataSet.Prior;
  if Msg.WheelDelta < -10 then DataSource.DataSet.Next;
end;
end;

естественно дальше нужно TMyDBGrid вместо TDBGrid использовать.


 
sniknik ©   (2007-02-09 11:55) [7]

если > "Потомка сделать не получится" (хотя и не понял при чем тут Query ;) то можно просто переопределить метод в стандартном
примерно так
type
 TMyDBGrid = class(TDBGrid);

 TForm1 = class(TForm)
   ....
   procedure MouseWheel(Sender: TObject; Shift: TShiftState;
     WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
   ....
 end;

....
procedure TForm1.MouseWheel(Sender: TObject; Shift: TShiftState;
 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
 Handled:= true;
 with TDBGrid(Sender) do
   if WheelDelta > 0 then Perform(WM_KEYDOWN, VK_UP, 0)
                     else Perform(WM_KEYDOWN, VK_DOWN, 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 TMyDBGrid(DBGrid1).OnMouseWheel:= MouseWheel;
end;


Desdechado ©   (09.02.07 11:09) [6]
это кстати не самый хороший код ... :), нет проверки на "подключенность" DataSet-а, или DataSource (если не подключить будет вылетать по ошибке)
просто давалось как попроще "заготовка", разъяснить в принципе. (выше код в такой проверке не нуждается но зато могут быть лишние события от "псевдонажатий" клавиш)


 
sergeyst ©   (2007-02-09 12:06) [8]

Всем спасибо


 
Desdechado ©   (2007-02-09 12:14) [9]

> просто давалось как попроще "заготовка", разъяснить в принципе.
дык, и я тоже :)


 
Германн ©   (2007-02-09 15:41) [10]

Имхо, лучше один раз сделать потомка DBGrid с переопределенными методами DoMouseWheelUp и DoMouseWheelDown, чем каждый раз в новой форме писать метод MouseWheel.
Но проще всего перейти на BDS. :)



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

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
8-1151588962
Gotami
2006-06-29 17:49
2007.02.25
Позиция курсора


15-1170225138
vitv
2007-01-31 09:32
2007.02.25
В чём преимущества MSSQL2000 над IB6X(FB1.5.X)?


3-1165212703
DelphiLexx
2006-12-04 09:11
2007.02.25
TFIBTransaction узнать есть ли изменения


2-1170530626
Лебедев
2007-02-03 22:23
2007.02.25
memo


15-1170235768
RustamK
2007-01-31 12:29
2007.02.25
Bandy 2007