Главная страница
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.031 c
15-1170553551
randomizer
2007-02-04 04:45
2007.02.25
Как получить случайное Integer и Single ?


3-1165219427
DelphiLexx
2006-12-04 11:03
2007.02.25
Foreign Key определить все зависимые элементы


6-1158428475
kernel
2006-09-16 21:41
2007.02.25
Console&amp;Socket


8-1151000056
гость333
2006-06-22 22:14
2007.02.25
покадровое воспроизведение видео


4-1160740728
Psychedelic
2006-10-13 15:58
2007.02.25
Wm_NCLBUTTONUP не срабатывает