« ☆DBGridのカラム移動が変? | トップページ | ☆DBGridのDrawCell »

☆DBGridのスクロールバーを非表示にする。

カスタムコンポーネントでの処理です。 縦スクロールバーは、簡単に非表示にできましたが、横スクロールバーは、なかなか思うよう にできなかったです。

TDBGridからの派生コンポーネントで、UpdateScrollBarをoverrideしておきます。
  THRCustomDBGrid = class(TDBGrid)
  protected
    procedure UpdateScrollBar; override;


縦スクロールバーを非表示にする処理です。(inheritedはしない)
procedure THRCustomDBGrid.UpdateScrollBar;
var
  SI: TScrollInfo;
begin
  SI.cbSize := sizeof(SI);
  SI.fMask := SIF_RANGE;
  SI.nMin := 0;
  SI.nMax := 0;
  SetScrollInfo(Handle, SB_VERT, SI, False);
end;

横スクロールバーを消す処理です。
(SetScrollInfoをSB_HORZとしても非表示にはできませんでした。)
constructor THRCustomDBGrid.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ScrollBars := ssVertical; // この処理
  (略)
end;  

上記の両方を設定すると、無事、両方のスクロールバーが非表示になりました。
(ScrollBars := ssNoneにしてもなぜか縦スクロールが表示されました。)

以上のように、なんかScrollBarsやSetScrollInfo APIだけで簡単に設定できそうなのに、なかなか手強かったです。まだ、実際に使っていない処理なので、不具合があるかも知れないです。

[追記]
Delphi Q & A 掲示板のMr.XRAYさんの方法が、簡単でいいですね。
(property ScrollBars;を追記するだけ)

Delphi Q & A 掲示板
■ DBGridの横スクロールバーの非表示について

|

« ☆DBGridのカラム移動が変? | トップページ | ☆DBGridのDrawCell »