关于网友提出的“ 为什么我的这个由若干个组件组成的复合组件无法注册成功?”问题疑问,本网通过在网上对“ 为什么我的这个由若干个组件组成的复合组件无法注册成功?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 为什么我的这个由若干个组件组成的复合组件无法注册成功?描述:
该组件就是由TEdit和TSpeedButton组成的。
其源码如下:
unit ddgButtonEdit2;
interface
uses
Windows,messages,SysUtils,Classes,Graphics,Controls,
StdCtrls,Buttons;
type
TddgButtonEdit2 = Class(TWinControl)
private
FSpeedButton:TSpeedButton;
FEdit:TEdit;
protected
procedure WMSize(Var Message:TWMSize); message WM_SIZE;
procedure SetText(Value:String);
Function GetText:String;
Function GetFont:TFont;
procedure SetFont(Value:TFont);
Function GetOnButtonClick:TNotifyEvent;
procedure SetOnButtonClick(Value:TNotifyEvent);
public
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
published
property Text:String Read GetText Write SetText;
Property Font:TFont read GetFont write SetFont;
property OnButtonClick:TNotifyEvent read GetOnButtonClick write SetOnButtonClick;
end;
implementation
procedure Register;
begin
RegisterComponents('DDG', [TddgButtonEdit2]);
end;
procedure TddgButtonEdit2.WMSize(Var Message:TWMSize);
begin
inherited ;
FEdit.Width :=Message.Width-FSpeedButton.Width;
FSpeedButton.Left:=FEdit.Width;
end;
constructor TddgButtonEdit2.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FEdit :=TEdit.Create(Self);
FEdit.Parent:=Self;
FEdit.Height:=21;
FSpeedButton :=TSpeedButton.Create(Self);
FSpeedButton.Left:=FEdit.Width;
FSpeedButton.Height:=19; //比TEdit的高度小2
FSpeedButton.Width :=19;
FSpeedButton.Caption:='...';
FSpeedButton.Parent :=Self;
Width :=FEdit.Width+FSpeedButton.Width;
Height:=FEdit.Height;
end;
destructor TddgButtonEdit2.Destroy;
begin
FSpeedButton.Free;
FEdit.Free;
inherited destroy;
end;
function TddgButtonEdit2.GetText:String;
begin
Result:=FEdit.Text;
end;
procedure TddgButtonEdit2.SetText(Value:String);
begin
FEdit.Text:=Value;
end;
Function TddgButtonEdit2.GetFont:TFont;
begin
Result:=FEdit.Font;
end;
procedure TddgButtonEdit2.SetFont(Value:TFont);
begin
if Assigned(FEdit.font) then
FEdit.Font.Assign(Value);
end;
Function TddgButtonEdit2.GetOnButtonClick:TNotifyEvent;
begin
Result:=FSpeedButton.OnClick;
end;
procedure TddgButtonEdit2.SetOnButtonClick(Value:TNotifyEvent);
begin
FSpeedButton.OnClick:=Value;
end;
end.