2013-02-25 4 views
2

TDBGrid 구성 요소가 있습니다. 그리드의 열 크기를 조정할 때 트리거되는 이벤트를 잡아야합니다.TDBGrid 열 크기 조정 이벤트가 트리거 된 곳

+1

나는이 질문을 정말로 이해할 수 없다. 컨트롤이 이벤트를 어떻게 발생시키는 지 묻고 있습니까? 그렇다면 소스 코드를 살펴 보는 것만 큼 쉽습니다. –

+0

이제는 더 분명해야합니다 :) – RBA

+1

@RBA - 확실히 분명합니다. 하지만 OP가 물어 보는 질문이 진짜입니까? –

답변

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