问题标签 [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.

0 投票
0 回答
87 浏览

delphi - FMX 窗口/面板中有多个水平 TSplitter

我的 FMX 应用程序具有三个垂直堆叠的可调整大小的面板,共享两个水平 TSplitter。

如何让 TSplitter 仅调整拆分器正上方和正下方的面板的大小?

0 投票
0 回答
86 浏览

delphi - Delphi Firemonkey TMemo - 拖动突出显示的文本?

FMX TMemo 可以支持拖动突出显示的文本吗?

在 10.4 项目中删除默认 TMemo 不允许拖动突出显示的文本。我找不到可以启用拖动文本的设置。

0 投票
1 回答
1914 浏览

string - 将 TStream 转换为字符串?

在 Delphi 10.4 中,我尝试使用以下代码将 a 转换TStream为 a :string

但是在这个代码行中,我得到一个异常“TStream.Seek not implemented”:SS.CopyFrom(aStream, 0);

为什么?我怎样才能“治愈”这段代码?

0 投票
1 回答
242 浏览

delphi - 没有 Application.ProcessMessages 的 Delphi FMX 绘制组件

Delphi 10.4 FMX(虽然我确信这是一个一般的 Delphi 问题)

我的对话窗口正在读取一个大文件。

如果没有 Application.ProcessMessages,则永远不会绘制 Label 和 ProgressBar。我不认为 Application.ProcessMessages 是最好的方法,因为它在几千次调用后往往会崩溃。

在这样的批处理过程中重新绘制组件的最佳实践是什么?

0 投票
2 回答
482 浏览

delphi - F2051 单元用不同的版本编译(再次)

警告:长读。这个问题引用了关于 F2051 的其他一些问题)

我们的源代码树中有一个名为 PatchLibs 的文件夹,我们在其中放置了第三方源代码的修改文件。
这是在项目搜索路径中:..\Skin;..\PatchLibs

我将文件 dxBar.pas 从 DevExpress 控件复制到 Patchlibs 中,并在实现部分修改了一些代码。

.dcu现在,在构建时(删除了所有本地文件并进行了“清理”),我得到了臭名昭著的:

它不是指一行代码。我在开始编译时收到消息。

配置:

  • 在新 VM 中安装新的 Delphi 和 DevExpress 版本;复制了程序源代码树。

  • C:\DelphiLibs\DevExpress\VCL\Library\RS27在 32 位库路径中

  • 该文件夹包含所有 DevExpress dcu,特别是cxBarEditItem.dcudxBar.dcu
    $(DXVCL)\Library\RS27\Win64库路径也是如此,但这是一个 Win32 应用程序)

  • 没有其他cxBarEditItem.dcu任何地方出现;dcBar.pas并且cxBarEditItem.pasc:\DelphiLibs\DevExpress\VCL\ExpressBars\Sources\
    (我什至扫描了磁盘中的所有 cx*.* 和 dx*.* 文件)。

  • 该源文件夹也存在于浏览路径 ( $(DXVCL)\ExpressBars\Sources)

  • 这些只是单位(没有相应的.dfm文件)

  • Patchlibs 中还有其他修改过的 DevExpress 文件,我对此没有任何问题;还有一些我有同样的问题(不仅仅是dxBar)。

  • 项目设置为将文件放置在其源.dcu旁边(单元输出目录为空白).pas

  • 没有 DevExpress 文件是项目的一部分

  • 项目中的其他源文件已更改

如果我将副本拉cxBarEditItem.pas入 Patchlibs,则错误只会传播到另一个单元(重复地)。

尽管已经阅读了很多答案(值得注意的 SO 问题:为什么我的单位是“用不同版本编译的”我自己的文件?我只是不明白为什么会发生错误以及这次如何修复它
cxBarEditItem.pashasdxBar在它的 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 选项设置和内容之间的关系。 然后,我将它们的设置与我们项目中的设置进行了比较,发现了以下差异(删除了不相关的行):PackagescxLibraryRS27.dprojdxBarRS27.dprojcxLibraryRS27
.dproj.dproj
cxLibraryRS27.dproj

他们有这个额外的:

我们有这个额外的:

他们没有这个 PropertyGroup

通过这些,我认为这些是它们不同的设置,可能会影响生成的.dcu文件:

  • 范围检查 {$R-}

  • 溢出检查 {$Q-}

  • 本地调试符号关闭 {$D-}

  • 关闭 {$C-} 的运行时断言

  • 符号参考信息关闭 {$L-}

  • 关闭 {$J-} 的可写常量

  • exe 中的调试信息关闭 {$Y-}

所以我把它放在顶部dxBar.pas

{$C-,D-,J-,L-,Q-,R-,Y-}

不,没有成功...

0 投票
1 回答
161 浏览

delphi - TINiFile.WriteBinaryStream 创建异常

在 Delphi 10.4 中,我尝试将有效的TPicturebase64 编码保存到 INI 文件中:

WriteBinaryStream创建一个异常:

ERROR_MORE_DATA 234 (0xEA) 更多数据可用。

为什么?这是什么意思?如何解决这个问题?

编辑:考虑到@Uwe Raabe 和@Andreas Rejbrand 所说的,这段代码(不使用base64 编码)现在可以工作:

0 投票
1 回答
134 浏览

delphi - WriteBinaryStream 压缩成 INI 文件?

在 Delphi 10.4 中,我尝试将压缩的有效 TPicture 保存到 INI 文件中,尝试复制文档中的ZLibCompressDecompress 示例

但流并未保存在 INI 文件中。生成的 INI 文件仅包含以下几行:

[自定义]
IMG=

那么如何将压缩流保存在 INI 文件中呢?

0 投票
1 回答
222 浏览

delphi - 将 INI 文件中的 base64 编码数据加载回 TPicture?

在 Delphi 10.4 中,我TPicture使用以下代码成功地将有效的 base64 编码保存到 INI 文件中:

现在我想反转这个过程,即将数据从 INI 文件加载回TPicture

但是当发送图片时CodeSite.Send会创建一个 AV!(发送一个TPicture通常CodeSite.Send确实有效,在这种情况下,AV 显然意味着图片已损坏)。

那么如何将数据从 INI 文件加载回TPicture?

0 投票
1 回答
1549 浏览

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.htmlhttp://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 日)没有帮助。

0 投票
2 回答
596 浏览

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 上显示这些字段没有问题。