控件开发的困惑(50分)

  • 主题发起人 ZBJ2001_KF
  • 开始时间
Z

ZBJ2001_KF

Unregistered / Unconfirmed
GUEST, unregistred user!
举个简单例子啊.我想通过TLable和TEdit生成一个复合的控件.
如果我直接将两个控件放到TForm上,通过Form能实现复合控件的功能吗.
如果不能,是不是说明有些功能一定在自定义控件才能实现啊
 
可以用frame
 
有一定的道理.
 
继承Tedit
 
继承TControl, 再分别 在create里面,自己create 一个label
一个edit
tmycontrol.create(owner);
begin
flabel := tlabel.create
fedit := tedit.create;
//计算并设置位置等....
 
应该可以实现(我没有试过),可以用一个属性来决定的是哪个类比如属性值可以选Lable、Edit等,这样就可以很方便的控制了。如果做成了麻烦你给我份源代码参考一下,my.delphi@163.com。谢谢!
 
可以参考LabelEdit控件
 
如果我直接将两个控件放到TForm上,通过Form能实现复合控件的功能吗.
--肯定可以
--写个简单关联的例子给你
unit MyEdit;
interface
uses
SysUtils, Classes, Controls, StdCtrls;
type
TMyEdit = class(TEdit)
private
FLinkLabel: TLabel;
procedure FSetLinkLabel(AValue: TLabel);
protected
procedure Notification(AComponent: TComponent;Operation: TOperation);
override;
procedure Change;override;
public
published
property LinkLabel: TLabel read FLinkLabel write FSetLinkLabel;
end;

procedure Register;

implementation
procedure Register;
begin

RegisterComponents('Linco', [TMyEdit]);
end;

procedure TMyEdit.Change;
begin

inherited;
if LinkLabel <> nil then

LinkLabel.Caption := Text;
end;

procedure TMyEdit.FSetLinkLabel(AValue: TLabel);
begin

FLinkLabel := AValue;
if AValue <> nil then

FLinkLabel.FreeNotification(self);//关联后要通知
end;

procedure TMyEdit.Notification(AComponent: TComponent;
Operation: TOperation);
begin

inherited;
if (Operation = opRemove) and (AComponent = LinkLabel) then
//删除关联也要通知
LinkLabel := nil;
end;

end.
 
用Form實現的控件不能放在其它Component裡
 
我也想知道EDIT和LABEL如何绑在一起生成一个控件,望高手指教!
 
看源代码啊,delphi自带这个控件的。
 
delphi 自带的 TLabeledEdit 就是组合的。
 
看看 TLabeledEdit 的源码你就明白了
 
试一下使用Parent属性,将其中一个的Parent属性设为另一个控件
 
多人接受答案了。
 
顶部