Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
3-1164966057
salexn
2006-12-01 12:40
2007.02.25
Embedded Yaffil и UDF


2-1170762053
Lera
2007-02-06 14:40
2007.02.25
Отключение от сети


1-1167327617
guitarist
2006-12-28 20:40
2007.02.25
Поиск строки в большом файле


15-1170427969
крек
2007-02-02 17:52
2007.02.25
Ну как открыть ps файл???


15-1170237500
suturn
2007-01-31 12:58
2007.02.25
Help!!!




   Наверх