问题标签 [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.
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 的目的。
任何帮助表示赞赏,谢谢。
android - 检测何时达到 TVertScrollBox 底部然后执行一些程序
我有一个TVertScrollBox
和一堆流布局,它们是在运行时通过滚动框生成的。它是一个加载帖子的应用程序,我想在用户到达TVertScrollBox
底部时加载 10 个新帖子(布局)。
我尝试使用 ViewportPositionChange
事件
这种尝试的问题是它仅在 VertScrollBox 上存在两个流布局时才有效,这显然意味着我做错了..
我怎样才能正确地做到这一点?
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.JSON
,FValue
实现了但没有实现FStrBuffer
。
在 10.2 版本中System.JSON
,FStrBuffer
实现了但没有实现FValue
。
问题:
我们可以做些什么来保持当前的 10.2 用户正常工作并且还能够使用 10.3 Rio 更新服务器?
是否有另一种方法来实现此功能或是否有解决方法?
delphi - 更改 Delphi 10 自动生成的文件(identcache、dof、cfg...)
有没有办法改变这些文件的生成路径?默认情况下,它与文件在同一文件夹中生成.dproj
。
我想改:
- .cfg
- 自由度
- .identcache
- .res
- .stat
- .dproj.local
- 如果可能,但稍有不同,单元备份文件(~ddp、~dfm 和 ~pas)
目前使用 Delphi 10.3 Rio
delphi - 调整 Tbitmap 大小时的白色图像
此代码应该调整 a 的大小TBitmap
,但生成的位图只是一个白色图像(具有最终大小)。我正在使用它来调整大小。
知道发生了什么吗?
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 表。
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。
delphi - 控制台中的 Unicode
如何在控制台窗口中写入 Unicode 字符?我用谷歌搜索过,最常见的答案是使用UTF8String
或设置代码页,SetConsoleOutputCP
但我无法让它工作!丹麦字母 ø 显示不正确。
我确实读过这个问题: Writeln 能够支持 Unicode 吗?在发布我自己的问题之前,我确实尝试了代码。
一个小测试程序:
结果是:
简而言之,我做错了什么?
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 const
,array 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 位编译器错误还是我们遗漏了什么?有什么解决方法吗?
delphi - 新安装的库的 Delphi 10.x“无法解析单元名称”
我在安装一个第三方库的时候遇到了下面这个令人费解的情况,在这个例子中是Virtual Treeview,在这里我将作为一个例子。
按照 INSTALL.txt 中的安装过程后,新组件出现在 Delphi 的组件面板中,并且可以添加到表单中。
但是,构建提供的示例项目之一,在这种情况下“最小”失败,说:
'Cannot resolve unit name "VirtualTrees" at line xxx',这是列出 VirtualTrees 的使用语句。
与该症状一致,在源代码编辑器中,(使用)VirtualTrees 和子组件声明用红色波浪线标记,表示标识符未声明或未解析。
提供的演示项目设置为针对 Windows 32。但令人费解的是,如果我将目标切换到 Windows 64,它将编译。
安装包括:
将提供的 zip 文件解压缩到您找到源包的任何位置。
在 Delphi 中,打开项目组:File > Open .... VirtualTreeView.groupproj
加载后,在项目树中,右键单击 VirtualTreesD26.bpl > Install。
使用“工具 > 选项 > 语言 > Delphi 选项 > 库 > 库路径 > [...]”将 VirtualTreeView 的“源”文件夹添加到库路径
是什么让 IDE 了解该组件,但随后无法为 Windows 32 编译,而为 Windows 64 编译成功?