![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как прокручивать TGrid колесом мыши?
Vi0let © (2003-12-30 14:15:00)
А то, при движении колеса, меняется активная строка только в видимом списке грида, а сам список не прокручивается...
Vi0let (2004-01-03 11:13:00) [1]
благодарю, всё получилось
sniknik (2004-01-01 18:58:00) [2]
....
А ивано-франковец ему отвечает: ну, так это, короче, не проблема.
Это вы неделю не покурите, и она сама по себе рассосется.
Тут все растаманы(наркоманы) как зашумели: та, шо ты гонишь! Прямо как психиатр, в натуре. Это же как можно, целую неделю не курить, это же вобще умом поехать можно. А ивано-франковец им говорит: тогда давайте другой способ, менеее напряжный.
.... ;о))
© сага и мыше и наркомане.
еще способ менее напряжный(?) сам только что сделал(вроде работает, с тем что в десигне), конечно наверняка ктото чемто подобным уже давно пользуется.
но вообще мне удобнее первым, т.к. не только прокрутку перекрываю обычно, еще и DrawCell, WMVScroll и и еше коечего цепляю (тут уж проше в рантайм создать и параметры прописать, меньше получается).
type
TMyDBGrid = class(TDBGrid);
TForm1 = class(TForm)
.....
procedure FormCreate(Sender: TObject);
private
procedure MyMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TMyDBGrid(DBGrid1).OnMouseWheel:= MyMouseWheel;
end;
procedure TForm1.MyMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
if (Sender is TDBGrid) and TDBGrid(Sender).DataSource.DataSet.Active then
begin
if WheelDelta > 10 then TDBGrid(Sender).DataSource.DataSet.Prior;
if WheelDelta < -10 then TDBGrid(Sender).DataSource.DataSet.Next;
Handled:= true;
end;
end;
Vi0let (2004-01-01 14:56:00) [3]
sniknik
> естественно дальше нужно TMyDBGrid вместо TDBGrid использовать
я так понимаю, в этом случаем у меня 2 варианта:
1) создавать объект TMyDBGrid в рантайме, и все значения свойств кодом задавать
2) создавать компонент наследующий грид с новым свойством
я правильно понял?
а нет ли менее хлопотного варианта?
dimm22 (2003-12-30 19:38:00) [4]
DBGridEh из библиотеки EhLib. Много чего полезного умеет делать.
Vi0let (2003-12-30 19:21:00) [5]
интересно, попробую ...
sniknik (2003-12-30 14:57:00) [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 использовать.
asp (2003-12-30 14:29:00) [7]
Переопределяй от TWinControl"а в protected
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
MousePos: TPoint): Boolean; dynamic;
function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; dynamic;
function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; dynamic;
Vemer (2003-12-30 14:23:00) [8]
Либо написать общий обработчик колеса, который нажатия клавиш вверх/вниз имитирует, образец вроде на сайте АП есть.
У меня работает.
Vi0let (2003-12-30 14:22:00) [9]
как реализовать обработку MouseWheel ?
asp (2003-12-30 14:20:00) [10]
Либо воспользоваться RxDBGrid, либо наследовать от стандартного свой, с обработкой MouseWheel.
Vi0let (2003-12-30 14:19:00) [11]
... TDBGrid