TDBCtrlGrid
对鼠标滚轮完全没有反应。
我试过这个:
procedure TForm1.FormMouseWheel(Sender: TObject;
Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean);
begin
if DBCtrlGrid1.ClientRect.Contains(DBCtrlGrid1.ScreenToClient(MousePos)) then
begin
DBCtrlGrid1.ScrollBy(0, WheelDelta);
Handled := True;
end;
end;
控件网格现在滚动了,但它并没有改变数据集中的位置,而是将其内容移出客户端矩形,这看起来很丑陋。
如何在
TDBCtrlGrid
上启用鼠标滚轮滚动?
作为解决方法,您可以改为滚动数据集:
procedure TForm1.FormMouseWheel(Sender: TObject;
Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean);
var
I: Integer;
Grid: TDBCtrlGrid;
DataSet: TDataSet;
begin
Grid := DBCtrlGrid1;
if not Grid.ClientRect.Contains(Grid.ScreenToClient(MousePos)) then
Exit;
if not Assigned(Grid.DataSource) then
Exit;
DataSet := Grid.DataSource.DataSet;
if DataSet = nil then
Exit;
for I := 0 to Abs(WheelDelta div 256) - 1 do
begin
if WheelDelta > 0 then
DataSet.Prior
else
DataSet.Next;
end;
Handled := True;
end;
如果您的表单上也有一个隐藏的
DBGrid
,并且连接到相同的数据源,则有一种更简单的方法。
在DBCtrlGrid
的点击事件中:
DBGrid.SetFocus;
DBGrid
好像只要被聚焦就可以接收到鼠标滚轮事件。 DBCtrlGrid
然后随着记录的变化很好地滚动。