问题标签 [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.
delphi - 如何访问非可视化 Delphi 组件的设计位置?
在 IDE 中设计表单时,可以自由放置和定位非可视组件(例如 TMainMenus、TDatamodules)。该位置是持久的,因此在重新加载表单时,这些组件会出现在正确的位置。
但是,TComponent 没有 Top 或 Left 属性!
那么,我的代码如何访问非可视组件的“设计位置”?
delphi - 我可以使用 .Create(Nil) 而不是 .Create(Application)
我有一个具有 TComponent 变量的单元,我在单元初始化时创建此组件,如下所示:
在我关闭 Delphi 时安装该单元后,它给我一个访问冲突错误消息 (EAccessViolation)
但是当我将我的创建者更改为如下
一切顺利...我想知道区别?什么是更好的?
注意:错误仅在关闭 delphi 时出现(意味着在设计时)。
谢谢。
delphi - 我可以使用默认的 WriteComponent 操作将 Delphi TPersistent 序列化为 TComponent 的字段吗?
我对如何从具有 TPersistent 字段的 TComponent 中写出属性感到非常困惑。例如我有:
当我使用以下编写器代码时:
我只得到以下内容:
即缺少 TPersistent TChildObj。
这篇关于组件序列化的文章指出“默认情况下,组件将流式传输任何非 TComponent 类型的 TPersistent 属性。我们的 TPersistent 属性像组件一样被流式传输,并且它可能具有其他将被流式传输的 TPersistent 属性。” 但是,当我进入 System.Classes 时,在第 12950 行(XE3)附近进行了测试:
这似乎表明只有组件和子组件被序列化。如果我让 TChildObj 从 TComponent 下降(并给它一个名字),我会得到它的名字出现在书面文件中(但仍然没有属性)。
我真正不明白的是,TControl(一个组件)具有 Font 属性(TPersistent),例如,当您编写 TLabel 时,它会很好地流出。
还是这与默认属性有关?
任何帮助表示赞赏。
c++ - 是否可以为动态创建的 TComponent 派生类实例传递 NULL Owner 参数?
我经常使用 C++ RAD Studio 和 Builder 6,并且经常在编写非可视代码时动态创建表单或动态创建非可视组件。在设计表单时,放置在该表单上的组件的 Owner 属性会自动设置,所以我从不担心。但是,当创建从TComponent
动态派生的任何内容时,我总是将NULL
其作为Owner
参数传递,因为我总是负责稍后释放内存。
Borland/Embarcadero 文档并没有真正涵盖在动态创建事物的情况下所需的内容(或者我可能没有在正确的地方寻找),并且似乎只涵盖了基于设计时表单的场景。
我想知道是否为动态创建的组件传递一个 NULL 所有者是正确的做法,或者它是否会导致稍后会出现的内部问题。代码可以编译并且工作正常,但我想知道它是否会导致或可能导致任何幕后问题。
android - Delphi XE5 ComponentCount 分段错误(搜索父级 tcomponent )
此代码收集指定根组件中的所有 TFMXControl。检查父级和组件名称前导。此代码在 Win32 32.bit windows 目标中运行良好,但在 LANC soubrutine 第一行出现页面错误的 Nexus(android 平台)中无法正常运行。我不知道.. :(
这也不起作用,但它非常简单。(Win32 工作正常)(Tform1 简单移动表单)
delphi - Delphi:将 TComponent 保存到 Clientdataset blob 字段
我有一个像下面这样的 TComponent 类派生,试图保存到客户端数据集 blob 字段:(从互联网复制,应得的学分)
火鸟桌是...
写入数据库...
(全局设置为 TSaveComponent。)
从数据库读取...
问题:Stream.ReadComponent(self) 行中总是出现“流读取错误”。请问这个怎么解决?
我可以确认保存组件工作。我检查了表格并在 GlobalSetting 中查看了已发布的字段,但我不确定它是否是正确的格式。(如果需要,我可以显示十六进制表示)
编辑:
整个解决方案适用于 IBX 组件;使用 DBExpress/Clientdataset 组件,从 blob 字段读取流总是会导致'Stream read error.'
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 都来自样式资源。它们实际上不是在表单上创建的组件,它们是由样式创建的。
所以我的问题是这个。
- 这种方法有效吗?
- 是否有标准方法,例如使用可以更新的样式对象?
- 我只是没有刷新正确的东西吗?
- 使用了错误的刷新方法,可能是ApplyStyle?
...编辑....下面是请求的示例...
使用以下样式文件
forms - Delphi:继承的 Create 给出访问冲突
我制作了一个应用程序,可以打开其他几个表单来处理任务。所有表格都可以正常工作,除了一个。我对所有表单都使用相同的代码。就像是:
FormTypeA := TFormTypeA.Create(Application);
在 Create 构造函数中,我添加了一些代码来初始化表单。它包含如下行:
就行“继承的Create(AOwner);” 我收到访问冲突:“Project ThisApplication.exe 引发异常类 $C0000005,消息为‘c0000005 ACCESS_VIOLATION’
我根本不知道在哪里查看我的代码来解决问题。正如我所写,其他形式使用相同的结构并且工作正常。
任何建议都会非常受欢迎。
delphi - 在 Delphi 中处理从一种形式到另一种形式的复制组件
编写我自己的从 TComponent 继承的 Delphi VCL 组件,其中包含一堆属性,这些属性对于组件的所有者表单必须是唯一的。当我将组件从一个表单复制到另一个表单时(使用简单的 Ctrl+C、Ctrl-V),所有属性也会被复制。关于我可以在哪里(或如何)处理在表单上复制或粘贴组件并清除复制的值(或将它们设置为默认值)的任何想法?现在,我最终想到了将组件的所有者表单名称(或其他唯一属性)保留在特殊组件属性中,并将其与组件的 Loaded 方法中的实际所有者名称进行比较。也许有更优雅或更简单的方法?
delphi - delphi (RIO 10.3) 可以在运行时访问组件图标(从包二进制资源?)
是否可以在运行时访问 IDE 中使用的组件图标?
我知道图标在组件开发过程中作为二进制资源编译到包中,IDE 可以访问它们以显示,例如在组件面板上。但我对二进制资源和功能(RCDATA、位图等)不是很熟悉。
你能从你自己的应用程序中做同样的事情吗(你需要部署或注册什么来实现这一点?),例如获取 FMX 的组件图标TEdit
?