标签: tcomponent

我可以使用.Create(Nil)代替.Create(应用程序)

我有一个具有TComponent变量的单元,我在单元初始化时创建这个组件,如下所示:

var
  XComp: TComponent;
.
.
.
.

initialization
begin
  XCom := TComponent.Create(Application);
end;
Run Code Online (Sandbox Code Playgroud)

我关闭Delphi后安装单元后,它给我一个访问冲突错误消息(EAccessViolation)

但是当我改变我的创造者时如下

initialization
begin
  XCom := TComponent.Create(nil);
end;
Run Code Online (Sandbox Code Playgroud)

一切都很顺利...我想知道区别吗?什么更好?

注意:只有在关闭delphi时才会出现错误(在设计时意味着).

谢谢.

delphi delphi-xe2 tcomponent

7
推荐指数
2
解决办法
1633
查看次数

为动态创建的TComponent派生类实例传递一个NULL Owner参数好吗?

我非常喜欢使用C++ RAD Studio和Builder 6,并且经常在编写非可视代码时动态创建表单或动态创建非可视组件.在设计表单时,自动设置放在该表单上的组件的Owner属性,所以我从不担心它.但是,当创建TComponent动态派生的任何东西时,我总是NULL作为Owner参数传递,因为我总是负责以后释放内存.

Borland/Embarcadero文档并没有真正涵盖动态创建事物所需的内容(或者我可能没有在正确的位置查找),而且似乎只涉及基于设计时间表的场景.

我想知道为动态创建的组件传递NULL所有者是否正确,或者它是否会导致内部问题,这些问题将在以后显现出来.代码编译并正常工作,但我想知道它是否是原因或可能导致任何幕后问题.

c++ c++builder tcomponent

5
推荐指数
1
解决办法
362
查看次数

如何访问非可视Delphi组件的设计位置?

在IDE中设计表单时,可以自由放置和定位非可视组件(例如TMainMenus,TDatamodules).该位置是持久的,因此在重新加载表单时,这些组件会出现在正确的位置.

但是,TComponent没有Top或Left属性!

那么,我的代码如何访问非可视组件的"设计位置"?

delphi tcomponent

2
推荐指数
1
解决办法
822
查看次数

我可以使用默认的WriteComponent操作将Delphi TPersistent序列化为TComponent的字段吗?

我对如何从具有TPersistent字段的TComponent写出属性感到非常困惑.例如,我有:

  TChildObj = class( TPersistent )
  PRIVATE
    FVisible: boolean;
    FColor: TColor;
  PUBLIC
  PUBLISHED
    property Visible : boolean
               read FVisible
               write FVisible;
    property Color : TColor
               read FColor
               write FColor;
  end;


  TTest = class( TComponent )
    constructor Create( AOwner : TComponent ); override;
    destructor Destroy; override;
  private
    FChildObj : TChildObj;
    FOne: integer;
  published
    property One : integer
               read FOne
               write FOne;
    property ChildObj : TChildObj
               read FChildObj;
  end;
Run Code Online (Sandbox Code Playgroud)

当我使用以下编写器代码时:

procedure TForm1.Button5Click(Sender: TObject);
var
  MS : TMemoryStream;
  SS : TStringStream;
  Test : …
Run Code Online (Sandbox Code Playgroud)

delphi serialization tpersistent tcomponent

2
推荐指数
1
解决办法
2092
查看次数