小编War*_* P的帖子

如何以类似于.NET FileHelpers的方式读写CSV?

任何人都知道如何以类似于.NET FileHelpers的方式导入/导出csv,txt文件,但是使用Delphi,考虑空格和引号并以类似于CSV转义在Excel中工作的方式处理传统的CSV转义规则?

REF.链接http://www.filehelpers.com/

如果您的回答倾向于:"为什么这个懒惰的家伙不会写一个简单的CSV解析器",请考虑这5分钟的读数,然后您将知道为什么CSV解析不是微不足道的:

http://secretgeek.net/csv_trouble.asp

csv delphi import export

9
推荐指数
2
解决办法
1万
查看次数

在Delphi中打开表单

我想从Thread创建表单的新实例(并显示它们).但似乎它冻结了我的应用程序和我的线程(我的线程变成了非同步线程,它冻结了我的应用程序).

像这样(但它不是我想要的)

procedure a.Execute;
var frForm:TForm;
    B:TCriticalSection;
begin
   b:=TCriticalSection.Create;
   while 1=1 do
   begin
     b.Enter;

        frForm:=TForm.Create(Application);
        frForm.Show;
     b.Leave;
     sleep(500); //this sleep with sleep my entire application and not only the thread.
      //sleep(1000);
   end;
end;
Run Code Online (Sandbox Code Playgroud)

我不想用Classes.TThread.Synchronize方法

forms delphi synchronization thread-safety

9
推荐指数
2
解决办法
1万
查看次数

从第三方软件识别/列出COM对象和属性

我正在尝试设计一个可以在任何不同的应用程序上识别COM对象及其属性的应用程序.这是我第一次尝试这样做,而且我不确定从哪里开始.理想情况下,它将使用Delphi XE2制作,但我愿意接受建议.

如果我有CLSID,有没有办法"扫描"正在运行的应用程序以查找基于它的对象?或者,换句话说,是否有更好的方法在任何正在运行的应用程序中列出/查找活动对象?

非常感谢任何帮助,以及关于该主题的良好文档的任何指示.

编辑:问题实际上是在任何其他应用程序中查找COM对象,列出属性以及我需要的其他问题已在其他问题中得到解答.

delphi com automation

9
推荐指数
1
解决办法
386
查看次数

使用多个客户端在互联网上使用firebird服务器的经历?

有没有人通过互联网真实体验火鸟数据库?

我有一个典型的Windows会计/ ERP软件(用Delphi完成),与Firebird数据库服务器工作得很好.现在我的网友(300 aprox的.现在,而是应该增加)也希望"在云中"的工作(从连接办公室,从笔记本电脑,从房子等).将标准Web应用程序的所有内容重新创建是很多工作(例如,HTML + CSS + JS + PHP + MYSQL),所以我正在考虑保留win客户端(我不关心其他操作系统)但不是生活在客户端局域网中的服务器将其移动到我将收缩的一对专用服务器(一个主服务器和一个辅助服务器再次启动失败).

搜索我遇到了这个常见问题解答http://www.firebirdfaq.org/faq53/,它解释了fb协议,它不适合在互联网上工作,但今天我的所有用户仍然至少有1MBbit /秒ADSL互联网连接(我认为这不像faq那样慢).

有人这样做过吗?经历是什么?fb服务器对互联网开放有多安全?他们的规模如何?

我知道,建立一个"中间件"与SOAP例如将是比较正常的,但我依然评估这里的解决方案是更加快速和容易的(我仍然有与复制,备份,hearbreath服务的一些工作,但它的很多不到为网络重做一切).

谢谢!编辑:FB版本:2.5.

delphi security firebird

9
推荐指数
1
解决办法
6465
查看次数

git存储库是否有自己的core.autocrlf本地值,它会覆盖全局值?

根据这个问题,我知道git中的core.autocrlf = true会导致CRLF转换为LF.

但是,当我键入:git config core.autocrlf

我明白了:假

但是,当我暂存已经在repo中的已修改文件时,我仍然会收到以下警告:

Warning: CRLF will be replaced by LF in File1.X.
The file will have its original line endings in your working directory.
Run Code Online (Sandbox Code Playgroud)

我的猜测是文件的repo副本已经设置为"autocrlf = true".

