其pas文件如下:
unit Observer;interfaceuses
Windows, Messages, SysUtils, Classes, Controls,ComCtrls;type
TObserver = class(TWinControl)
private
{ Private declarations }
FTreeView : TTreeView;
FOnChange:TNotifyEvent;
FEnabled:Boolean;
procedure SetItem(const Value: string);
function GetItem: string;
protected
{ Protected declarations }
procedure Change;
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
destructor Destroy();override;
published
{ Published declarations }
property OnChange:TNotifyEvent read FOnChange write FOnChange;
property Enable:Boolean read FEnabled write FEnabled default True;
property TreeViewItem:string read GetItem write SetItem;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('DDG', [TObserver]);
end;{ TObserver }procedure TObserver.Change;
begin
if Assigned(FOnChange) then
FOnChange(self);
end;constructor TObserver.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Align := alClient;
Enable:=True;
Visible := True; //if csDesigning in ComponentState then
//begin
FTreeView := TTreeView.Create(AOwner);
FTreeView.Parent := self; FTreeView.Align := alClient;
FTreeView.Enabled :=True;
FTreeView.Visible := True;
//end;end;destructor TObserver.Destroy;
begin
FTreeView.Free;
inherited Destroy;
end;function TObserver.GetItem: string;
begin
result :='';
end;procedure TObserver.SetItem(const Value: string);
begin
FTreeView.Items.Add(nil,Value);
end;end.可是在使用是出现了奇怪的问题:
就是把该组件添加到程序后,每次在对窗体进行View as Form和View as Text切换后,总回产生一个新的TreeView对象,请各位指教。
unit Observer;interfaceuses
Windows, Messages, SysUtils, Classes, Controls,ComCtrls;type
TObserver = class(TWinControl)
private
{ Private declarations }
FTreeView : TTreeView;
FOnChange:TNotifyEvent;
FEnabled:Boolean;
procedure SetItem(const Value: string);
function GetItem: string;
protected
{ Protected declarations }
procedure Change;
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
destructor Destroy();override;
published
{ Published declarations }
property OnChange:TNotifyEvent read FOnChange write FOnChange;
property Enable:Boolean read FEnabled write FEnabled default True;
property TreeViewItem:string read GetItem write SetItem;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('DDG', [TObserver]);
end;{ TObserver }procedure TObserver.Change;
begin
if Assigned(FOnChange) then
FOnChange(self);
end;constructor TObserver.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Align := alClient;
Enable:=True;
Visible := True; //if csDesigning in ComponentState then
//begin
FTreeView := TTreeView.Create(AOwner);
FTreeView.Parent := self; FTreeView.Align := alClient;
FTreeView.Enabled :=True;
FTreeView.Visible := True;
//end;end;destructor TObserver.Destroy;
begin
FTreeView.Free;
inherited Destroy;
end;function TObserver.GetItem: string;
begin
result :='';
end;procedure TObserver.SetItem(const Value: string);
begin
FTreeView.Items.Add(nil,Value);
end;end.可是在使用是出现了奇怪的问题:
就是把该组件添加到程序后,每次在对窗体进行View as Form和View as Text切换后,总回产生一个新的TreeView对象,请各位指教。
parent属性是指当前控件显示在哪个form或者panel,或者什么上。一般控件设计的时候是不能写该属性的。