TDBGrid 구성 요소가 있습니다. 그리드의 열 크기를 조정할 때 트리거되는 이벤트를 잡아야합니다.TDBGrid 열 크기 조정 이벤트가 트리거 된 곳
2
A
답변
3
이벤트를 얻을 수있는 유일한 장소는 당신을 TDBGrid의 후손을 만들고 직접 이벤트를 구현해야 ColWidthChanged ...
type
TDBgrid=Class(DBGrids.TDBGrid)
private
FColResize:TNotifyEvent;
procedure ColWidthsChanged; override;
protected
Property OnColResize:TNotifyEvent read FColResize Write FColResize;
End;
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
DBGrid1: TDBGrid;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
private
procedure ColResize(Sender: TObject);
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TDBgrid }
procedure TDBgrid.ColWidthsChanged;
begin
inherited;
if Assigned(FColResize) then FColResize(self);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DBgrid1.OnColResize := ColResize;
end;
procedure TForm1.ColResize(Sender:TObject);
begin
Caption := FormatDateTime('nn:zzz',now) ;
end;
3
를 오버라이드 (override) 할 것으로 보인다. 이런 식으로 뭔가가 :
unit MyDBGrid;
interface
type
TMyDBGrid = class(TDBGrid)
private
FOnColResize: TNotifyEvent;
protected
procedure ColWidthsChanged; override;
public
published
property OnColResize: TNotifyEvent read FOnColResize write FOnColResize;
end;
implementation
{ TMyDBGrid }
procedure TMyDBGrid.ColWidthsChanged;
begin
inherited;
if (Datalink.Active or (Columns.State = csCustomized)) and
AcquireLayoutLock and Assigned(FOnColResize) then
FOnColResize(Self);
end;
end.
이 내가 그것을 테스트하기 위해 지금 시간이 없어, 작동합니다.
+0
감사합니다. +1. EndLayout이 필요한 BeginLayout을 호출하기 때문에 AquireLayoutLock의 효과를 취소 할 필요가 없습니까? – DaveBoltman
나는이 질문을 정말로 이해할 수 없다. 컨트롤이 이벤트를 어떻게 발생시키는 지 묻고 있습니까? 그렇다면 소스 코드를 살펴 보는 것만 큼 쉽습니다. –
이제는 더 분명해야합니다 :) – RBA
@RBA - 확실히 분명합니다. 하지만 OP가 물어 보는 질문이 진짜입니까? –