我正在慢慢将现有代码转换为Delphi 2010,并阅读Embarcaedro网站上的几篇文章以及MarcoCantú白皮书.
还有一些我还没有理解的东西,所以这里有两个函数来举例说明我的问题:
function RemoveSpace(InStr: string): string;
var
Ans : string;
I : Word;
L : Word;
TestChar: string[1];
begin
Ans := '';
L := Length(InStr);
if L > 0 then
begin
for I := 1 to L do
begin
TestChar := Copy(InStr, I, 1);
if TestChar <> ' ' then Ans := Ans + TestChar;
end;
end;
RemoveSpace := Ans;
end;
function ReplaceStr(const S, Srch, Replace: string): string;
var
I: Integer;
Source: string;
begin
Source := S;
Result := …Run Code Online (Sandbox Code Playgroud) Bob Jenkins哈希函数是否存在不区分大小写的变体?
Generics.Defaults.BobJenkinsHash
Run Code Online (Sandbox Code Playgroud)
提供快速哈希函数.不幸的是,它不能与不区分大小写的比较函数结合使用
TCustomStringComparer = class (TEqualityComparer <String>)
function Equals(const Left, Right: String): Boolean; override;
function GetHashCode(const Value: String): Integer; override;
end;
function TCustomStringComparer.Equals (const Left, Right : String) : Boolean;
begin
Result := CompareText (Left, Right) = 0;
end;
function TCustomStringComparer.GetHashCode (const Value : String) : Integer;
begin
Result := Generics.Defaults.BobJenkinsHash (Value [1], Length (Value) * SizeOf (Char), 0);
end;
Run Code Online (Sandbox Code Playgroud)
这是因为TDictionary首先比较哈希码,然后在检查相等性时使用提供的比较器.
当然我可以在我的GetHashCode函数中使用UpperCase ,但我想知道如果我能以某种方式修改哈希函数本身会更快.
是否有任何技术或工具可用于在运行时检测此类死锁?
在工作线程(几个中的一个,通常是4-6)中描绘这个
try
WaitForSingleObject(myMutex);
DoSTuffThatMightCauseAnException;
except
ReleaseMutex(myMutex);
end;
Run Code Online (Sandbox Code Playgroud)
或者更普遍的是有一种设计模式来避免这些错误吗?
经过长时间的黑客攻击,我在上面的代码中编写了上面的代码
我想将Delphi 7项目迁移到Delphi 2010.
我们正在使用Rave BE的TReportShell和TDetailShell组件构建"代码报告".Rave BE 7.7中不再存在这些组件.
此外,似乎在Rave BE中打破了unicode支持(在Delphi 2009上的Rave Reports中显示unicode文本).
将此项目移植到Delphi 2010的最佳解决方案是什么?
我有一个情况在这里,我将迁移到2011德尔福XE德尔福7,让我吃惊的许多组件将由于ansistrings问题,他们看起来像日本/中国文字德尔福XE,现在我用的单位是一个PCSC连接器,似乎已停止/放弃原始开发人员.
基本上我想要的是一个简单的方法来再次阅读字符串与尽可能少的原始代码修改..
如果有任何关于如何使用makae组件ansistring准备好2009年的更好的教程,那么更新也会帮助我
我正在使用Delphi 2010.
我想知道是否有办法在最小化,最大化和关闭按钮的左侧添加自定义按钮.分配了onClick事件的按钮?
这将用于模态和非模态形式.
感谢名单!
我有一些delphi代码,我需要迁移/ port /重写到.NET
该代码使用TOleServer.能告诉我这个特定类的任何.NET等效实现吗?
它是否可以通过非托管代码获得?
谢谢
我在我创建的名为submit的程序中得到了"Undeclared identifier".
procedure submit;
begin
if ebMain.Text='exit' then
fmMain.Close;
end;
Run Code Online (Sandbox Code Playgroud)
真的很简单.编译器告诉我ebMain是未声明的.我可以通过添加"fmMain"来解决这个问题.在它前面,但我从来没有在delphi 7中这样做.编辑框(ebMain)在主窗体上(fmMain).过程标题位于"使用"下方.怎么了?
我刚刚开始在Delphi 2010中使用indy10(今天),在阅读了每一个我设法使其工作后,我可以使用gmail发送电子邮件,它在我的计算机上工作正常,但是当我在我的笔记本电脑上安装应用程序(用于测试)时,它没有发送电子邮件,我的应用程序停止工作,我是否必须在我的笔记本电脑上安装其他东西或如何让它在我安装我的程序的每台计算机上工作,到目前为止我必须在6台不同的计算机上安装它,一些使用Windows XP和一些Windows 7,我希望有一种方法可以使它成为多平台或其他东西.
这是我的代码:
procedure SendIndyMail;
begin
Form_final.IdSMTP1 .IOHandler := Form_final.IdSSLIOHandlerSocketOpenSSL1;
Form_final.IdSMTP1.Host:= 'smtp.gmail.com';
Form_final.IdSMTP1.Password:= 'xxxxxx';
Form_final.IdSMTP1.Port := 587;
Form_final.IdSMTP1.UseTLS := utUseExplicitTLS;
Form_final.IdSMTP1.Username := 'xxxxxx';
Form_final.IdSSLIOHandlerSocketOpenSSL1.Destination := 'smtp.gmail.com:587';
Form_final.IdSSLIOHandlerSocketOpenSSL1.Host := 'smtp.gmail.com';
Form_final.IdSSLIOHandlerSocketOpenSSL1.Port := 587;
Form_final.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;
Form_final.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned;
Form_final.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := [];
Form_final.IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyDepth := 0;
Form_final.IdMessage1.Subject:=conect.Q_selec_info_generalDescripcion.Text+' '+DateToStr(Date);
Form_final.IdMessage1.Recipients.EMailAddresses:=conect.Q_config_seleccorreo.Text;
TIdAttachmentFile.Create(Form_final.IdMessage1.MessageParts, conect.Q_config_selecfolder.Text+'\reporte_'+FormatDateTime('dddd d of mmmm yyyy', Date)+' Inventario '+Form_inventario.Edit_id_inventario.Text+'.pdf');
Form_final.IdSMTP1.Connect;
Form_final.IdSMTP1.Send(Form_final.IdMessage1);
Form_final.IdSMTP1.Disconnect;
end;
Run Code Online (Sandbox Code Playgroud)
我在笔记本电脑上运行了proyect,它说:
无法加载SSL库,现在,我做了很多事情让它工作,下载了很多东西并尝试了很多其他的东西,现在我不知道那些库是什么以及如何检索它们,我想知道一种加载方法他们与安装,所以我的安装程序与所需的一切.
提前致谢.
我正在使用CreateProcess API将RealVNC与我的exe集成...我只需要为创建的vnc客户端处理句柄,但到目前为止我还没有成功.代码非常简单:
procedure TForm1.VncAuth;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
title: string;
ProcHandle: THandle;
begin
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);
CmdLine:= 'vnc.exe';
UniqueString(CmdLine);
CreateProcess(NIL ,PChar(CmdLine), NIL, NIL, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
, NIL, NIL, StartInfo, ProcInfo);
ProcHandle:= ProcInfo.hProcess;
GetWindowText(ProcHandle, PChar(title), 255);
ShowMessage(title);
end;
Run Code Online (Sandbox Code Playgroud)
标题var中没有返回任何内容... GetWindowText函数只是一个测试,看看我是否有正确的句柄,如果是,我应该看到vnc客户端标题是正确的?谢谢!
delphi ×10
delphi-2010 ×10
delphi-7 ×2
ansistring ×1
debugging ×1
delphi-2009 ×1
hash ×1
indy10 ×1
rave-reports ×1
reporting ×1
unicode ×1
winapi ×1