« ■Delphi 8付属InterBase7.1SP2 | トップページ | ■Delphi8完全開発ガイド »

☆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;

|

« ■Delphi 8付属InterBase7.1SP2 | トップページ | ■Delphi8完全開発ガイド »