怎样刷新Object Inspector的显示?或者用什么方法控制Object Inspector中属性的结点

阿发伯 2006-10-25 11:08:07
编写组件用TCollection编辑如下属性:
type
TBase = class end;

TClass1 = class(TBase) end;

TClass2 = class(TBase) end;
...

TClassType = (ctClass1, ctClass2, ...);

TClassItem = class(TCollectionItem)
private
FClassType: TClassType;
FItem: TBase;
procedure SetClassType(const Value: TClassType);
...
published
property ClassType: TClassType read FClassType write SetClassType;
property MyClass: TBase read FItem;
end;

...

procedure SetClassType(const Value: TClassType);
begin
if FClassType = Value then Exit;
FClassType = Value;
if Assigned(FItem) then FItem.Free;
case FClassType of
ctClass1: FItem := TClass1.Create;
ctClass2: FItem := TClass2.Create;
...
end;
end;

由于TClass1,TClass2等的属性个数和类型不一样,当改变FItem的类实例时,如果对应的类属性
MyClass在Object Inspector中已经展开,不能得到正确的显示,有时还会报错,必须在TCollectionItem编辑窗口移动后,或者将已经展开的属性收拢,显示才正确。
提问:怎样才能刷新Object Inspector的显示?或者用什么方法控制Object Inspector中属性的结点(展开和收拢)?或者其它方法解决该问题?

不知道问题说清楚没有,如果不明白意思请问我,本人在线等。问题一经解决立即结贴。
...全文
228 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿发伯 2006-10-27
  • 打赏
  • 举报
回复
自己顶
阿发伯 2006-10-26
  • 打赏
  • 举报
回复
谢谢linzhengqun(风。我回来了) ,按你的方法试了,还是不行,而且我说的不能在Object Inspector刷新显示的不是TClassType属性,而是类属性MyClass,当类属性的节点展开后,修改TClassType,MyClass也重新由不同的派生类建立,这时在Object Inspector中显示的MyClass的子属性仍然是以前的,必须手工收拢MyClass的节点后再展开,或者移动到其它元件项后再回来,显示就正确了,总之,是Object Inspector不知道MyClass的实例已经改变,不能刷新显示.
阿发伯 2006-10-26
  • 打赏
  • 举报
回复
有谁帮忙解决???
linzhengqun 2006-10-25
  • 打赏
  • 举报
回复
你可以试一下用下面的方法:
procedure SetClassType(const Value: TClassType);
var
Form: TCustomForm
begin
...
//在这里想办法取得组件所在的窗口,然后
Form.Designer.Modified;
end;

或者,重写一个TClassType属性的属性编辑器(继承自原有的属性编辑器,这里应该是TEnumProperty)
然后在SetValue中写:
procedure TYourEnumProperty.SetValue(const Value: string);
begin
Inherited;
Designer.Modified;
end;
然后注册这个属性编辑器。

上面两种方法仅作为参考,有效否,还得自己试一下。
你可以在VCL或CLX应用程序使用Rave Reports去实现来自数据库或非数据库数据的报表.下面的过程说明 怎样增加一个简单的报表到已存在的数据库应用程序. 1.在Delphi打开一个数据库应用程序. 2.从组件面板的Rave页,假如TRvDataSetConnection组件到应用程序的表单. 3.在Object Inspector,设置DataSet的属性为一个已在你的应用程序定义的dataset组件.使用Rave Visual Designer 4.去设计你的报表然后并创建一个report project文件(.rav file). 选择Tools|Rave Designer运行Rave Visual Designer. 选择File|New Data Object显示Data Connections对话框. 在Data Object Type列表,选择Direct Data View然后单击Next. 在Active Data Connections列表,选择RVDataSetConnection1然后单击Finish. 在Rave Visual Designer窗口左边的Project Tree,展开Data View Dictionary结点,燃后展开刚创建的DataView1结点. 你要使用的数据字段显示在DataView1结点下. 选择Tools|Report Wizards|Simple Table显示Simple Table wizard. 选择DataView1然后单击Next. 选择你想要在这个报表显示的两个或三个字段然后单击Next. 按照随后的向导页提示区设置要在这个报表使用的字段的排序, 页边距,首部文本,以及字体. 在最后向导页上,单击Generate完成这个向导然后在页面设计器显示报表. 选择File|Save as显示Save As对话框. 把Rave project存到你的Delphi应用程序的目录下并命名为MyRave.rav. 最小化Rave Visual Designer窗口返回Delphi. 5.从组件面板的Rave页,添加一个项目组件TRvProject到表单. 6.在Object Inspector,设置ProjectFile属性为刚才创建的report project文件(MyRave.rav). 7.从组件面板的Standard页,添加TButton到表单. 8.在Object Inspector,单击Events标签然后双击OnClick事件. 9.在事件处理程序使用ExecuteReport方法去执行Rave project组件. 10.按F9运行应用程序. 11.单击在第七步添加的按钮. 12.Output Options对话框被显示出来,单击OK显示报表.
你可以在VCL或CLX应用程序使用Rave Reports去实现来自数据库或非数据库数据的报表.下面的过程说明 怎样增加一个简单的报表到已存在的数据库应用程序. 1.在Delphi打开一个数据库应用程序. 2.从组件面板的Rave页,假如TRvDataSetConnection组件到应用程序的表单. 3.在Object Inspector,设置DataSet的属性为一个已在你的应用程序定义的dataset组件.使用Rave Visual Designer 4.去设计你的报表然后并创建一个report project文件(.rav file). 选择Tools|Rave Designer运行Rave Visual Designer. 选择File|New Data Object显示Data Connections对话框. 在Data Object Type列表,选择Direct Data View然后单击Next. 在Active Data Connections列表,选择RVDataSetConnection1然后单击Finish. 在Rave Visual Designer窗口左边的Project Tree,展开Data View Dictionary结点,燃后展开刚创建的DataView1结点. 你要使用的数据字段显示在DataView1结点下. 选择Tools|Report Wizards|Simple Table显示Simple Table wizard. 选择DataView1然后单击Next. 选择你想要在这个报表显示的两个或三个字段然后单击Next. 按照随后的向导页提示区设置要在这个报表使用的字段的排序, 页边距,首部文本,以及字体. 在最后向导页上,单击Generate完成这个向导然后在页面设计器显示报表. 选择File|Save as显示Save As对话框. 把Rave project存到你的Delphi应用程序的目录下并命名为MyRave.rav. 最小化Rave Visual Designer窗口返回Delphi. 5.从组件面板的Rave页,添加一个项目组件TRvProject到表单. 6.在Object Inspector,设置ProjectFile属性为刚才创建的report project文件(MyRave.rav). 7.从组件面板的Standard页,添加TButton到表单. 8.在Object Inspector,单击Events标签然后双击OnClick事件. 9.在事件处理程序使用ExecuteReport方法去执行Rave project组件. 10.按F9运行应用程序. 11.单击在第七步添加的按钮. 12.Output Options对话框被显示出来,单击OK显示报表.

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