☆DBGridのマウスホイール
Delphi7で作成したプログラムが、WindowsXP上でマウスホイールできないので、なんとかならないかと相談を受けました。このプログラムは、社内用に開発したもので、OSは、Windows98(SE)、2000Pro、XP(Pro)、メーカーも様々な多数のマシン上で使っていますが、今まで問題になったことはありませんでした。しかし、この度、新規に購入したマシン全てでマウスホイールできないという現象が発生しましたので、下記のようにCM_MOUSEWHEELメッセージを処理して対応しました。
TMyDBGrid = class(TDBGrid) private procedure CMMouseWheel(var Unused: TCMMouseWheel); message CM_MOUSEWHEEL; (略) procedure TMyDBGrid.CMMouseWheel(var Unused: TCMMouseWheel); var iRow,iRowCount:integer; Delta: integer; begin Delta := Unused.WheelDelta; if (0 < Delta) then //上スクロール begin if (Self.Row <> 1) then //最上段でない場合 //最上段に移動させます。 Self.DataLink.DataSet.MoveBy(-(Row-1)) else //3行スクロール Self.DataLink.DataSet.MoveBy(-3) end else begin //下スクロール iRowCount:= Self.RowCount - Self.FixedRows; //表示行数の計算 if (iRowCount > Self.Row) then begin //最下段に移動させます。 iRow:=Self.Row; Self.DataLink.DataSet.Moveby(iRowCount-iRow); end else //3行スクロール Self.DataLink.DataSet.MoveBy(3); end; Unused.Result := 1; end;
| 固定リンク