问题:A.如何查询文件或git仓库是否已经强制AutoCrlf?B.如何关闭autocrlf?

git core.autocrlf

9
推荐指数
1
解决办法
4196
查看次数

使用我自己构建的调试库和常规DCU在Delphi中管理非常大的代码库

我正在尝试解决此编译错误,仅在Debug配置中发生,并且仅在下面描述的情况下:

[dcc32 Fatal Error] MyIndyTCPChannel.pas(22): F2051 Unit IdIOHandlerSocket was compiled with a different version of IdGlobal.IdDisposeAndNil
Run Code Online (Sandbox Code Playgroud)

我正在开发一个非常大的Delphi代码库,拥有250万行内部代码和300万行组件代码,其中包括几个大型商业Delphi组件套件(Developer Express,TeeChart等),以及大量代码库开源delphi组件,以及一个相当大的内部开发组件集,编号252个包,其中大约140个是设计时+运行时或设计时,其他是运行时包(也被加载到IDE中)在运行时,由其关联的设计时包中的DLL依赖项).

我们的主库路径已经优化到尽可能小,并且它包含Delphi附带的路径作为标准,再加上我们添加的三个,主要的是单个"OurCompanyLibraryDCU"文件夹,其中包含下面的文件夹我们使用的两个平台和两个配置:

c:\dev\OurCompanyLibraryDCU\Win32\Release
c:\dev\OurCompanyLibraryDCU\Win32\Debug
c:\dev\OurCompanyLibraryDCU\Win64\Release
c:\dev\OurCompanyLibraryDCU\Win32\Debug
Run Code Online (Sandbox Code Playgroud)

上述每个文件夹都包含一个文件夹中的BPL,DCP和DCU文件集,用于该平台/配置组合.

在项目选项中使用了如下的宏,因此我们可以更改平台和配置,并正确解析目录:

$(OURCOMPANYLIBRARYDCU)\$(Platform)\$(Config)

OURCOMPANYLIBRARYDCU是一个环境变量,$(X)是在Delphi IDE的上下文中扩展环境变量的语法.

我正在尝试将最重要和最大的VCL应用程序项目(称为BigApp.dproj)构建,以便项目搜索目录仅包含我们的APPLICATION源文件夹,并且不需要项目搜索路径来包含我们所有的第三方组件LIBRARY源代码.为此,我们需要链接调试DCU或释放DCU.

到目前为止,除了可以使用Debug和Release DCU的情况外,我们一切正常.版本DCU位于库路径中,调试DCU位于IDE设置中的Debug DCU路径中.面对这两个库之间的选择,Delphi的链接器似乎失败,每当存在两组DCU时,这种形式的错误,当我单击Build,并且Build Configuration设置为Release时,我得到F2051错误.F2051错误的普通原因是存在多个不兼容的二进制DCU并且都是可访问的,并且链接器无法使其全部工作.但是,如果你想在库路径中同时使用Debug和Release DCU,我认为这种情况不会发生,因为Linker会为你选择调试或释放DCU.

如果我没有构建调试DCU,则不会发生上述问题.我怀疑我的调试DCU是微妙的"无效"或Delphi中的Debug-DCU选择算法不起作用,但不知道为什么,或如何解决这个问题.

多部分问题:

A.每个平台/配置组合都有一个文件夹,在单个文件夹中包含DCU,BPL和DCP,然后添加到已知导致问题的IDE库路径中?我是否需要三个子文件夹,每个平台+ config + filetype共有12个文件夹,或者我可以通过platform + config将它们保存在一起吗?

B.在包编译情况下,是否可以让IDE库路径包含OurCompanyLibraryDCU文件夹,并将该文件夹配置为DCP输出目录,包输出目录和单元输出目录?我担心的是,通过使输入文件夹和输出文件夹相同,有一种情况是编译器可能无法从.pas源重建单元,只是链接先前编译的DCU.

在此输入图像描述

C.如果我发生了这个问题,我应该如何防止每次构建BigApp时从源代码编译超过250万行的组件LIBRARY代码,而只是通过DCU链接它们,并且仍然有调试并释放dcus正常工作?

D.如果我转到Win32\Debug文件夹并删除IdGlobal.dcu,我可以通过原始错误.这告诉我,我的包编译(用于调试配置)正在生成INVALID IdGlobal.dcu.这甚至可能吗?delphi可以默默输出乱码的DCU吗?

