Tag: delphi xe

新的TFileOpenDialog和旧的TOpenDialog有什么区别?

新的TFileOpenDialog和旧的TOpenDialog有什么区别? 在我的电脑(Win 7 / DXE)中,当我运行代码时,对话框看起来是一样的。

BCDDivide函数在Delphi XE和XE2中performance不同

FmtBcd.pas在Delphi XE2中进行了大量修改。 在我的一个项目中,我有一个使用两个Bcd值的除法操作的例子,但是这两个版本产生不同的结果。 在最坏的情况下,Delphi XE2可能会抛出Bcd overflow error 。 示例:在Delphi XE2控制台应用程序中运行以下代码: var A, B, C, D: TBcd; begin A := StrToBcd('1'); B := StrToBcd('3'); BcdDivide(A, B, C); WriteLn(BcdToStr(C)); try BcdMultiply(C, C, D); WriteLn(BcdToStr(D)); except on E: Exception do WriteLn(E.Message); end; ReadLn; end. 以上的输出将是: 0.333333333333333333333333333333333333333333333333333333333333333 BCD overflow variablesC包含具有63位小数位的Bcd值。 对variablesC执行第二次BcdMultiply操作将导致Bcd overflow error 。 但是,在Delphi XE中运行相同的代码将得到以下结果,而不会有任何exception提示: 0.3333333333 0.11111111108888888889 任何人都可以请build议一个最佳实践的方法来解决这个问题?

SOAP服务器和客户端应用程序VCL + indy demo for Delphi XE?

Delphi曾经为Web服务包含一个demos文件夹,但似乎不再包含这个。 我只是尝试了Delphi 7演示项目( SOAPDMServerWAD ,几乎完全没有UI的服务器和SOAPDMClient ),并且无法让它们运行,即使在Delphi 7中也是如此。 如果有人曾经在Delphi XE或Delphi 2010中做过类似于旧版本的SOAPDMServerWAD+SoapDMClient演示的工作,在Delphi XE中工作,并且至less有来自Delphi SOAP Server应用程序向导的最小UI,完美。 更新:演示出现在Delphi 2010中,但使用了现在已经过时的WAD(networking应用debugging器),我尝试将它移植到新的Indy runtime/web-app-development-harnessing-code ,但是我似乎无法得到它的工作。 演示运行,但服务器没有用户界面,似乎并没有运行任何HTTP服务器(使用普通的Web浏览器,通过http://localhost:port/ urls进行testing。顺便说一句,尝试谷歌search演示,这个url出现了,我不到一个小时前问,这太可怕了,谷歌。 Update2请参阅下面我自己的答案,一个链接即将推出的工作代码。

Delphi XE自定义构build目标始终处于禁用状态

我已经创build了一个自定义的MSBuild .targets文件,通过IDE将其包含在Delphi XE项目中,并从项目pipe理器的上下文菜单启用它。 虽然文件validation,但是我重新保存项目文件后,它总是被禁用。 这里有一个名为Custom.targets的目标文件的简化版本。 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="Hello"> <Message Text="Hello from custom target"/> </Target> </Project> 作为一个独立的文件,按预期工作:键入… MSBuild Custom.target /t:Hello …在命令行给出预期的消息。 通过IDE将Custom.targets添加到Delphi项目中,按预期在项目pipe理器中显示文件,现在.dproj文件包含行… <TargetsFile Include="Custom.targets"/> 我在IDE的项目pipe理器中右键单击该文件并selectEnable 。 但是当项目build立时, Build消息窗口显示: [MSBuild警告] Custom.targets(1):忽略禁用导入: PathToProjectSource\\Custom.targets 在项目pipe理器中再次右键单击仍显示Enable选项而不是预期的Disable 。 在命令行MSBuild ProjectName.dproj /t:Hello也失败。 我已经尝试黑客.dproj文件添加行… <Import Project="Custom.targets"/> 键入MSBuild ProjectName.dproj /t:Hello现在MSBuild ProjectName.dproj /t:Hello 。 但是下一次我从IDE中保存项目文件时, <Import>语句被删除。 任何人有什么想法是什么问题?

TThreadedQueue没有能力的多个消费者?

尝试在单个生产者多个消费者scheme中使用TThreadedQueue(Generics.Collections)。 (DELPHI-XE)。 这个想法是推入对象到一个队列,让几个工作线程排空队列。 尽pipe如此,它没有像预期的那样工作。 当两个或两个以上工作线程调用PopItem时,访问冲突从TThreadedQueue抛出。 如果对PopItem的调用是使用临界区域进行序列化的,则一切正常。 当然TThreadedQueue应该能够处理多个消费者,所以我错过了什么,或者这是TThreadedQueue纯粹的错误? 这是一个简单的例子来产生错误。 program TestThreadedQueue; {$APPTYPE CONSOLE} uses // FastMM4 in '..\..\..\FastMM4\FastMM4.pas', Windows, Messages, Classes, SysUtils, SyncObjs, Generics.Collections; type TThreadTaskMsg = class(TObject) private threadID : integer; threadMsg : string; public Constructor Create( ID : integer; const msg : string); end; type TThreadReader = class(TThread) private fPopQueue : TThreadedQueue<TObject>; fSync : […]