水平スクロールバーが使用されるたびに、いくつかのコードを実行する必要があります。DBGrid でそのようなイベントが見つかりませんでした。何かアドバイスいただけますか?
4 に答える
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の後に必ず入れてください。
多分これが役立つでしょう。通常の TStringGrid のスクロール イベントをトラップする例を示します。2 つの TStringgrid のスクロールを同期しますか?
編集:明らかに間違った答えです。垂直スクロールバーはキャッチしますが、水平スクロールバーはキャッチしません。
DBGrid レベルではキャッチしません。添付された TDataSet の BeforeScroll または AfterScroll でキャッチします。DBGrid 内で発生するスクロールバー、上下矢印キー、ページアップおよびページダウンキーなどで起動します。
現時点では確認できませんが、記憶が正しければイベントは存在しますが、公開されていません。TDBGrid から派生し、スクロール バー イベントを発行するコントロールを作成してみてください。