最近小弟做了一个控件,在设计属性编辑器时遇到了问题。我想达到这样一个效果:点击属性页右边的...按钮弹出我自己设计的窗口,用来编辑这个属性。可是在弹出这个窗口前,我想得到这个属性的原值,这时是不是要重载GetValue函数,如果不重载,直接调用这个函数只能得到一个字符串,我很纳闷的是属性值千差万别,一个字符串就能表示吗?我想问的是在注册属性编辑器的单元中如何与定义控件的单元取得联系?是不是重载GetValue\SetValue这两个函数,如何重载,请各位高手不吝赐教。
解决方案 »
- 客户端介面
- 请问 Delphi 怎么使用BCB的OBJ文件??
- 线程最多只能达到16个吗?
- 谢谢帮忙!!!!
- intraweb 发布成服务模式BDE连接出问题,高分200。。。。。
- 如何确认收到的信使服务(高难度,请指点,详情见内容)
- DcomCommection连接应用服务器的问题,
- 请问各位大侠:我编的数据库在窗体上用多个dbedit来显示,窗体上还有dbnavigator可用他来指示所显示的上一条下一条,用他上面的添加按钮也能
- 错误:Asynchronous socket error 10060!谁能跟我解释一下这个错误?急!
- File not found: 'DsgnIntf.dcu'
- 大家试过没有!掌上电脑是否支持DELPHI程序?答后给分??
- 请问怎么获知一个库里面有那些用户表?
funtion GetValue: string;virtual;
procedue SetValue(value: string);virtual;在你的继承子类中这样声明
funtion GetValue: string;override;
procedue SetValue(value: string);override;
funtion GetValue: string;
begin
...
aaa := 你想要的值;
end;子类中
funtion GetValue: string;
begin
inherited;
result := aaa;
end;
我继承的父类是:TPropertyEditor,难道还要修改类 TPropertyEditor吗,会不会引起Delphi的混乱。
我想要的值是这样的:比如说,我做的控件有Color属性,当我编辑这个属性点击旁边的...按钮时,如何得到原来的显示在Color属性框中的那个值,使弹出的窗口能够进行相应的操作。
XXXMethodValue : 得到事件,这是指向事件的指针
XXXOrdValue : 得到有序,这是指向有序的集合的序号
XXXStrValue : 得到字符串
XXXVarValue : 得到Varinat
XXX表示读取(Get)或设置(Set)
如果这个类是你的Component的一部分,是个属性,那么,Delphi已经给提供了自己的TClassProperty,当然你从TClassProperty上继承出你自己的东东也可以。不过这个作为属性的类必须从TPersistent类上继承下来,不然Delphi就不能对其进行流化操作。还有就是你要在你的Component的Create时也Create这个类实例。
当然这要看具体情况,你能不能说的具体一点。
unit InduceForm;
type
TInduForm = class(TForm)
DBGrid1: TDBGrid;
DataSourceQ: TADOQuery;
DataSource1: TDataSource;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
end;unit InduceWgq;
type
TInduceWgq = class(TComponent)
private
FInduForm: TInduForm;
FColumns: TDBGridColumns;
.
.
.
function GetActive: Boolean;
procedure SetActive(const Value: Boolean);
procedure SetColumns(const Value: TDBGridColumns);
public
constructor Create(AOWner: TComponent); override;
destructor Destroy; override;
.
.
.
published
.
.
.
property Active: Boolean read GetActive write SetActive default False;
property Columns: TDBGridColumns read FColumns write SetColumns;
end;implementationconstructor TInduceWgq.Create(AOWner: TComponent);
begin
inherited Create(AOWner);
FInduForm:=TInduForm.Create(nil);
FColumns:=TDBGridColumns.Create(FInduForm.DBGrid1,TColumn);
end;procedure TInduceWgq.SetColumns(const Value: TDBGridColumns);
begin
If FColumns <> Value then
begin
FColumns.Assign(Value);
FInduForm.DBGrid1.Columns.Assign(Value);
end;
end;function TInduceWgq.GetActive: Boolean;
begin
Result:=FInduForm.DataSourceQ.Active;
end;procedure TInduceWgq.SetActive(const Value: Boolean);
begin
If FInduForm.DataSourceQ.Active <> Value then
begin
FInduForm.DataSourceQ.Active:=Value;
If Value then FColumns.Assign(FInduForm.DBGrid1.Columns);
end;
end;把上面的代码编译安装后,点击Columns属性后的...按钮,能弹出原来的属性编辑器,也能添加列,但是删除列的时候,Delphi就陷入了错误循环中,只能结束任务。我不知道是哪里错了。因为我只用到了Columns的Width,Visible子属性,所以我想到了自己做一个属性编辑器,可是又不知道怎么做。请cscentaur(太公陈)不吝赐教,感激不尽。
我的qq号是38541213 如果用msn,为[email protected]