当BOM(Byte Order Mark)缺失时,我如何能最好地猜测编码?
我的程序必须读取使用各种编码的文件.它们可能是ANSI,UTF-8或UTF-16(大或小的Endian). 当BOM(字节订单标记)在那里时,我没有问题.我知道该文件是UTF-8还是UTF-16或LE. 我想假设当没有bom时,文件是ansi.但是我发现我要处理的文件经常缺少它们的bom.因此,没有BOM可能意味着该文件是ANSI,UTF-8,UTF-16 BE或LE. 当文件没有BOM时,扫描某些文件的最佳方法是什么,最准确地猜测编码的类型?如果文件为ANSI,并且在高90年代是UTF格式,我想接近100%的时间. 我正在寻找一种确定这一点的通用算法方法.但是我实际上使用了Delphi 2009,该2009知道Unicode并且有一个tencoding类,因此特定于此是一个奖励. 答案: Shreevatsar的答案使我在Google上搜索"通用编码检测器Delphi",这使我感到惊讶的是,在活着仅45分钟后,这篇文章列为#1的位置!那是快速的Goo
6 2024-01-22
编程技术问答社区
ADO连接超时问题
使用tadoconnection类连接到SQL Server 2005 dB. 具有ConnectionTimeOut:= 5;//秒. 试图同步打开连接. 当服务器可用并运行时,连接时间耗尽正常.如果服务器不可用或丢失了网络连接,则尝试打开连接等待超过5秒(可能是20秒). 是否需要设置任何属性或方法来影响这种行为? 解决方案 不,这足以设置连接时间属性 我遇到了一个确切的问题(D2009,MSSQL2005),但是 tadoconnection.connectionTimeout对我来说很好(btw.此属性的deafult值为15秒).请注意,超时色散相当宽,因此,一旦您在5秒钟后您就会定时出现,然后将其定为例如. 10秒钟后,但是20秒实际上对于连接尝试而言确实太多了. 可能您对CommandTimeOut有问题(如果您尝试使用关联的ADO数据集组件执行查询).您需要记住,如果您设置tadoconnection.connectionTim
0 2024-01-19
编程技术问答社区
从连接表中删除ADODataSet
我有一个delphi应用程序,其中显示了从这样的查询中玩过的游戏列表: select g.*, gt.id, gt.descr from GAMES g inner join game_types gt on gt.id = g.game_type order by game_date DESC 当我单击dbnavigator中的"删除"按钮时,还删除了Game_types表中的连接记录.这是一个问题,因为许多其他游戏可能是相同类型的. 我需要做什么才能制作它,以便只删除游戏,而不是游戏类型? 解决方案 您需要使用ADOQuery1.Properties['Unique Table'].Value := 'GAMES'; 来自 如果设置了唯一的表动态属性,并且记录集是 在多个表上执行联接操作的结果,然后 删除方法只会从唯一的表中的表中删除行 表属性. 其他解决方案 打开数据集后,您需要设置Tadodataset的"唯一表"属性. A
2 2024-01-19
编程技术问答社区
Delphi 2009 COM/ActiveX类型库支持稳定性
参考 tlb和维护问题 ... 我(经常)使用 尤其是我感兴趣的:添加/删除类,更改GUID,重命名方法/属性,重新排序方法/属性,庞大的类型库(50个以上类),... 它与Delphi 2007(一场噩梦)或Delphi 7一样稳定(很好,但是有时您必须从SVN恢复TLB文件)或超稳定(如,... UHM,... .您还记得任何Delphi版本吗)? 编辑:是的,当然,文字ridl是一个好主意,但我的问题是: 是TLB支持稳定的(尤其是RIDL文件与Visual TLB编辑器的同步)的(尤其是在执行我上面描述的任务时)的(尤其是RIDL文件与实现类同步). 时. 解决方案 好吧,我再次有偏见,但是我们的内部测试表明新解决方案要稳定得多. 当然,它被设计为.您的com/activex对象的所有"智能"现在都是基于文本的.而且由于它是基于文本的,因此它完全由您控制.由于它在您的控制之下,因此您可以做自己想做的事情.没有更多的黑匣子.该过程是透明的.至于导入
8 2024-01-10
编程技术问答社区
Delphi 2009中函数CreateProcess中的访问违规问题
在我的程序中,我有以下代码: //Code if not CreateProcess(nil, NonConstCmd, nil, nil, True, NORMAL_PRIORITY_CLASS or CREATE_NEW_PROCESS_GROUP, nil, PCh, SI, P) then //Code 我一直在违反访问违规错误. 顺便说一句,在Delphi7中,相同的代码效果很好. 我已经阅读了MSDN,并发现Delphi中的CreateProcess函数可以修改第二个参数. 本质上是const,这就是为什么我创建一个具有相同值的新变量的原因. 但这无效. 问题是:为什么此代码不起作用? 解决方案 问题在lpCommandLine参数中.我怀疑您正在做这样的事情: var CmdLine: string; ... CmdLine := 'notepad.exe'; CreateProcess(nil, PChar(CmdLine),
2 2024-01-09
编程技术问答社区
Delphi中的抽象类
我使用的是一个具有许多抽象类的组件套件.现在,我想应用多态性,但是创建对象时,我会得到错误的抽象类. 我是否应该覆盖所有虚拟方法,即使我不需要它?是否有解决方法或解决方案? 解决方案 为了使一个类实例,您需要覆盖所有被声明为虚拟抽象的方法.即使您不使用它们. 如果您真的想解决工作,则可以使用空的方法.但我不建议这样做. 并添加有关该主题的更多信息: 如果用虚拟摘要声明它是抽象的: procedure MyMethod(const AMyParameter: Integer); virtual; abstract; Trivia:您甚至可以将方法覆盖为抽象: procedure MyMethod(const AMyParameter: Integer); override; abstract; 您需要覆盖这些方法才能从该类实例化. ,您可以将整个类声明为抽象: type TMyClass = class abstract
2 2024-01-09
编程技术问答社区
DELPHI 2009中的.NET组件
您可以告诉我,是否可以与Delphi 2009一起使用.NET组件,如果是的,请您发送一些示例代码. 预先感谢. 解决方案 不在delphi中为Win32. 您可以为此使用Delphi Prism. 您还可以检查 crosstalk 或其他解决方案 是的,可以在Win32程序中使用.NET组件.不幸的消息是,自己做的不是很简单,我强烈建议您推荐其他解决方案 有几种方法的方法,传统的com/Interop只是一种方法. 另一种方法是使用内置在CLR中的已经存在的基础架构来支持COM/Interop和混合模式C ++/CLI. CLR对iunknown和从Iunknown的界面引用有很好的支持(并且每个Delphi接口都满足了该要求) 您可以将.NET组件变成真实的DLL,并使用任何语言导出函数 我已经写了一项完全透明的MSBUILD任务:结合这两件事,您可以将.NET组件作为接口参考,而o需要与COM和CLSIDS/PROGID战斗 幸运
4 2024-01-06
编程技术问答社区
如何访问我的XML文档中的子节点值?
我有一个XMLString,其中包含带有节点的多个元素. IE My Account Name Edward Jones 我可以访问节点名称IE帐户名,fullname,但是我无法访问值或它们返回空白.这是我的代码. Doc : IXMLDocument; begin Doc := XMlDoc.LoadXMLData(XmlString); Doc.DOMDocument.getElementsByTagName('Element').length; // = 11 Doc.DOMDocument.getElementsByTagName('Element').item[2].childNodes[0].nodeName; // = AccountName Doc.DOMDocum
2 2023-12-23
编程技术问答社区
THttprio onBeforeExecute改变soapRequest
我已经为一个项目导入了一些WSDL. 我想更改httprio onbeforeexecute事件上的肥皂剧,但是 当我更改请求时,我会遇到一些错误,如何更改请求xml文件 在此事件中使用StringReplace功能. 我试图更改流的大小,我更改了编码等.但是无论如何它都没有起作用. 示例 procedure TForm1.RiomBeforeExecute(const MethodName: string; SOAPRequest: TStream); var sTmp : TStringList; begin sTmp:=TStringList.Create; SOAPRequest.Position := 0; sTmp.LoadFromStream(SOAPRequest); sTmp.Text := StringReplace(sTmp.Text,'blablaa','b
4 2023-12-15
编程技术问答社区
在Windows Vista 64位下用Delphi 2009从命令行进行编译
是否有人成功地使用命令行DCC32.EXE编译器(64位Windows Vista)编译Win32 GUI应用程序,而无需安装Delphi 2009?在我们的系统上,它失败了,并带有一条消息,即DFM文件包含未知的16位资源.这通常表明无法读取DFM文件.它在我们尝试的所有32位Vista和Windows XPS上都可以完美地工作. 我要问,因为我们要确保我们以后可以重建当前的EXE文件,因此,即使我们将来都切换到64位OS,我们希望能够重建旧的2009年版本. 解决方案 添加lnkdfm120.dll解决了问题. 其他解决方案 使用Delphi 2009,您应该使用MSBUILD来命令行编译您的项目(MSBUILD YORPROJECT.DPROJ).请务必从RAD Studio Commander Prompt中执行此操作.这样可以确保设置某些环境变量.这可以解决您的问题吗? 其他解决方案 是的,我们正在Vista 64位和Windows 2008 64
6 2023-12-09
编程技术问答社区
如何使TProgressBar不再滞后?
我有一个运行冗长的操作的应用程序,我正在尝试使用tprogressbar来跟踪正在发生的事情.我设置了多个步骤,并致电.Stepit递增进度栏. 问题是,它的进展不佳.它似乎不是直接跳到正确的位置,而是喜欢逐渐滑到它.如果您要追求的是糖果,那一切都很好,但是当我试图准确地表现出我的日常活动的进度时,这似乎使它似乎不断地落后于真实地位.我如何关闭该"功能"? 我只注意到Windows Vista下的这种情况.不确定它是否也在XP上进行,因为当我在XP上测试它时,该过程的速度要快得多,而且过快. :p,但这可能是特定于远景的或可能不是远景的.无论哪种方式,这都让我发疯.有人知道如何解决吗? 解决方案 我前一段时间遇到了完全相同的问题.在Google搜索A long 时间之后,我发现这是一个特定于远景的问题.似乎可以归结为:Microsoft为Vista中的进度条控制添加了精美的动画(即移动的"高光").为了使更新更加流畅,他们在控件的重新启动中实现了某种"滞后" - 基本
10 2023-12-09
编程技术问答社区
如何禁止在Vista文件打开对话框中自动追加通配符模式
我正在使用一个文件打开对话框来选择图像文件以进行进一步编辑.过滤器列表包含一个"所有受支持格式"条目,该条目表示很长的文件格式列表. 由于Vista会在滤波器组合中自动附加通配符图案,因此扩展的Combobox太宽,无法完全放在屏幕上.除此之外,它看起来不太好. 因此,是否可以禁用此行为并让Vista显示原始过滤器字符串? 问候, 丹尼尔 解决方案 Vista仅将文件格式列表附加到文本中,如果您自己尚未完成.因此,如果您的过滤器是"所有受支持格式|*.jpg;*.bmp; ...",那么它将自动添加它,但是如果它是"所有受支持的格式(*.*)|*.*. t.它确实检查是否有通配符,但没有检查它们是否匹配,因此这两种方法都可以使用: "All Supported Formats (*.*)|*.jpg;*.bmp;*.gif" "All Supported Formats (*.jpg;...)|*.jpg;*.bmp;*.gif"
8 2023-12-09
编程技术问答社区
Delphi 2009。如何在Vista下的Windows服务和桌面程序之间进行通信?
桌面应用程序如何在Vista/Windows2008/Windows7下与Windows服务进行通信?该应用程序需要将小字符串发送到服务并接收字符串响应.两者都用Delphi 2009来编写.(也请提供示例代码) 解决方案 要走的方法是 infirtity级别. 如果您想在此主题上搜索更多信息,则此通信称为Inter Process Communication,但更好的搜索词是IPC. 其他解决方案 使用Indy您可以在应用程序之间相对简单地创建TCP连接.特别是如果您只需要发送字符串消息.对于客户(在您的情况下为桌面应用程序),它基本上是 var Client : TIdTCPClient; ... Client.Host := 'localhost'; Client.Port := AnyFreePortNumber; Client.Connect; Client.IOHandler.Writeln (SomeString); Response :=
0 2023-12-09
编程技术问答社区
我能否确定我的单位被初始化的顺序?
我正在寻找一个可能连接到单元初始化顺序的错误.有没有办法查看执行哪个initialization段?我需要知道订单.这是在调试期间 我可以设置断点,但是当拥有许多单位时,这很乏味. 您有什么建议吗? 解决方案 对于接口中的单元使用列表, 初始化部分 客户使用的单元在 单位出现的顺序 客户的使用子句. see Online Help \ Programs和单位 \初始化部分和本文: Delphi单位初始化顺序 icarus 计算运行时初始化顺序为其使用report : 本节列出了在运行时执行初始化部分的顺序. 其他解决方案 这是我在D2010中刚刚测试的一些代码,请注意,您需要在System.Initunits中设置一个断点并获取InitContext Var(@initContext)的地址.然后将CTXPTR修改为在仍在运行时具有此地址. (也许有人知道这是一种更聪明的方法). procedure TForm3.Button2Clic
2 2023-12-05
编程技术问答社区
为什么ReadDirectoryChangesW会省略事件?
我使用ReadDirectoryChangesw来观看指定的目录,并在检测到更改时更新索引结构.我使用以下代码(大致) var InfoPointer : PFileNotifyInformation; NextOffset : DWORD; ... while (not Terminated) do begin if ReadDirectoryChangesW (FDirHandle, FBuffer, FBufferLength, True, FFilter, @BytesRead, @FOverlap, nil) then begin WaitResult := WaitForMultipleObjects (2, @FEventArray, False, INFINITE); if (WaitResult = waitFileChange) then begin
2 2023-12-05
编程技术问答社区
Delphi 2009中的系统正常运行时间
我如何代码查看计算机已经使用了多长时间. 如果可能的话,代码的简单示例. 解决方案 您使用 getTickCount 功能请参见此示例. program Ticks; {$APPTYPE CONSOLE} uses Windows, SysUtils; function TicksToStr(Ticks: Cardinal): string; //Convert Ticks to String var aDatetime : TDateTime; begin aDatetime := Ticks / SecsPerDay / MSecsPerSec; Result := Format('%d days, %s', [Trunc(aDatetime), FormatDateTime('hh:nn:ss.z', Frac(aDatetime))]) ; end; begin try Writeln('Time Wind
6 2023-12-04
编程技术问答社区
奇怪的WM_CHAR行为(错误的chCharCode)。
我需要自动进入某个角色(俄罗斯字母Э).在间谍++中,相应的消息看起来像: WM_CHAR chCharCode: '221' (221) cRepeat:1 ScanCode:28 fExtended:0 fAltDown:0 fRepeat:0 fUp:0 为了以编程方式发送此消息,我使用此Delphi代码: SendMessage(Self.PassengerGrid, WM_CHAR, WPARAM(221), LPARAM($280001)); 当我检查在间谍++中运行代码的结果时,我会看到以下消息: WM_CHAR chCharCode: '89' (89) cRepeat:1 ScanCode:28 fExtended:0 fAltDown:0 fRepeat:0 fUp:0 我的SendMessage wParam wParam 一定有问题. 如何修复它(chCharcode等于221)`? 更新1: 此错误发生的机
14 2023-12-04
编程技术问答社区
关闭一个次要的Delphi表单会导致主表单失去焦点
从主形式和第二种形式显示辅助形式时,显示第三形式,然后结束两种形式将导致主形式失去焦点. 将Delphi 2009与XP SP3 使用 这是我复制问题的步骤: 创建一个新的VCL表单应用程序 将一个按钮拖到创建的表单 在点击处理程序中创建一个新的tform1并显示 运行程序.单击按钮显示第二种表格.单击第二个表单上的按钮以创建第三种形式.关闭两种新形式时,主要形式将失去重点. 这是我在按钮单击事件处理程序中的代码: // Using Self does not change the results with TForm1.Create(nil) do show; 有什么方法可以阻止我的主要形式失去焦点? 解决方案 将我的Delphi安装从版本 12.0.3170.16989(无更新) 问题了. 似乎是一个错误的错误. 其他解决方案 我看不到您如何形容创建"孩子"形式. 但是,无论如何,我只是尝试了您在步骤中描述
4 2023-12-04
编程技术问答社区