标签: delphi-6

Delphi中的公共成员和已发布的类成员之间有什么区别?

有人可以解释一下Delphi中公共和已发布的班级成员之间有什么区别吗?

我试着看看Delphi的帮助,我理解这些成员具有相同的可见性,但我不太清楚他们的差异如何,我何时应该使用已发布的成员而不是公共成员.

非常感谢.

delphi oop rtti delphi-6

29
推荐指数
3
解决办法
1万
查看次数

在Delphi中编译和构建有什么区别?

使用Delphi-6有两个选项:Build和Compile.

我知道当我运行程序时,它只编译已更改的文件,并将DCU用于那些没有更改的文件.当我点击构建显然它重建DCU.

我一直在想的是,当我制作一个程序用于发布(更改构建设置,条件变量等)时,我可以编译,还是必须进行完整构建?

如果我不进行完整构建会发生什么,是否有任何后果?

delphi compilation build delphi-6

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

Delphi - 如何防止Forms/MsgBox在先前的表单下移动?

很多时候,在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

windows delphi dialog z-order delphi-6

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

如何在命令行上编译我的delphi项目?

有没有人设法使用命令行在那里编译Delphi 6和7(不是任何Delphi> 7)项目?

我看到的所有说明都不清楚到底需要去哪里!

我正在寻找一步一步的指示.

答案应限于Delphi 6和7,我理解Delphi2006并且>使用MSBuild,这要容易得多.

链接也很受欢迎.

迦特

delphi command-line compilation delphi-7 delphi-6

15
推荐指数
4
解决办法
2万
查看次数

我需要在Delphi中完成记录数组吗?

在我的申请中,我有以下记录:

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)

或者我需要完成一些事情吗?

delphi record finalization dynamic-arrays delphi-6

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

Indy 10 - IdSMTP.Connect引发"无法加载SSL库".

这是我的配置:

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.dllssleay32.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 ssl smtp indy delphi-6

14
推荐指数
1
解决办法
4万
查看次数

Delphi - 有没有相当于C#锁?

我正在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

c# delphi multithreading delphi-6

13
推荐指数
2
解决办法
6350
查看次数

Windows 7上的Delphi 6中的"特定于平台"警告

我们有一些遗留代码可以在Delphi 6中编译.有计划在更新的IDE中重写它,但它们是一种出路.

当我们编译它时,我们得到几个这样的警告:

FPrecision is specific to a platform.

这是在VCL\DB.pas中.(不是我们的文件.)FPrecision定义如下:

FPrecision Integer Platform

我可以看出为什么它是特定于平台的,但我真的不知道如何处理它.

这只是在我们迁移到Windows 7进行开发时才开始发生的.

我看到了这个问题,但解决方案对我不起作用.我无法将预编译器标签添加到DB.pas并且项目文件没有任何选项(我可以看到)来抑制此警告.

我是唯一可以关闭所有警告或与之共存的选项吗?

delphi vcl windows-7 delphi-6

12
推荐指数
1
解决办法
7165
查看次数

Delphi中随机函数的可靠性如何

我正在编写一个用Delphi编写统计测试的程序(必须是Delphi),我听说随机功能有些奇怪.当程序启动时,你必须调用randomize来随机化随机函数的种子.

我想知道随机函数(在调用randomize之后)是否足够随机进行统计测试或是否需要使用Mersenne twister?有没有人对随机的实际实现有任何了解,这可以告诉我这有多重要?

delphi random mersenne-twister delphi-6

12
推荐指数
4
解决办法
5593
查看次数

最近在Delphi TADOStoredProc/D6和RAD Studio XE2上出现故障

感谢任何能提供一些帮助的人......

背景:

我有一个应用程序编码,仍然支持Borland Delphi v6.最近,我遇到了TADOStoredProc类无法执行存储过程的问题.此代码以前已稳定了好几年,从未被修改过.

我可以在请求上配置超时,这是受到尊重的,但是存储过程调用永远不会运行,即使在非常长的超时也是如此.应用程序只是挂起,或者在超时异常时保释.(我知道服务器没有负担过重,并且响应同一客户端发起的其他SQL SELECT请求.)

我知道D6已经老了.我与Embarcadero RAD Studio XE2有一个单独的环境,在那里我设法构建了同一个项目,并且仍然存在相同的问题.... 只想确认一下.

去哪儿?

  • 请查看提供的代码,看看是否有更好的方法.(在最近更新之后,可能MSSQL界面更挑剔?)我当然欢迎推荐.
  • 有没有可以插入应用程序的替代方法,这是可靠的,不需要TADOStoredProc?我已经完成了挖掘工作,但没有找到任何好的例子.

代码示例

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)

sql-server delphi delphi-6 delphi-xe2

11
推荐指数
1
解决办法
1892
查看次数