问题标签 [tcomponent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1094 浏览

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

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

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

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

0 投票
2 回答
1935 浏览

delphi - 我可以使用 .Create(Nil) 而不是 .Create(Application)

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

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

但是当我将我的创建者更改为如下

一切顺利...我想知道区别?什么是更好的?

注意:错误仅在关闭 delphi 时出现(意味着在设计时)。

谢谢。

0 投票
1 回答
2472 浏览

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

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

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

我只得到以下内容:

即缺少 TPersistent TChildObj。

这篇关于组件序列化的文章指出“默认情况下,组件将流式传输任何非 TComponent 类型的 TPersistent 属性。我们的 TPersistent 属性像组件一样被流式传输,并且它可能具有其他将被流式传输的 TPersistent 属性。” 但是,当我进入 System.Classes 时,在第 12950 行(XE3)附近进行了测试:

这似乎表明只有组件和子组件被序列化。如果我让 TChildObj 从 TComponent 下降(并给它一个名字),我会得到它的名字出现在书面文件中(但仍然没有属性)。

我真正不明白的是,TControl(一个组件)具有 Font 属性(TPersistent),例如,当您编写 TLabel 时,它会很好地流出。

还是这与默认属性有关?

任何帮助表示赞赏。

0 投票
1 回答
411 浏览

c++ - 是否可以为动态创建的 TComponent 派生类实例传递 NULL Owner 参数?

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

Borland/Embarcadero 文档并没有真正涵盖在动态创建事物的情况下所需的内容(或者我可能没有在正确的地方寻找),并且似乎只涵盖了基于设计时表单的场景。

我想知道是否为动态创建的组件传递一个 NULL 所有者是正确的做法,或者它是否会导致稍后会出现的内部问题。代码可以编译并且工作正常,但我想知道它是否会导致或可能导致任何幕后问题。

0 投票
1 回答
286 浏览

android - Delphi XE5 ComponentCount 分段错误(搜索父级 tcomponent )

此代码收集指定根组件中的所有 TFMXControl。检查父级和组件名称前导。此代码在 Win32 32.bit windows 目标中运行良好,但在 LANC soubrutine 第一行出现页面错误的 Nexus(android 平台)中无法正常运行。我不知道.. :(


这也不起作用,但它非常简单。(Win32 工作正常)(Tform1 简单移动表单)

0 投票
2 回答
2264 浏览

delphi - Delphi:将 TComponent 保存到 Clientdataset blob 字段

我有一个像下面这样的 TComponent 类派生,试图保存到客户端数据集 blob 字段:(从互联网复制,应得的学分)

火鸟桌是...

写入数据库...

(全局设置为 TSaveComponent。)

从数据库读取...

问题:Stream.ReadComponent(self) 行中总是出现“流读取错误”。请问这个怎么解决?

我可以确认保存组件工作。我检查了表格并在 GlobalSetting 中查看了已发布的字段,但我不确定它是否是正确的格式。(如果需要,我可以显示十六进制表示)

编辑: 整个解决方案适用于 IBX 组件;使用 DBExpress/Clientdataset 组件,从 blob 字段读取流总是会导致'Stream read error.'

0 投票
1 回答
309 浏览

delphi - Firemonkey:级联 FMXObject 的样式查找更改,其中其他对象继承样式名称

我不确定是否可能-但对我来说似乎应该是。本质上,我想在更改 StyleLookup 时触发所有组件刷新它们的样式。

我有一个 FMXComponent,它是一个名为BaseStyleLabel. 组件的StyleName属性是'BaseStyle'。它本身从样式资源中查找其样式,因此其StyleLookup属性设置为'BaseStyle1'。我也有'BaseStyle2''BaseStyle3' ...

我有一个被调用的依赖 Tlabel,MyTextLabel它的StyleLookup属性设置为BaseStyle,即 StyleName BaseStyleLabel

这一切似乎都很好。我看到它MyTextLabel继承了MyBaseStyle' BaseStyle1'的样式。

当我执行这行代码时

我希望会BaseStyleLabel更改为“BaseStyle2”(确实如此)。然而,MyTextLabel也应该改变风格,然后看起来像'BaseStyle2',但它没有:它仍然是BaseStyle1;

限定符是 BaseLabel 和 MyTextLabel 都来自样式资源。它们实际上不是在表单上创建的组件,它们是由样式创建的。

所以我的问题是这个。

  1. 这种方法有效吗?
  2. 是否有标准方法,例如使用可以更新的样式对象?
  3. 我只是没有刷新正确的东西吗?
  4. 使用了错误的刷新方法,可能是ApplyStyle?

...编辑....下面是请求的示例...

使用以下样式文件

0 投票
1 回答
292 浏览

forms - Delphi:继承的 Create 给出访问冲突

我制作了一个应用程序,可以打开其他几个表单来处理任务。所有表格都可以正常工作,除了一个。我对所有表单都使用相同的代码。就像是:

FormTypeA := TFormTypeA.Create(Application);

在 Create 构造函数中,我添加了一些代码来初始化表单。它包含如下行:

就行“继承的Create(AOwner);” 我收到访问冲突:“Project ThisApplication.exe 引发异常类 $C0000005,消息为‘c0000005 ACCESS_VIOLATION’

我根本不知道在哪里查看我的代码来解决问题。正如我所写,其他形式使用相同的结构并且工作正常。

任何建议都会非常受欢迎。

0 投票
1 回答
398 浏览

delphi - 在 Delphi 中处理从一种形式到另一种形式的复制组件

编写我自己的从 TComponent 继承的 Delphi VCL 组件,其中包含一堆属性,这些属性对于组件的所有者表单必须是唯一的。当我将组件从一个表单复制到另一个表单时(使用简单的 Ctrl+C、Ctrl-V),所有属性也会被复制。关于我可以在哪里(或如何)处理在表单上复制或粘贴组件并清除复制的值(或将它们设置为默认值)的任何想法?现在,我最终想到了将组件的所有者表单名称(或其他唯一属性)保留在特殊组件属性中,并将其与组件的 Loaded 方法中的实际所有者名称进行比较。也许有更优雅或更简单的方法?

0 投票
0 回答
94 浏览

delphi - delphi (RIO 10.3) 可以在运行时访问组件图标(从包二进制资源?)

是否可以在运行时访问 IDE 中使用的组件图标?

我知道图标在组件开发过程中作为二进制资源编译到包中,IDE 可以访问它们以显示,例如在组件面板上。但我对二进制资源和功能(RCDATA、位图等)不是很熟悉。

你能从你自己的应用程序中做同样的事情吗(你需要部署或注册什么来实现这一点?),例如获取 FMX 的组件图标TEdit