问题标签 [delphi-10.3-rio]

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 投票
0 回答
389 浏览

delphi - Delphi 10.3:无法在 IDE 中打开 DFM,内存不足

我正在 Delphi Rio 10.3 社区开发一个项目,目前有 24 个单元。我遇到问题的这个特殊表单包含 28 个相同类型的帧,每个帧都包含一个带有几个按钮和复选框的 TChart 组件(打印图表、显示/隐藏系列/标签等)。一切都很好,直到大约 20-25 帧/图表,但昨天我又添加了几个,直到达到 28。在设计和运行时没有任何错误,所以我在一天结束时愉快地关闭了 Delphi。

下次我启动Delphi时问题开始了。当我打开我的项目时,我得到的确切错误是“创建表单时出错:内存不足”。确认错误后,项目仍然可以正常打开,除了这个具有 28 帧/图表的特定 DFM 文件。我仍然可以毫无问题地编译和运行该项目,但我无法在 IDE 中可视化表单以进一步开发它。

我知道我达到了某种限制,尽管项目/表格并不大。我有一个 32GB 内存的 i7,Windows 显示我有 26GB 可用,所以我认为这已经足够了。

我没有在网上找到任何对这个确切错误消息的引用,但有一些类似的编译器错误,这不是我的情况:

http://docwiki.embarcadero.com/RADStudio/Rio/en/F2046_Out_of_memory_(德尔福)

但是,我确实尝试了在 Windows 中增加交换文件大小的解决方法,但没有运气。

我还从 Andy 安装了最新的 IDE Fix Pack 6.4.2,同样没有成功:

https://andy.jgknet.de/blog/ide-tools/ide-fix-pack/

DFM 文件大约有 3000 行,因此只粘贴其中的 28 个帧/图表之一:

单元标题:

IDE 到 IDE 调试器会在以下行出现内存不足错误:

我现在的猜测是,当我通过大约 25 帧/图表时,问题就开始了,如果那里有某种限制的话。我的问题是我不能把这个表格分解成更小的表格,因为我展示的图表只有在一起显示时才有意义(它们是更大生产流程的一部分)。我几乎没有开始,我打算有 35-40 个图表。

考虑到我的项目在运行时运行良好,一种解决方案是在运行时添加框架/图表,但这有点违背了使用 RAD 的目的。

任何帮助表示赞赏,谢谢。

0 投票
0 回答
182 浏览

android - 检测何时达到 TVertScrollBox 底部然后执行一些程序

我有一个TVertScrollBox 和一堆流布局,它们是在运行时通过滚动框生成的。它是一个加载帖子的应用程序,我想在用户到达TVertScrollBox底部时加载 10 个新帖子(布局)。

我尝试使用 ViewportPositionChange事件

这种尝试的问题是它仅在 VertScrollBox 上存在两个流布局时才有效,这显然意味着我做错了..

我怎样才能正确地做到这一点?

0 投票
0 回答
825 浏览

delphi - 10.3 Rio 中的 Datasnap 与以前的版本不兼容

我们对 Datasnap RESTfull 有一个问题,它似乎在 10.3 Rio 和 10.2 Tokyo(以及以下所有版本)之间关于 Datasnap RESTfull 功能实现不兼容。

问题:

我们有一台服务器,使用 10.2 构建,目前正在运行并为大量用户提供服务。如果我们用 Delphi 10.3 Rio 编译的服务器更新服务器,当前的 10.2 客户端(Win、MacOS、iOS、Android)会收到以下错误消息:内部:在 TJSONString 类型中找不到字段 FValue。

相反,当我们通过运行在 Amazon AWS 上的当前服务器 (10.2) 尝试使用 Delphi 10.3 Rio 编译的客户端时,我们收到以下错误消息:Internal: Field FStrBuffer cannot be found in type TJSONString。

拥有工作系统的唯一方法是使用 10.3 客户端和 10.3 服务器。但是,目前有很多用户,因此我们无法更改服务器部分并期望同时更新所有客户端(桌面和移动)。​​</p>

服务器上的代码:

客户端上的代码:

调查:

在 10.3 版本中System.JSONFValue实现了但没有实现FStrBuffer

在 10.2 版本中System.JSONFStrBuffer实现了但没有实现FValue

问题:

我们可以做些什么来保持当前的 10.2 用户正常工作并且还能够使用 10.3 Rio 更新服务器?

是否有另一种方法来实现此功能或是否有解决方法?

0 投票
0 回答
248 浏览

delphi - 更改 Delphi 10 自动生成的文件(identcache、dof、cfg...)

有没有办法改变这些文件的生成路径?默认情况下,它与文件在同一文件夹中生成.dproj

我想改:

  • .cfg
  • 自由度
  • .identcache
  • .res
  • .stat
  • .dproj.local
  • 如果可能,但稍有不同,单元备份文件(~ddp、~dfm 和 ~pas)

目前使用 Delphi 10.3 Rio

0 投票
1 回答
163 浏览

delphi - 调整 Tbitmap 大小时的白色图像

此代码应该调整 a 的大小TBitmap,但生成的位图只是一个白色图像(具有最终大小)。我正在使用它来调整大小。

知道发生了什么吗?

0 投票
1 回答
802 浏览

delphi - 是否可以在不使用 SQL 的情况下从现有表的字段定义在 Delphi(例如 FireDAC)中创建 MS Access 表?

