Текущий архив: 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.47 MB
Время: 0.031 c