注意:我没有使用,也无法使用Runtime Packages来处理应用程序大小问题.

更新:我应该在这里做的第一件事是验证ZERO额外的DCU文件在我的硬盘驱动器上是任何地方,无论如何.这是标准的F2051错误建议.在我处理完这个问题后,我会更新这个问题.似乎Delphi本身可以将DCU从一个地方复制到另一个地方,或者不在CURRENT搜索路径中的虚假DCU可能已经在某个其他项目的搜索路径中.可能会出现一种坏DCU拷贝的桶式旅.一旦我确定发生了什么样的坏DCU代或副本,我就会更新问题.

更新2:我现在保证在构建之前不存在IdGlobal.dcu的额外副本,并且问题仍然存在.因此,问题随后打开了构建IdGlobal.dcu时使用的编译器选项,版本化了在Debug构建中构建BigApp.dproj时使用的编译器选项.

更新3:虽然我的所有程序包编译似乎都没有错误地完成,但是在启动DCC32.exe或MSBUILD.exe来构建程序包期间,它们似乎没有使用正确的库搜索路径.这个库路径不一致问题似乎是核心问题,感谢Rufo爵士指出这一点.

delphi packages delphi-xe6 delphi-xe7

9
推荐指数
2
解决办法
844
查看次数

征服复杂性,Eckel关于Java和Python以及块理论

他在1998年的Bruce Eckel的Thinking In Java简介中说:

编程是关于管理复杂性:您要解决的问题的复杂性,以及解决它的机器的复杂性.由于这种复杂性,我们的大多数编程项目都失败了.然而,在我所知道的所有编程语言中,他们都没有全力以赴,并决定他们的主要设计目标是克服开发和维护程序的复杂性.

在第二版和后一版中,他添加了这个脚注(大约2003年):

我在第二版中回过头来看:我相信Python语言最接近完全正是如此.见www.Python.org.

我是java的dabbler,有Delphi(Pascal),C,C++和Python的背景.这是我想知道的:

  1. 当埃克尔在征服复杂性时称Python为"更好"时,他究竟考虑了什么?他和其他人一起使用这两者的想法是什么?

  2. 您如何看待征服复杂性?Python的更短和更简洁的语法是一种克服复杂性的关键方法(因此,例如,Jython可能是Java优秀库的一个很好的桥梁,以及Python的简洁语法),或者是Java的强类型思维,从C++继承了这个想法,从Simula继承了这个想法,我认为它是征服复杂性的关键?或者它是Rapid Application Designer(想想Delphi,还是Java,优秀的免费NetBeans窗口/表单设计器工具)或组件,bean或J2EE?什么征服了所有人,对你而言?

这已经被标记为主观的.[编辑]

注意:更多关于布鲁斯的想法,关于他喜欢Python的原因可以在这里找到.文章的一个关键引用:

Bruce Eckel:他们说你可以在脑海中持有七个加减两个信息.我不记得如何用Java打开文件.我写过章节.我已经完成了很多次,但步骤太多了.当我真正分析它时,我意识到这些只是他们所做的愚蠢的设计决定.即使他们坚持在java.io中使用Decorator模式,他们也应该有一个方便的构造函数来简单地打开文件.因为我们一直打开文件,但没有人能记得如何.抱在脑海里的信息太多了.

所以,块理论.通过块理论度量,Python杀死了其他所有人.我会批他的.但您使用的指标是什么?我想特别邀请人们支持Java,如果你愿意的话,反对布鲁斯.

[请不要投票重新开放,这个主题本质上是煽动性的,而且我的失言已经让它更加如此.我同意主持人的意见.]

python java complexity-theory

8
推荐指数
2
解决办法
1189
查看次数

维护订单的键/值集合

我需要一个delphi键/值集合,这将允许我按照插入/添加键/值对的相同顺序迭代集合.

TList<T>保证订单但TDictionary<T1, T2>不保证.

我想我总是可以定义一个,TList<TPair<Key, Value>>但使用它会更麻烦.

是否有符合我要求的内置集合类型或者包装TList<TPair<Key, Value>>是我的最佳选择?或者也许最好有一个TList<Key>和一个TDictionary<Key, Value>并遍历列表.

delphi generics collections

