我需要将一个包中定义的大量Delphi组件更改为另一个包中的类似组件.可以通过替换DFM文件中的文本(组件类型和属性)来完成大部分繁琐的工作 - 当然保存为文本.
我搜索了Stackoverflow和Google,现在正在调整来自http://www.felix-colibri.com/papers/colibri_utilities/dfm_parser/dfm_parser.html的Felix Colibri DFM解析器.
我遇到了解析器窒息的DFM文件中的"特性":类型规范之后的[number] s:
inherited DialoogEditAgenda: TDialoogEditAgenda
ActiveControl = PlanCalendar
Caption = 'Agenda'
[snip]
inherited PanelButtons: TRzPanel
Top = 537
[snip]
inherited ButtonCancel: TRzBitBtn [0] <== *here*
Left = 852
[snip]
end
object CheckBoxBeschikbaarheid: TRzCheckBox [1] <== *here*
Left = 8
[snip]
end
inherited ButtonOK: TRzBitBtn [2] <== *here*
Left = 900
[snip]
end
end
inherited PageControl: TRzPageControl
Left = 444
[snip]
end
object PanelBeschikbaarheid: TRzSizePanel [2] <== *here*
Left = 967
[snip] …
Run Code Online (Sandbox Code Playgroud) 我们注意到,在检查更新时,我们的.DFM
文件添加ExplicitWidth
和ExplicitHeight
性能-但我们不知道为什么.
我的问题是:
下面是一个显示添加ExplicitWidth
属性的示例:
object Splitter2: TcxSplitter
Left = 0
Top = 292
Width = 566
Height = 8
Cursor = crVSplit
HotZoneClassName = 'TcxXPTaskBarStyle'
AlignSplitter = salBottom
Control = BottomPanel
Color = clBtnFace
ExplicitWidth = 8
end
Run Code Online (Sandbox Code Playgroud) 当您右键单击Delphi表单时,您将获得弹出上下文菜单.底部选项是Text DFM.可以选中或不选中此选项.选中或取消选中此选项时的含义是什么?
对于文档和进一步检查,我想在许多项目中的所有DFM文件上运行"提取字符串"以查找所有SQL语句.是否有可以执行此操作的命令行工具?DFM文件都是文本格式.
我最近修改了我的一个组件,它发生了它不再使用它之前使用的属性之一.
但是,这些属性在整个项目中以多个.dfm文件编写.现在,当我尝试编译项目时,我得到"错误读取.:属性<...>不存在"
复杂的部分是属性值是二进制数据(存储在多行中),我不能用Delphi替换或notepad ++ regexp删除它(因为它们是基于单行的).
所以我的问题是:
是否有任何第三方工具或方法可以轻松地从多个.dfm文件中删除属性?
我们的Delphi 7开发团队以文本模式存储表单文件(dfm),并使用源控制系统(Subversion)来跟踪更改.
有时,我们注意到一个表单文件在修订版之间返回二进制格式,导致像TortoiseMerge这样的差异工具抱怨.
使用Subversion更改日志,我可以看到DFM文件之前以文本形式存储.软件开发人员永远不会手动将存储文件格式更改回二进制文件.
你遇到过同样的事吗?这是一个已知的问题吗?
随着时间的推移,我已经推出了自己的格式来保存和加载对象属性,但是由于不得不重新审视这个,我想知道使用Delphi自己的文本DFM格式.我知道这实际上是一种"内部"格式,但现在它的读者看起来非常明确,它可以应对所有类型的财产.有没有人对可能的陷阱有任何评论?
经过多年的Delphi开发,我现在在我们的应用程序中共享了数百种表单.编译范围从Delphi 7到XE,因此可以在任何IDE中打开一个表单.Delphi 7之后众所周知的Explicitxxx属性添加解决方案,以避免形式意外获取早期编译器无法处理的属性(例如Andreas的DDevExtensions),但我想要一个更积极的'开关'阻止Delphi制作或保存任何形式修改.期.
当然,您可以使用只读标志,并且版本控制系统提供了额外的方法,可以看到发生了这样的修改.我真正喜欢的是一个{$ LockDFM}开关,我可以放在窗体的单元中,或者查看窗体布局时的上下文菜单选项.
任何人都可以想到一个实现这一目标的巧妙方法吗?
谢谢
我试图在使用这些软件包编译我的应用程序之前开始创建自己的库作为软件包,从而模块化我的代码.多年来,我有点'了解'包装,当我加载组件包并点击"安装"时它会松一口气,而且确实如此.我知道安装组件(或组件)的过程是通过创建BPL然后在IDE中注册.
我开始迷路的地方是如何使文件可用,以便我可以使用EITHER编译包或预编译的dcu(就像第三方供应商那样)并且不会一直指向我的项目源代码.我可以使用以下设置创建一个包:
我已经指定我的所有输出都将进入'c:\ scratch\wow'.在构建之后,我找到了TEST.BPL,TEST.DCP和许多DUC.现在,当我指向此文件夹中的另一个项目以使用DCU时,我得到一个缺少的DFM错误(其中一个单位是一个表单).我应该手动将所需的DFM复制到此输出文件夹中吗?DPK知道这个表格,为什么我没有为我复制DFM?我假设使用TEST.BPL,该文件包含所有内容,但我希望在两种模式下工作.当然,我可以通过在我的项目搜索路径中包含源文件夹来找到DFM来解决这个问题,但是第三方库似乎已经在其输出文件夹中有了DFM.他们是否使用安装程序在那里安装它们?谢谢
代替
这是发布的另一个问题的新版本,现在有一个可重现的示例。
我正在尝试将文档特征矩阵从 29117 条推文转换为 R 中的数据帧,但出现错误
“asMethod(object) 中的错误:Cholmod 错误‘问题太大’位于文件 ../Core/cholmod_dense.c,第 105 行”
dfm 的大小约为 21MB,有 29117 行和 78294 个特征(推文中的单词按列分为 1 或 0,具体取决于该单词是否出现在推文中)
##generel info;
memory.size(max=TRUE)
# [1] 11418.75
sessionInfo()
# R version 3.6.1 (2019-07-05)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 10 x64 (build 18362)
##install packages, load librarys
# install.packages(c("quanteda", "devtools"))
# devtools::install_github("quanteda/quanteda.corpora")
library("quanteda")
library(RJSONIO)
library(data.table)
library(jsonlite)
library(dplyr)
library(glmnet)
##load data, convert to a dataframe, convert to a dfm
baseurl <- "https://raw.githubusercontent.com/alexlitel/congresstweets/master/data/"
d0 <- fromJSON(paste0(baseurl, "2019-10-07.json"), flatten = …
Run Code Online (Sandbox Code Playgroud)