1

水平スクロールバーが使用されるたびに、いくつかのコードを実行する必要があります。DBGrid でそのようなイベントが見つかりませんでした。何かアドバイスいただけますか?

4

4 に答える 4

6

TCustomGridにはWMHScrollプロシージャがありますが、これはプライベートです。DBGridでは使用できません。
独自のTDBGrid子孫を作成し、独自に実行する必要があります

procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;

またはいくつかの深刻な悪いハッキングを行います...

更新:コードをこっそり入れるためのトリック/ハック...

[...]
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, Grids, DBGrids;

    type
      // Hack to redeclare your TDBGrid here whitout the the form designer going mad
      TDBGrid = class(DBGrids.TDBGrid)
        procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;
      end;

      TForm8 = class(TForm)
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        ADODataSet1: TADODataSet;
        ADOConnection1: TADOConnection;
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form8: TForm8;

    implementation

    {$R *.dfm}

    { TDBGrid }

    procedure TDBGrid.WMHScroll(var Msg: TWMHScroll);
    begin
      case Msg.ScrollCode of
        SB_ENDSCROLL: OutputDebugString('SB_ENDSCROLL') ;
        SB_LEFT:OutputDebugString('SB_LEFT');
        SB_RIGHT:OutputDebugString('SB_RIGHT');
        SB_LINELEFT:OutputDebugString('SB_LINELEFT');
        SB_LINERIGHT:OutputDebugString('SB_LINERIGHT');
        SB_PAGELEFT:OutputDebugString('SB_PAGELEFT');
        SB_PAGERIGHT:OutputDebugString('SB_PAGERIGHT');
        SB_THUMBPOSITION:OutputDebugString('SB_THUMBPOSITION');
      end;
      inherited; // to keep the expected behavior
    end;
[...]

Update2:特別なTDBGridコードを別のユニットに移動できることに注意してください(推奨)。このユニット名は、フォームのuses句にDBGridsの後に必ず入れてください

于 2009-11-12T19:00:09.177 に答える
5

多分これが役立つでしょう。通常の TStringGrid のスクロール イベントをトラップする例を示します。2 つの TStringgrid のスクロールを同期しますか?

于 2009-11-12T18:08:10.393 に答える
1

編集:明らかに間違った答えです。垂直スクロールバーはキャッチしますが、水平スクロールバーはキャッチしません。

DBGrid レベルではキャッチしません。添付された TDataSet の BeforeScroll または AfterScroll でキャッチします。DBGrid 内で発生するスクロールバー、上下矢印キー、ページアップおよびページダウンキーなどで起動します。

于 2009-11-12T18:12:18.167 に答える
0

現時点では確認できませんが、記憶が正しければイベントは存在しますが、公開されていません。TDBGrid から派生し、スクロール バー イベントを発行するコントロールを作成してみてください。

于 2009-11-12T16:54:07.123 に答える