8
推荐指数
1
解决办法
4377
查看次数

在Delphi XE4中是否可以更改app短标题而不使其与Project dpr名称相同?

我正在编写我的第一个delphi驱动的iPhone应用程序.我已创建它但我希望它被命名为.dpr文件的名称以外的东西,因为dpr文件不能包含空格,例如,EXE名称并不总是与人们可以分配应用程序的名称相同.

在Windows Delphi应用程序中,EXE的名称与.dpr文件的名称相同,因为快捷方式中的英文名称,或桌面上或任何其他非英语位置的开始菜单中的本地化名称不一定是与项目名称相同.在iOS中,应用程序短名称可能包含空格,而Delphi项目名称则不能,因此我很惊讶地看到这两者是硬连接在一起的.

在XCode中,您可以单独在iOS主屏幕上设置软件包名称,项目名称和可见名称.

我的问题是,因为我今天刚安装了Delphi XE4(RTM),我正在尝试:

  1. 我可以在项目选项中的某处设置捆绑ID吗?我似乎找不到它.Bundle id对于任何朝向app store的应用程序非常重要,但我看不到可以设置它的UI元素.

  2. 我还可以在某处设置显示名称吗?

  3. 我可以在某处查看和编辑应用程序的.plist(Apple要求所有应用程序在iOS上拥有的属性列表),还是为我生成而无法查看或修改它?似乎.plist文件位于Windows的Debug \文件夹中的磁盘上,这意味着Delphi XE4将其视为输出工件而不是输入源文档,就像在Xcode项目中一样.

delphi firemonkey-fm2 delphi-xe4 delphi-ios

8
推荐指数
1
解决办法
915
查看次数

Delphi 10 Seattle更改为Win32 GetPath和冗余TPoint和_POINTL记录类型

我试图将一些在Delphi XE8中运行的代码移植到Delphi 10 Seattle.此代码调用Winapi.Windows中的GetPath函数.

新的Win32 API函数签名是:

function GetPath(DC: HDC; Points: PPointL; Types: PByte; nSize: Integer): Integer; stdcall;
Run Code Online (Sandbox Code Playgroud)

在XE8中,先前该函数具有"var Points,Types",其通常被称为"var无类型"参数.

修复代码以使用Delphi 10 Seattle意味着"统一"应用程序代码中的任意类型,以准确使用单元本身中声明的类型.然而令我困惑的是,有两种类型,PPointL和TPoint,当我得到GetPath函数时,它填充的数据被填充到_POINTL记录数组中,因此在Winapi.Windows中声明:

type
  _POINTL = record      { ptl }
    x: Longint;
    y: Longint;
  end;
  {$EXTERNALSYM _POINTL}
  PPointL = ^TPointL;
  TPointL = _POINTL;
Run Code Online (Sandbox Code Playgroud)

但是,还有另一种类型TPoint,在System.Types中声明:

 TPoint = record
    X: FixedInt;
    Y: FixedInt;
  public
Run Code Online (Sandbox Code Playgroud)

在其他地方,对于32位和64位Windows,FixedInt都是Longint的别名,因此就我所知,TPoint和_POINTL至少在Windows平台上是等效的.

如果现有的应用程序组件代码都使用名为TPoint的类型,如下所示:

procedure AddPoint(const P:TPoint);
Run Code Online (Sandbox Code Playgroud)

......对于Delphi 10中的RTL源内部情况,我有什么意义?我应该怎样解决这个问题?别名TPoint到单位级_POINTL?

我该如何解决这个问题并继续进行?由于此代码是商业组件,我想我会等到供应商修复此问题,但是,我认为理解RTL中的_POINTL和TPoint,以及为什么这些结构在定义中冗余/重复,将有助于其他人将低级Win32代码从Delphi XE8移植到Delphi 10 Seattle.

更新:作为一种解决方法,我发现我可以重新声明GetPath函数的导入,并在我自己的私有单元实现区域导入中将其保留为var无类型,并继续:

{$ifdef D23}
{$POINTERMATH ON}
      // Delphi 10 Seattle: function GetPath(DC: HDC; Points: PPointL; Types: PByte; nSize: Integer): …
Run Code Online (Sandbox Code Playgroud)

delphi winapi delphi-10-seattle

8
推荐指数
1
解决办法
1013
查看次数