如何在控件设计期间显示模式窗口?(100分)

  • 主题发起人 主题发起人 fshell
  • 开始时间 开始时间
F

fshell

Unregistered / Unconfirmed
GUEST, unregistred user!
大家应该都有用过Delphi5自带的FastNet的控件了吧?里面的NM字头的控件,在设计时
候,属性框都有一个属性,叫About的,内容显示着Component,当鼠标双击这个属性的
时候,就会显示一个版权信息的窗体,这是如何实现的呢?可气的是,FastNet的控件都
是没有PAS文件的。
引申来说,如果我想在设计的时候显示一个窗体,里面显示着程序员录入的各个属性值,
并告诉程序员说哪个是非法的,也打算用上面说的About窗口的方法显示,那么又应该怎
么实现呢?
首先谢谢各位的拔刀相助……
 
先做一个about的form
unit about;

interface

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

type
Tform_about = class(TForm)
Memo1: TMemo;
private
{ Private declarations }
public
{ Public declarations }
end;

var
form_about: Tform_about;

implementation

{$R *.DFM}

end.



下面是一个控件的源代码,例子
unit mybutton;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,dsgnintf,about;

type
TAboutProperty = class(TPropertyEditor)
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
function GetValue: string; override;
end;

tmybutton = class(TButton)
private
FAbout:TAboutProperty;
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
property ABOUT:TAboutProperty read FAbout write Fabout;
{ Published declarations }
end;

procedure Register;

implementation
{ TAboutProperty }

procedure TAboutProperty.Edit;
var
about:Tform_about;
begin
about:=Tform_about.create(nil);
about.showmodal;
about.free;
end;

function TAboutProperty.GetAttributes: TPropertyAttributes;
begin
GetAttributes:=[paDialog, paReadOnly];
end;

function TAboutProperty.GetValue: string;
begin
GetValue:='(About)';
end;

procedure Register;
begin
RegisterComponents('Samples', [tmybutton]);
RegisterPropertyEditor(TypeInfo(TAboutProperty), TMybutton, 'ABOUT', TAboutProperty);
end;

end.
 
谢谢Brave的代码,可是您的代码一访问构件的属性就非法了。我希望能做到的是:
我的构件有一字体属性,用户在设计的时候,选了宋体五号字体,然后一按About地方,
就show出一个窗口,里面就用宋体五号字体显示结果,看看满意不?
 
在構件中不能用BRAVE的方式,因為外部定義必有依賴,可直接內部
可在變量中聲明
tmpFrm:TForm;
不要在TYPE中寫

在調用的地方這樣寫
tmpFrm:=TForm.Create(self);
tmpFrm.Show;
以上在一般性構件測試通過
 
各位大侠,可以注明一下关键的地方吗?我实在看不懂几个地方:
1.
TAboutProperty = class(TPropertyEditor)
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
function GetValue: string; override;
end;
2.
function TAboutProperty.GetAttributes: TPropertyAttributes;
begin
GetAttributes:=[paDialog, paReadOnly];
end;
3.
function TAboutProperty.GetValue: string;
begin
GetValue:='(About)';
end;
4.
RegisterPropertyEditor(TypeInfo(TAboutProperty), TMybutton, 'ABOUT', TAboutProperty);
 
主要是注册tmybutton类的about属性是一个taboutproperty,否则无法在object inspector中编辑查看
 
呵呵! 贪心的我想弄清楚第二点是什么意思?

还有, 怎么才能Create了窗口后,把构件的属性值赋给窗口呢?
 
后退
顶部