直接用继承frame开发出来的控件,frame中的控件的属性和事件在运行时无效,不知何故?(100分)

  • 主题发起人 主题发起人 yuhouyangguang
  • 开始时间 开始时间
Y

yuhouyangguang

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi6以后这种组合控件可以直接用继承frame开发,
就和平时的frame一样,都是可视化开发,
只是加一个register过程就成控件了。例子:
单元文件:
unit UShape;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TShapeEdit = class(TFrame)
Edit1: TEdit;
Bevel1: TBevel;
private
{ Private declarations }
public
{ Public declarations }
end;
procedure Register;
implementation

{$R *.dfm}
procedure Register;
begin
RegisterComponents('Sample', [TShapeEdit]);
end;

end.

窗体文件:
object ShapeEdit: TShapeEdit
Left = 0
Top = 0
Width = 104
Height = 48
Anchors = [akLeft, akTop, akRight, akBottom]
TabOrder = 0
DesignSize = (
104
48)
object Bevel1: TBevel
Left = 8
Top = 32
Width = 90
Height = 9
Anchors = [akLeft, akTop, akRight, akBottom]
Shape = bsBottomLine
end
object Edit1: TEdit
Left = 8
Top = 8
Width = 88
Height = 21
Anchors = [akLeft, akTop, akRight, akBottom]
TabOrder = 0
Text = 'Edit1'
end
end
再安装一下就是你要得控件了,注意,窗体文件要一起发布。

可是在窗体中加入这个控件后,在edit的keypress事件中写代码,它在运行时不响应,why?不知大家有没有做过这种组件?
 
你将TShapeEdit Add to Repository 后;
File | New | other| 选择 TShapeEdit (inherited); 建立新的框架......
在edit的keypress事件中写代码...
执行时重新设置 新框架 的 Parent ;

 
控件和Repository中的Frame、Form是不同的。
既然你的 TShapeEdit 是一个控件,那么edit的keypress事件应该是公布在TShapeEdit中(就是一个代理),
你是不应该直接访问TShapeEdi中的Edit1的。
把这个 TShapeEdit 放到 Repository 中就不同了,你是可以直接访问TShapeEdi中的Edit1的。
 
那我除了把Edit的属性都发布出来就没什么其他的办法了
 
你的问题中的那段话好像我是我说得啊?
好像是我回答一个dfw的问题时的回答啊。
晕!不过没关系,只要把分给我就行了。
你要得到edit1的事件,只要把edit1作为frame的
子控件属性公布出来就行了。真的很好用。
例子:
public
constructor Create(AOwner: TComponent); override;
published
property Edit:TEdit Read edit1 Write Edit1;

implementation
constructor TShapeEdit.Create(AOwner: TComponent);
begin
inherited;
Edit1.SetSubComponent(true); //这句话不能丢,不然不能保存edit1的各种属性。
end;
这样edit1的所有属性,所有事件都有了,
快回去试吧。



 
book523,你真的好聪明
但真的不会转弯!(我还以为写什么复杂的控件),
看看.....
右键点击 TShapeEdit (TFrame);弹出快捷菜单, 选择 ADD to Palette,OK,
连注册都不需要!!!
 
这种功能我早就知道了,
但是这样有控件好用吗?
我有好多这样的控件,
都要加入模板?
别人用的时候又要加入模板?
那个方便呀。
 
控件就是控,模板(框架)就是框架,不能混为一谈,如果硬要将框架作为控件一样注册、使用,有好多问题,不信你试试吧,还有好多问题不是一个SetSubComponent(true)能解决的

如果写控件,我不主张从TFrame上继承。
如果用框架,我主张将框架 ADD to Palette 当控件使用!这样比你写控件注册还要方便
 
楼主,怎么不结贴?
 
来了,大家久等了
 
多人接受答案了。
 
后退
顶部