![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Подскажите как задействовать прокрутку мышью в DBСtrlGrid. Нужно чтобы один шаг ровнялся прокрутке на одну запись. Поискал по всему интернету но готового решения не нашел. Часто упоминается про OnMouseWheel но у этого компонента нет своего такого события. Может кто то уже успешно занимался этим вопросом?
|
|
#2
|
||||
|
||||
|
Нужно переопределить DoMouseWheel(). Либо в наследнике, либо через хак.
|
|
#3
|
|||
|
|||
|
Цитата:
А примера нет случайно? Я мышей не ловил раньше при помощи delphi)). Буду благодарен если научите |
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
|||
|
|||
|
Цитата:
Я покопаюсь еще в дебрях форума. Если не затруднит, напишите при возможности пример. |
|
#6
|
||||
|
||||
|
Не совсем то, что требуется, переход не точно по записям, но вот пример прокрутки с подкладкой глобальной процедуры колёсика
Код:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
if WindowFromPoint(MousePos) = DBCtrlGrid1.Handle then
if WheelDelta > 0 then
DBCtrlGrid1.Perform(WM_VScroll, SB_LINEUP, 0)
else
DBCtrlGrid1.Perform(WM_VScroll, SB_LINEDOWN, 0);
end; |
|
#7
|
||||
|
||||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, dbcgrids, DB, DBTables;
type
TDBCtrlGrid = class(DBCGrids.TDBCtrlGrid)
protected
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override;
end;
TForm1 = class(TForm)
DBCtrlGrid1: TDBCtrlGrid;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
Table1: TTable;
DataSource1: TDataSource;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TDBCtrlGrid }
function TDBCtrlGrid.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
MousePos: TPoint): Boolean;
begin
if WheelDelta>0 then DataSource.DataSet.Prior else DataSource.DataSet.Next;
Result:=True;
end;
end. |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
delphi-explorer (14.12.2016)
| ||
|
#8
|
|||
|
|||
|
Спасибо!! Я понял как это должно работать. Только почему то выдается ошибка: [DCC Error] Form1.pas(157): E2065 Unsatisfied forward or external declaration: 'TForm1.DoMouseWheel' на строке:
Код:
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override; В виду своей неопытности в объявлении классов не могу разобраться что лишнее убрать из деклараций в форме. Последний раз редактировалось delphi-explorer, 14.12.2016 в 21:12. |
|
#9
|
||||
|
||||
|
Да нет, пример NumLock`а работает без ошибок, вот проверка под ADO
|
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
delphi-explorer (14.12.2016)
| ||
|
#10
|
|||
|
|||
|
Цитата:
|
|
#11
|
||||
|
||||
|
Цитата:
|
|
#12
|
|||
|
|||
|
Цитата:
Да).Form1 туда случайно попало. Там E2065 Unsatisfied forward or external declaration: 'TDBCtrlGrid.DoMouseWheel' Последний раз редактировалось delphi-explorer, 14.12.2016 в 20:44. |
|
#13
|
|||
|
|||
|
Все, разобрался! Объявил функцию в классе как в примере NumLock, а реализацию не добавил и пытался компилировать. Большое спасибо NumLock и Alegun за помощь!
Вот думаю почему сразу разработчик не добавил DbCtrlGrid такую полезную возможность как скрол? |
|
#14
|
||||
|
||||
|
Если есть желание, можешь глянуть в сторону EhLib.
|
|
#15
|
||||
|
||||
|
Сейчас на работе с EhGrid на cxGrid проекты переписываем, чтобы забыть EhLib как страшный сон
![]() |