我发现有关如何创建delphi组件的教程很不错,但是他们只使用现有组件之一作为对象来继承动作.像这样的东西 unit CountBtn;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dia
unit CountBtn; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TCountBtn = class(TButton) private FCount: integer; protected procedure Click;override; public procedure ShowCount; published property Count:integer read FCount write FCount; constructor Create(aowner:Tcomponent); override; end; procedure Register; implementation procedure Register; begin RegisterComponents('Mihan Components', [TCountBtn]); end; constructor TCountBtn.Create(aowner:Tcomponent); begin inherited create(Aowner); end; procedure Tcountbtn.Click; begin inherited click; FCount:=FCount+1; end; procedure TCountBtn.ShowCount; begin Showmessage('On button '+ caption+' you clicked: '+inttostr(FCount)+' times'); end; end.
但是,如果我需要使用少量元素的组件,我该怎么办?可以说,我有Button和Edit字段.然后在按钮上单击编辑字段中的文本应与按钮上的文本相同.我开始像这样做,但似乎它不会像我想的那样工作:
unit TestComp; interface uses System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, Vcl.ExtCtrls; type TUiCompU = class(TCustomControl) private { Private declarations } FButton: TButton; FEdit: TEdit; protected { Protected declarations } procedure Paint; override; //wrong! procedure FButton.Click;override public { Public declarations } constructor Create(AOwner: TComponent); override; published { Published declarations } //wrong! property ButtonText: String read FButton.Caption write FButton.Caption; end; procedure Register; implementation procedure Register; begin RegisterComponents('Ui', [TUiCompU]); end; { TUiCompU } constructor TUiCompU.Create(AOwner: TComponent); begin inherited; Width := 200; Height := 50; FButton := TButton.Create(Self); FButton.SetSubComponent(True); FButton.Parent := Self; FButton.Top := 8; FButton.Left := 50; FButton.Width := 35; FButton.Name := 'Button'; FEdit := TEdit.Create(Self); FEdit.SetSubComponent(True); FEdit.Parent := Self; FEdit.Top := 8; FEdit.Left := 84; FEdit.Width := 121; FEdit.Name := 'Edit'; end; procedure TUiCompU.Paint; begin Canvas.Rectangle(ClientRect); end; end.
我应该如何添加点击过程,这是真的点击按钮?是否有关于如何使用其他组件制作好组件的良好教程? (我需要创建类似幻灯片组件btw的东西).
谢谢你,对不起我的英语.
type TUiCompU = class(TCustomControl) private FEdit: TEdit; FButton: TButton; procedure ButtonClick(Sender: TObject); procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); public constructor Create(AOwner: TComponent); override; end; implementation constructor TUiCompU.Create(AOwner: TComponent); begin inherited; FButton := TButton.Create(Self); ... FButton.OnClick := ButtonClick; FEdit := TEdit.Create(Self); ... FEdit.OnKeyDown := EditKeyDown; end; procedure TUiCompU.ButtonClick(Sender: TObject); begin // do whatever you want here end; procedure TUiCompU.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin // do whatever you want here end;