【发布时间】:2016-01-27 11:18:08
【问题描述】:
为了创建一个组件,我创建了一个设计时和运行时包,运行时包(我们称之为 RP140)包含我的组件的代码并需要 rtl.dcp,设计时包(我们称之为 DclRP140)包含注册程序和需要 DesignIDE、运行时包和 rtl.dcp。现在我需要访问在属于“DclRP140”包的单元中声明的私有变量,从属于“RP140”的另一个单元,我创建了一个包含相关部分的简单代码,只是为了更容易理解:
unit MyComponentRegister;
interface
uses Classes, MyComponent;
type
TEvent = procedure(sender: TObject) of object;
TMyComponent = class(TComponent)
private
FMyproperty: String;
FMyEvent: TEvent;
public
constructor Create(AOwner: TComponent); override;
published
property myProperty: String read FMyproperty write FMyproperty
default initial_value;
property myEvent: TEvent read FMyEvent write FMyEvent;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TMyComponent]);
end;
Constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited;
FMyproperty := initial_value;
end;
end.
另一个单元包含我的组件的主要代码:
unit myComponent;
interface
uses
SysUtils, Classes;
type
TMyComponent = class(TComponent)
public
procedure myProcedure(avalue: string);
end;
implementation
procedure TMyComponent.myProcedure(avalue: string);
begin
FMyproperty := avalue; // I want to access to FMyproperty
if assigned(Fmyevent) then // I want to access to fMyEvent
// do some work
end;
end.
首先,我必须告诉你,我是创建包和组件的新手,所以我的做法是否正确?还是有什么问题?
其次,正如我之前所说,我想做的是从“myComponent”访问在“MyComponentRegister”中声明的私有变量,我尝试了很多技巧,但都没有奏效,当然有办法做到这一点,但是我的经验有限,我找不到它。那么,我该如何解决这个问题??
【问题讨论】:
-
我重新格式化了您的代码。下次发布问题时,请确保您的代码可读。我删除了所有虚假的 cmets。发表评论告诉您
public意味着以下成员是公开的,这绝对没有意义。或者告诉您private表示以下成员是私有的。不要使用与不言自明的内容相呼应的 cmets。 -
您只是没有拆分设计和运行时包。类应该进入运行时,任何与 IDE 相关的东西(
RegisterComponent在最小的情况下)都应该进入设计时包,而requires相应的运行时包。
标签: delphi delphi-2010