有人可以解释一下Delphi中公共和已发布的班级成员之间有什么区别吗?
我试着看看Delphi的帮助,我理解这些成员具有相同的可见性,但我不太清楚他们的差异如何,我何时应该使用已发布的成员而不是公共成员.
非常感谢.
使用Delphi-6有两个选项:Build和Compile.
我知道当我运行程序时,它只编译已更改的文件,并将DCU用于那些没有更改的文件.当我点击构建显然它重建DCU.
我一直在想的是,当我制作一个程序用于发布(更改构建设置,条件变量等)时,我可以编译,还是必须进行完整构建?
如果我不进行完整构建会发生什么,是否有任何后果?
很多时候,在Windows 98时代之后,我们经历过一些对话框丢失了Z-Order并返回到之前的形式.
例如:
Dialog1.ShowModal;
Dialog1.OnClickButton() : ShowMessage('anything');
Run Code Online (Sandbox Code Playgroud)
当MessageBox出现时,它有时没有焦点,并在Dialog1下移动.用户对此感到困惑,他们说:我的申请冻结了!但是如果他们使用Alt + Tab移动到另一个应用程序并返回,焦点将返回到MessageBox,它将成为前景窗口.
我们通过ShowMessage,MessageBox,普通表单以及QuickReport表单体验过这一点.
有谁知道这个?这是一个Windows bug吗?你怎么能阻止它?怎么抓住这个?
谢谢你的帮助:dd
我真的说过,在Win98之后,所有操作系统(Win7也)都会受到这个问题的影响.我们使用Delphi 6 Prof,因此属性不能使用Default表单.
有人说使用MessageBox + MB_APPLMODAL可以控制消息对话框.这是个好消息,但我们有许多旧的表单和组件,第三方工具.
因此,通过替换表单来创建一个全新的应用程序是一项艰苦的工作.
但我们会尝试这样做.
我认为答案是这是半个应用程序问题和半个Windows问题.如果Windows有时会处理此问题,有时则不会 - 这似乎是一个Windows错误.但是,如果我们可以强制制作良好的模态窗口,那么它就是编程错误.
有人可以向我解释一下WS_POPUP标志的含义是什么?它有副作用吗?
谢谢:dd
有没有人设法使用命令行在那里编译Delphi 6和7(不是任何Delphi> 7)项目?
我看到的所有说明都不清楚到底需要去哪里!
我正在寻找一步一步的指示.
答案应限于Delphi 6和7,我理解Delphi2006并且>使用MSBuild,这要容易得多.
链接也很受欢迎.
迦特
在我的申请中,我有以下记录:
TTransaction = record
Alias: string
Description: string
Creation: TDateTime
Count: Integer
end;
Run Code Online (Sandbox Code Playgroud)
我在这个数组中使用此记录:
Transactions = array of TTransaction;
Run Code Online (Sandbox Code Playgroud)
我在运行时保持数组加载,但在给定时间我需要清除所有数据并添加一些新数据.
仅仅使用它就足够了:
SetLength(Transactions, 0); ?
Run Code Online (Sandbox Code Playgroud)
或者我需要完成一些事情吗?
这是我的配置:
IdSMTP1.Host := 'smtp.gmail.com';
IdSMTP1.Port := 587;
IdSMTP1.UseTLS := utUseExplicitTLS;
IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;
Run Code Online (Sandbox Code Playgroud)
我从下载了OpenSSL的这里,都libeay32.dll
和ssleay32.dll
在我申请的同一文件夹中.
Indy版本是:10.0.52
以下命令在我的机器上运行:
telnet smtp.gmail.com 587
Run Code Online (Sandbox Code Playgroud)
如何在TLS中正确连接启用SMTP服务器,在我的情况下是Gmail,使用Indy?
似乎IdSSLOpenSSLHeaders.Load
无法找到以下程序的地址,其中包括:
@IdSslSessionGetId := LoadIndyFunction(fn_SSL_SESSION_get_id);
@IdSslSessionGetIdCtx := LoadIndyFunction(fn_SSL_SESSION_get_id_ctx);
@IdSslCtxGetVersion := LoadIndyFunction(fn_SSL_CTX_get_version);
@IdSslCtxSetOptions := LoadIndyFunction(fn_SSL_CTX_set_options);
@iddes_set_odd_parity := LoadFunctionCLib(fn_des_set_odd_parity);
@iddes_set_key := LoadFunctionCLib(fn_des_set_key);
@iddes_ecb_encrypt := LoadFunctionCLib(fn_des_ecb_encrypt);
Run Code Online (Sandbox Code Playgroud)
这是从WhichFailedToLoad
以下返回的消息:
SSL_CTX_set_info_callback_indy
X509_STORE_CTX_get_app_data_indy
X509_get_notBefore_indy
X509_get_notAfter_indy
SSL_SESSION_get_id_indy
SSL_SESSION_get_id_ctx_indy
SSL_CTX_get_version_indy
SSL_CTX_set_options_indy
des_set_odd_parity
des_set_key des_ecb_encrypt
Run Code Online (Sandbox Code Playgroud) 我正在Delphi中编写一个多线程应用程序,需要使用一些东西来保护共享资源.
在C#中,我使用"lock"关键字:
private someMethod() {
lock(mySharedObj) {
//...do something with mySharedObj
}
}
Run Code Online (Sandbox Code Playgroud)
在Delphi中我找不到类似的东西,我发现只有TThread.Synchronize(someMethod)方法,它通过在主VCL线程中调用someMethod来防止潜在的冲突,但它并不是我想要做的......
编辑:我正在使用Delphi 6
我们有一些遗留代码可以在Delphi 6中编译.有计划在更新的IDE中重写它,但它们是一种出路.
当我们编译它时,我们得到几个这样的警告:
FPrecision is specific to a platform.
这是在VCL\DB.pas中.(不是我们的文件.)FPrecision定义如下:
FPrecision Integer Platform
我可以看出为什么它是特定于平台的,但我真的不知道如何处理它.
这只是在我们迁移到Windows 7进行开发时才开始发生的.
我看到了这个问题,但解决方案对我不起作用.我无法将预编译器标签添加到DB.pas并且项目文件没有任何选项(我可以看到)来抑制此警告.
我是唯一可以关闭所有警告或与之共存的选项吗?
我正在编写一个用Delphi编写统计测试的程序(必须是Delphi),我听说随机功能有些奇怪.当程序启动时,你必须调用randomize来随机化随机函数的种子.
我想知道随机函数(在调用randomize之后)是否足够随机进行统计测试或是否需要使用Mersenne twister?有没有人对随机的实际实现有任何了解,这可以告诉我这有多重要?
感谢任何能提供一些帮助的人......
背景:
我有一个应用程序编码,仍然支持Borland Delphi v6.最近,我遇到了TADOStoredProc类无法执行存储过程的问题.此代码以前已稳定了好几年,从未被修改过.
我可以在请求上配置超时,这是受到尊重的,但是存储过程调用永远不会运行,即使在非常长的超时也是如此.应用程序只是挂起,或者在超时异常时保释.(我知道服务器没有负担过重,并且响应同一客户端发起的其他SQL SELECT请求.)
我知道D6已经老了.我与Embarcadero RAD Studio XE2有一个单独的环境,在那里我设法构建了同一个项目,并且仍然存在相同的问题.... 只想确认一下.
去哪儿?
代码示例
function TImport.OpenHeader(DriverID: Integer, …, ScanStart: DateTime, ...): integer;
var
suid: integer;
jid: integer;
con : TADOConnection;
sp : TADOStoredProc;
begin
suid := getScanUnitID();
jid := deriveJobID(ScanStart);
con := TADOConnection.Create(nil);
con.LoginPrompt := false;
con.ConnectionString := 'Provider=SQLOLEDB.1;Password=<testPwd>;Persist Security Info=True;User ID=<testUser>;Initial Catalog=<myDB>;Data Source=<myServer>';
con.CommandTimeout := 10;
con.KeepConnection := true;
con.Connected := true;
sp := TADOStoredProc.Create(nil);
sp.Connection := con;
sp.CommandTimeout := 10;
sp.ProcedureName := 'mon4_OpenHeader;1';
sp.Parameters.Refresh;
sp.Parameters.ParamByName('@ScanUnitID').Value := …
Run Code Online (Sandbox Code Playgroud) delphi ×10
delphi-6 ×10
compilation ×2
build ×1
c# ×1
command-line ×1
delphi-7 ×1
delphi-xe2 ×1
dialog ×1
finalization ×1
indy ×1
oop ×1
random ×1
record ×1
rtti ×1
smtp ×1
sql-server ×1
ssl ×1
vcl ×1
windows ×1
windows-7 ×1
z-order ×1