如何为自己的控件添加一个关于属性(100分)

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

zhlfdm

Unregistered / Unconfirmed
GUEST, unregistred user!
要弹出对话框的那种
最好有例子
 
没人理我
 
我自己顶
 
分不够再加
 
你的说法不对,你要的不是属性,那是一个调用的方法
举个例子,
TMyEdit=Class(TEdit)
public
public ShowAbout;
end;
Procedure TMyEdit.ShowAbout;
var
AboutForm:TAboutForm;
begin
AboutForm:=TAboutForm.Create(Self) ;
AboutForm.ShowAbout;
end;


var MyEdit:TMyEdit;
然后你可以这样使用 MyEdit.ShowAbout就可以了
 
上面“public ShowAbout”打错了,应该是“procedure ShowAbout”
 
我是说在控件中点about 能弹出一个对话框那种
 
又到了我超级牛X出马的时候了:)
1、新建一个关于窗体TfcAboutPropertyEditor
2、property About:String read FAbout write FAbout;
3、在Register部分加入RegisterPropertyEditor
procedure Register;
begin
RegisterComponents('CowX', [TDataAccess]);

RegisterPropertyEditor(TypeInfo(string), TDataAccess, 'About', TfcAboutPropertyEditor);
//如果你想在设计期双击控件也能弹出About
RegisterComponentEditor(TDataAccess,TfcAboutPropertyEditor);
end;
 
RegisterPropertyEditor D5中需要这两个Unit: DesignEditors, DesignIntf,
D6以上需要一个Unit ....
 
牛X 我收藏这个方法了.^_^
 
[Error] GY.pas(32): Incompatible types: 'TPropertyEditorClass' and 'Class reference'

提示我类型不兼容怎么回事呀??
 
牛X的是正解。
 
为什么我这个还不行呢??
我哭
 
你用的什么版本?
1、可以在帮助里面查查TPropertyEditorClass在哪个Unit里面,还要注意,Source/Property Editors这个路径并没有默认设置在路径里面,你可以手动加到环境变量中去
2、最好将procedure Register;单独放在一个Pas里面,这样可以解决一个Delphi本身的一个运行期和设计期冲突的Bug,你重点试试这一点
 
我找到函数
但是编译不通过;
 
将procedure Register;单独放在一个Pas里面,这个Pas中Uses DesignEditors, DesignIntf 其他的Unit不要Uses这两个Unit,这样才行
 
你有没有最简单的例子给我发一份呀
email:zhlf-dm@163.com
谢谢
 
unit UnitReg;

interface

uses
DesignEditors, DesignIntf, Classes,
UnitDataAccess,
UnitEditor, UnitAbout;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Asta', [TDataAccess]);

RegisterPropertyEditor(TypeInfo(string), TDataAccess, 'About', TfcAboutPropertyEditor);
RegisterPropertyEditor(TypeInfo(TSQLList), TDataAccess, 'SQL', TfcPropertyEditor);
RegisterPropertyEditor(TypeInfo(Variant), TDataAccess, 'SQLData', TfcPropertyEditor);

RegisterComponentEditor(TDataAccess,TfcComponentEditor);
end;

end.
 
这一单元专门注册VCL的,它Uses了DesignEditors, DesignIntf,这是设计期的东东
而在应用VCL时,没有哪个单元会引用到UnitReg,故也不会引用到DesignEditors, DesignIntf这两个不能编译的单元,
应用TDataAccess这个自定义控件时,编译器会自动为你Uses UnitDataAccess这个单元
而UnitDataAccess这个单元中是不会引用DesignEditors, DesignIntf的,这样,你的程序就不会编译出错
几乎所有的VCL初学者学习使用RegisterPropertyEditor时,都会出现分不清这层关系的问题,搞清楚了上面的原理,你就会明白为什么商业控件都是用单独的Pas来注册
 
后退
顶部