问题标签 [delphi-10.4-sydney]
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 - FMX 窗口/面板中有多个水平 TSplitter
我的 FMX 应用程序具有三个垂直堆叠的可调整大小的面板,共享两个水平 TSplitter。
如何让 TSplitter 仅调整拆分器正上方和正下方的面板的大小?
delphi - Delphi Firemonkey TMemo - 拖动突出显示的文本?
FMX TMemo 可以支持拖动突出显示的文本吗?
在 10.4 项目中删除默认 TMemo 不允许拖动突出显示的文本。我找不到可以启用拖动文本的设置。
string - 将 TStream 转换为字符串?
在 Delphi 10.4 中,我尝试使用以下代码将 a 转换TStream
为 a :string
但是在这个代码行中,我得到一个异常“TStream.Seek not implemented”:SS.CopyFrom(aStream, 0);
为什么?我怎样才能“治愈”这段代码?
delphi - 没有 Application.ProcessMessages 的 Delphi FMX 绘制组件
Delphi 10.4 FMX(虽然我确信这是一个一般的 Delphi 问题)
我的对话窗口正在读取一个大文件。
如果没有 Application.ProcessMessages,则永远不会绘制 Label 和 ProgressBar。我不认为 Application.ProcessMessages 是最好的方法,因为它在几千次调用后往往会崩溃。
在这样的批处理过程中重新绘制组件的最佳实践是什么?
delphi - F2051 单元用不同的版本编译(再次)
(警告:长读。这个问题引用了关于 F2051 的其他一些问题)
我们的源代码树中有一个名为 PatchLibs 的文件夹,我们在其中放置了第三方源代码的修改文件。
这是在项目搜索路径中:..\Skin;..\PatchLibs
我将文件 dxBar.pas 从 DevExpress 控件复制到 Patchlibs 中,并仅在实现部分修改了一些代码。
.dcu
现在,在构建时(删除了所有本地文件并进行了“清理”),我得到了臭名昭著的:
它不是指一行代码。我在开始编译时收到消息。
配置:
在新 VM 中安装新的 Delphi 和 DevExpress 版本;复制了程序源代码树。
C:\DelphiLibs\DevExpress\VCL\Library\RS27
在 32 位库路径中该文件夹包含所有 DevExpress dcu,特别是
cxBarEditItem.dcu
和dxBar.dcu
($(DXVCL)\Library\RS27\Win64
库路径也是如此,但这是一个 Win32 应用程序)没有其他
cxBarEditItem.dcu
任何地方出现;dcBar.pas
并且cxBarEditItem.pas
在c:\DelphiLibs\DevExpress\VCL\ExpressBars\Sources\
(我什至扫描了磁盘中的所有 cx*.* 和 dx*.* 文件)。该源文件夹也存在于浏览路径 (
$(DXVCL)\ExpressBars\Sources
)这些只是单位(没有相应的
.dfm
文件)Patchlibs 中还有其他修改过的 DevExpress 文件,我对此没有任何问题;还有一些我有同样的问题(不仅仅是
dxBar
)。项目设置为将文件放置在其源
.dcu
旁边(单元输出目录为空白).pas
没有 DevExpress 文件是项目的一部分
项目中的其他源文件已更改
如果我将副本拉cxBarEditItem.pas
入 Patchlibs,则错误只会传播到另一个单元(重复地)。
尽管已经阅读了很多答案(值得注意的 SO 问题:为什么我的单位是“用不同版本编译的”我自己的文件?)
我只是不明白为什么会发生错误以及这次如何修复它。
cxBarEditItem.pas
hasdxBar
在它的 interface Uses 部分,并且cxBarEditItem
在我的 Uses 子句中,但是为什么要重新编译呢?
我当然可以开始将 DevExpress 源代码目录添加到搜索路径中,但是其中有很多,这也会导致.dcu
其中的文件。
我不想这样做,因为它掩盖了实际问题,而这在以前的 Delphi/DevExpress 设置中不是必需的:
早期 Delphi 10.3 中的 32 位库路径:
Delphi 10.4 中的 32 位库路径:
向上或向下移动最后一个或将其更改为$(DXVCL)\Library\RS27
没有帮助
这 5 条 Embarcadero 线看起来很奇怪(请参阅这个 SO question,我用旧的对应物替换了它们(并向 Embarcadero 报告);问题没有变化。
额外的研究/失败的尝试
Ian Boyd 在 2014
F2051 中遇到了一个非常相似的问题: Unit %s was compiled with a different version of %s
建议有 RTTI 设置或编译器选项。
根据大卫在那里的回答,我决定试一试。我的情况略有不同:我必须尝试找出在构建 DevEx 代码时使用了哪些编译器设置,并将它们插入到我修改后的dxBar.pas
.
我注意到DevExpress 安装的子文件夹中有两个.dproj
文件:和(需要顺便说一句)
通过将测试项目中的所有编译器选项设置为非默认值,并将其与我能够理解的所有默认值(大部分)进行比较UI 选项设置和内容之间的关系。
然后,我将它们的设置与我们项目中的设置进行了比较,发现了以下差异(删除了不相关的行):Packages
cxLibraryRS27.dproj
dxBarRS27.dproj
cxLibraryRS27
.dproj
.dproj
cxLibraryRS27.dproj
他们有这个额外的:
我们有这个额外的:
和
他们没有这个 PropertyGroup
通过这些,我认为这些是它们不同的设置,可能会影响生成的.dcu
文件:
范围检查 {$R-}
溢出检查 {$Q-}
本地调试符号关闭 {$D-}
关闭 {$C-} 的运行时断言
符号参考信息关闭 {$L-}
关闭 {$J-} 的可写常量
exe 中的调试信息关闭 {$Y-}
所以我把它放在顶部dxBar.pas
:
{$C-,D-,J-,L-,Q-,R-,Y-}
不,没有成功...
delphi - TINiFile.WriteBinaryStream 创建异常
在 Delphi 10.4 中,我尝试将有效的TPicture
base64 编码保存到 INI 文件中:
WriteBinaryStream
创建一个异常:
ERROR_MORE_DATA 234 (0xEA) 更多数据可用。
为什么?这是什么意思?如何解决这个问题?
编辑:考虑到@Uwe Raabe 和@Andreas Rejbrand 所说的,这段代码(不使用base64 编码)现在可以工作:
delphi - WriteBinaryStream 压缩成 INI 文件?
在 Delphi 10.4 中,我尝试将压缩的有效 TPicture 保存到 INI 文件中,尝试复制文档中的ZLibCompressDecompress 示例:
但流并未保存在 INI 文件中。生成的 INI 文件仅包含以下几行:
[自定义]
IMG=
那么如何将压缩流保存在 INI 文件中呢?
delphi - 将 INI 文件中的 base64 编码数据加载回 TPicture?
在 Delphi 10.4 中,我TPicture
使用以下代码成功地将有效的 base64 编码保存到 INI 文件中:
现在我想反转这个过程,即将数据从 INI 文件加载回TPicture
:
但是当发送图片时CodeSite.Send
会创建一个 AV!(发送一个TPicture
通常CodeSite.Send
确实有效,在这种情况下,AV 显然意味着图片已损坏)。
那么如何将数据从 INI 文件加载回TPicture
?
delphi - TEdgeBrowser Navigate 失败并出现错误“找不到文件”
我第一次尝试新的尝试TEdgeBrowser
失败,“系统找不到文件”
错误代码 -2147024894 = $80070002确实是 ERROR_FILE_NOT_FOUND
序列(例如按照https://www.delphipraxis.net/204266-new-vcl-tedgebrowser-component-coming-rad-studio-10-4-a.html或http://docwiki.embarcadero.com/RADStudio /Sydney/en/Using_TEdgeBrowser_Component_and_Changes_to_the_TWebBrowser_Component):
- 新建Win10 VM,启动Edge,win安装程序运行并正确安装Edge
- 通过GetIt下载并安装Edgeview2 SDK
- 复制
c:\Program Files (x86)\Embarcadero\Studio\21.0\Redist\win32\WebView2Loader.dll
到应用程序目录
配置:Delphi 10.4.3 Sydney,在 Win10 VM 中运行 32 位应用程序,安装 Edge 84.0.522.52
尝试:https:
前面没有,重新启动,试图从TApplicationEvents.OnException
然后我尝试运行演示c:\Users\Public\Documents\Embarcadero\Studio\21.0\Samples\Object Pascal\VCL\WebBrowser\Edge\EdgeBrowser.dproj
(将 dll 也复制到该目录中),但这会从其末尾给出初始化错误:
但现在 AResult 是 -2147467259 = $80004005
,这似乎与数据/ODBC 相关。
更新到 Microsoft.Web.Webview2 的更高版本 0.9.579(2020 年 7 月 20 日)没有帮助。
delphi - 如果还有日期时间字段,Delphi 10.4 无法在 DBGrids 上显示十进制 (5,2) BCD 字段
当我有一个带有 datetime 字段和 decimal(5,2) 字段的 ClientDataset 时,Delphi 10.4 无法在 TDBGrid 上显示它们,它会引发转换异常。
我准备了一个小测试项目来显示这个错误(我的真实数据来自 SQL Server,虽然我可以手动填充 Clientdataset 得到相同的错误)。
它引发了这个异常:'8200@' is not a valid integer value
小数(18,2)没有这个问题,如果我评论该行,ClientDataset.FieldDefs.Find('Decimal').Precision := 5;
则不会引发错误。
此外,如果没有日期时间字段,则也不会引发错误。这运行良好:
你认为这可以解决,而不必用十进制(18,2)字段替换我所有的十进制(5,2)字段?
更新:这是特定于 ClientDataset 的问题。如果我在 TADOQuery 或 TFDMemTable 上打开相同的数据(具有完全相同的 datetime 和 decimal(5,2) BCD 字段),Delphi 10.4 会毫无问题地显示 DBGrid。
该问题也特定于 DBGrid。在 DBEdits 上显示这些字段没有问题。