我想创建一个新的 mdb 文件,其中包含基于以前存在的表的结构的表。我知道我可以用newTable.FieldDefs.Add()它在循环中一个一个地重新创建字段。但是由于已经有一个 oldTable 完全存放了正确的FieldDefs,这似乎非常不雅。我一直在寻找单语句解决方案!

我发现它newTable.FieldDefs.Assign(oldTable.FieldDefs)可以编译(并运行)而没有错误,但它留下newTable了零定义的字段。这使我错误地得出结论,即我不理解该语句的功能。(后来我发现它只有在oldTable.open没有发生时才会失败,当数据库不可用时不会发生这种情况,即使FieldDefs已经将其设置为 Persistent 并且在 Object Inspector 中清晰可见)

这是我经过一番调查后的原始代码:

事实证明,解决方案是使用最初链接到同一个旧数据库的 ClientDataSet 而不是 ADOTable。请参阅我的回答中的以下工作解决方案。

编辑:最后一点。我曾希望使用这种 FireDAC 方法,如此处所示,来解决缺少TADOTable.CreateTable方法的问题。唉,尽管上面和下面的“解决方案”确实可以创建一个新TADOTable的 ,但该表的字段定义并不是原始表的忠实副本。可能有无数TFDTable选项的组合可以解决这个问题,但我无法发现它,所以我恢复使用 SQL 创建我的 ADO 表。

0 投票
0 回答
110 浏览

delphi - 如何强制 Delphi 的 TADOConnection 使用 ansistring 作为命令?

通过 ADO 插入 dbf 文件时出现编码问题。

在插入命令中,我将数据转换为某些代码页,但在表中着陆不同的字节。可能是因为 unicode 字符串。

插入 DBF 后的数据:

ATENEUM SPťKA Z OGRANICZONŤ ODPOWIEDZIALNO?CIŤ SKA Wpisana w SĹdzie rej.dla Krakowa-?rôdmie§cie Wydzia' XI Gospodarczy
30-741Krakôw
Nad DrwinĹ 10,

应如示例代码中所示:

'ATENEUM SPŁśKA Z OGRANICZONŹ ODPOWIEDZIALNOCIŹ SKA Wpisana w S†dz', 'ie rej.dla Krakowa-r˘dmiežcie Wydzia', '30-741', 'Krak˘w', 'Nad Drwin† 10, '

我用相同的结果尝试了 TADOTable。

0 投票
0 回答
58 浏览

delphi - 控制台中的 Unicode

如何在控制台窗口中写入 Unicode 字符?我用谷歌搜索过,最常见的答案是使用UTF8String或设置代码页,SetConsoleOutputCP但我无法让它工作!丹麦字母 ø 显示不正确。

我确实读过这个问题: Writeln 能够支持 Unicode 吗?在发布我自己的问题之前,我确实尝试了代码。

一个小测试程序:

结果是:

在此处输入图像描述

简而言之,我做错了什么?

0 投票
2 回答
565 浏览

delphi - Delphi 10.3.1 编译器生成的代码在编译为 64 位时会发出异常

以下代码仅在编译为 64 位时才会在 Delphi 10.3.1 中生成异常 (c0000005 ACCESS_VIOLATION)。

但是,相同的代码在 Delphi 10.3.1 中编译为 32 位时不会产生异常。此外,当编译为 32 位或 64 位时,它在 Delphi 10.2.3 中也不会失败。

问题似乎在于参数类型是array of const. 如果我们更改为 64 位,代码仍然会失败array of constarray of integer因此新的 Delphi 编译器似乎存在参数数量未知的数组的问题。我们找到了通过创建一个类型来避免编译器错误的技巧,array of integer但是这个技巧对于我们需要的东西是不可用的array of const

这是根据CPU 视图在 Delphi 10.3.1 中为 64 位生成的汇编代码:

这是在 Delphi 10.2.3 中为相同功能生成的 64 位代码:

这是 Delphi 10.3.1 中的 64 位编译器错误还是我们遗漏了什么?有什么解决方法吗?

0 投票
2 回答
1567 浏览

delphi - 新安装的库的 Delphi 10.x“无法解析单元名称”

我在安装一个第三方库的时候遇到了下面这个令人费解的情况,在这个例子中是Virtual Treeview,在这里我将作为一个例子。

按照 INSTALL.txt 中的安装过程后,新组件出现在 Delphi 的组件面板中,并且可以添加到表单中。

但是,构建提供的示例项目之一,在这种情况下“最小”失败,说:

'Cannot resolve unit name "VirtualTrees" at line xxx',这是列出 VirtualTrees 的使用语句。

与该症状一致,在源代码编辑器中,(使用)VirtualTrees 和子组件声明用红色波浪线标记,表示标识符未声明或未解析。

提供的演示项目设置为针对 Windows 32。但令人费解的是,如果我将目标切换到 Windows 64,它将编译。

安装包括:

  1. 将提供的 zip 文件解压缩到您找到源包的任何位置。

  2. 在 Delphi 中,打开项目组:File > Open .... VirtualTreeView.groupproj

  3. 加载后,在项目树中,右键单击 VirtualTreesD26.bpl > Install。

  4. 使用“工具 > 选项 > 语言 > Delphi 选项 > 库 > 库路径 > [...]”将 VirtualTreeView 的“源”文件夹添加到库路径

是什么让 IDE 了解该组件,但随后无法为 Windows 32 编译,而为 Windows 64 编译成功?