Q&A

  • 컴포넌트 제작 관련입니다.
아래와 같이 만들었는데 안되네요. 만들려고 하는것은 Panel 위에 Panel과 DBGrid 를 올려서 하나의 컴포넌트로 만들고 싶습니다.

아래 소스중에서 어디가 잘못 된건지 알수가 없네요.(컴포넌트 처음 만들어 보는건데요. 아주 초보용으로 갈켜 주세요.)

<!--CodeS-->
unit TntmailDBGrid;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, DBGrids, DB;

type
  TTntmailDBGrid = class(TPanel)
  private
    { Private declarations }
    FDBGrid : TDBGrid;
    FFindPanel : TPanel;
    FDataSource : TDataSource;
    FDataSet : TDataSet;
    procedure SetFDataSet(Value:TDataSet);
  protected
    { Protected declarations }


  public
    { Public declarations }
    Constructor Create(AOwner:TComponent); override;
    Destructor Destroy; override;
  published
    { Published declarations }
    Property DataSet : TDataSet read FDataSet write SetFDataSet;
  end;


procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Tntmail', [TTntmailDBGrid]);
end;

{ TTntmailDBGrid }

constructor TTntmailDBGrid.Create(AOwner: TComponent);
begin
  inherited;
  BevelInner := bvNone;
  BevelOuter := bvNone;
  FFindPanel := TPanel.Create(AOwner);
//  FFindPanel.Align := alTop;
  FFindPanel.BevelInner := bvLowered;
  FFindPanel.BevelOuter := bvRaised;
  FFindPanel.Parent := Self;
  FDataSource := TDataSource.Create(AOwner);
  
  FDataSource.DataSet := FDataSet;
  FDBGrid := TDBGrid.Create(AOwner);
  FDBGrid.Parent := Self;
//  FDBGrid.Align := alClient;
  FDBGrid.DataSource := FDataSource;

//  FDBGrid.DataSource := FDataSource;

end;

destructor TTntmailDBGrid.Destroy;
begin
  FFindPanel.Free;
  FDBGrid.Free;
  FDataSource.Free;
  inherited;
end;



procedure TTntmailDBGrid.SetFDataSet(Value: TDataSet);
begin
  FDataSet := Value;
  FDataSource.DataSet := Value;
end;

end.
<!--CodeE-->
1  COMMENTS
  • Profile
    최용일 2005.12.02 05:51
    안녕하세요. 최용일입니다.

    그냥 봐선 어디가 잘못된것인지 잘 모르겠네요...

    무엇이 어떻게 안된다하는것에 대해서 구체적으로 설명해주셔야 할듯...

    한가지 눈에 띄는 점은 DataSet속성이 내부에서 자체적으로 생성하는것이 아니라 외부의 링크를 받아서 처리하는것 같은데 이럴때는 Notification메소드를 오버라이드해서 처리해줘야 합니다.
    이 메소드는 컴포넌트가 생성되거나 삭제될때 통지하는 역활을 합니다. 생성쪽이야 별 처리할것은 없지만 DataSet에 연결된 컴포넌트가 삭제될때 DataSet속성을 nil로 만들어주셔야 합니다. 안그러면 이미 삭제된 컴포넌트를 계속 참조하고 있을테니까요...

    ^^ 항상 즐코하세요...