小编LaB*_*cca的帖子

Delphi:如何使用文件时间戳进行数字签名?

我的许多客户使用软件进行数字签名.这个软件叫大堤,它是从商业的意大利室内设置和它连接到智能卡硬件像这样.

现在我希望从我的应用程序中做出数字签名,绕过执行它的软件.

是否可以在Delphi中执行此操作,是否有人已经这样做了?我也想添加时间戳.

BOUNTY注意事项:我不知道在意大利以外这是多么重要,无论如何在意大利有一项法律要求某些文件按特定规则存储.为了实现这一点,必须对数字签名并在文件上放置时间戳(pfd文件).基本上我问"是否有任何已经在Delphi中实现这一点并找到了成功的方法.你能分享你的结果吗?".基本上有一百万个USB智能卡读卡器,我不想在我的应用程序中开始支持数百万个驱动程序(我编写的应用程序部分是文档管理系统),如果有像TWAIN这样的东西用于图像扫描程序这会很棒.

我也可以接受链接到特定硬件的限制,所以我可以说如果你想要这个功能你必须购买这个硬件,我不想支持所有现有的硬件或时间戳/数字签名Web服务.所以我正在寻找的是Delphi 1-0-1的pdf文件的时间戳和数字签名.我希望我表达自己,如果没有,请问.

delphi digital-signature

8
推荐指数
1
解决办法
2888
查看次数

Delphi如何完全删除Code Completion?

我的IDE挂了几分钟,因为每次按"."我都会处理一个大项目.或者按CTRL + SPACE.

如果我很幸运,我按时按ESC键,如果没有,我必须等待1分钟,同时将我的头撞在桌子上.

我想完全禁用它,该怎么办?

ide delphi code-completion delphi-xe2

8
推荐指数
2
解决办法
2599
查看次数

如何从TDictionary获取密钥?

我有一个TDictionary<TKeyClass, TValueClass>.

我想完成类似的事情

for i := 0 to MyDictionary.Count -1 do
  ShowMessage(MyDictionary.Keys[i].AStringProperty)
Run Code Online (Sandbox Code Playgroud)

我不能再访问密钥如果我完全了解它我就可以使用它们.

是唯一的替代品TDictionary<TValueClass, TKeyValue>吗?所以我可以循环使用Keys?

我找到的工作方法是创建一个,TList<TKeyClass>但这是我不喜欢的东西.

delphi tdictionary

7
推荐指数
1
解决办法
4703
查看次数

Delphi重构示例,涉及数据感知控件和可直接访问db表的数据模块

我正在尝试定义重构我正在进行的项目的最佳方法.

由于缺乏良好的设计,几乎所有项目都由以下部分组成:

1)包含业务逻辑的表单

2)巨大的数据模块(每个表单1个+额外的一些)

3)包含公共代码(库)的一些单元

没有OOP(除了一些小区域),代码重用它是最低级别的.

一个问题是使用了数据感知控件,因此在数据模块上删除许多数据集+数据源并以高度耦合的方式直接链接到数据库非常简单.

理想情况下,我想提取类,如TCustomer,TEmployee,以获得os封装的优势,并且可以在将来创建新的UI而无需复制所有代码.

无论如何,我的问题是:如何继续处理数据控件?我应该实现一个返回数据集的函数,并将dataawarecomponent.datasource链接到函数结果吗?

function TCustomer.LoadByID(aCustomerID: integer): TDataset
Run Code Online (Sandbox Code Playgroud)

delphi refactoring data-aware datamodule

7
推荐指数
1
解决办法
1320
查看次数

帮助在Delphi项目后期构建事件中使用signtool.exe

这是一个非常简单的问题.我应该在Delphi后期编写事件中编写什么来执行一个coomand行工具?

我写了这个:

c:\BinPath\signtool.exe sign /f c:\BinPath\Mypfxfile.pfx /p MyPassword 
/t http:// timestamp.verisign.com/scripts/timstamp.dll c:\BinPath\Project1.exe
Run Code Online (Sandbox Code Playgroud)

(其中c:\ BinPath是Delphi输出路径,为简单起见我在同一个文件夹中复制了signtool.exe和pfx文件)

当我构建项目时,我有这个模态窗口错误:

---------------------------项目1- CodeGear Delphi for Microsoft Windows - Form1 ------------- --------------无法打开文件"C:\ SourcePath\EXEC".无法找到指定的路径..

在我的消息中

[Exec Error] EXEC(1):"SignerTimeStamp()失败." (-2147467259/0X80004005)

[Exec Error]退出命令"c:\ BinPath\signtool.exe sign /fc:\BinPath\Mypfxfile.pfx/p MyPassword/t http:// timestamp.verisign.com/scripts/timstamp.dll c:\ BinPath\Project1.exee"代码为1.

如何管理?在Delphi帮助中我读过(来自Creating Build Events主题):

输入构建命令,每行一个命令,输入每个命令后按Return键.命令由任何有效的DOS命令组成,例如:copy $()c:\ Built\$()

所以我只是插入构建事件what(c:\BinPath\....Project1.exe)我能够从命令提示符运行.错误在哪里?谢谢.

delphi post-build-event

7
推荐指数
1
解决办法
3006
查看次数

如何实现从Outlook邮件或thunderbird拖放到delphi表单?

有没有人已经实现了从Outlook和/或Thunderbird(从现在的"OT")到Delphi表单的电子邮件拖放.

我需要为用户提供一种在我的应用程序数据库中存储重要电子邮件的方法,而无需编写OT插件.目前他们使用这种技术:

  1. 从OT他们点击一封电子邮件,
  2. 另存为...
  3. 保存在桌面或临时文件夹中,
  4. 将保存的文件拖放到Delphi表单上.

在修改之后我想做:

  1. 从OT他们点击一封电子邮件,
  2. 将保存的文件拖放到Delphi表单上.

所以基本上我是从资源管理器中实现拖放.我需要一个额外的层,允许我的应用程序将原来在OT上的电子邮件视为普通文件,因此我可以从OT拖动,就像它是一个普通的Windows资源管理器窗口一样.

注意:我不需要支持所有OT版本.我可以接受不支持Outlook 2003(例如)但不支持2010.因此,如果该技术不能自动适用于所有OT版本,我将更喜欢使用最新版本的版本.

最后的说明:很明显,我只对拖放电子邮件感兴趣(例如,不是Outlook日历项目).一个想法是拖动和删除附件.但这可能是未来的额外改进.

delphi email outlook thunderbird drag-and-drop

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

使用SHGetSpecialFolderPath来检索可以访问非管理员用户的应用程序文件夹,CSIDL可以选择哪个?

在我的应用程序中,我在每台机器上存储应用程序文件夹中的一些文

真实案例的简化版本如下:

..\Project1\LoginHistory (login history file - common for all users)
..\Project1\Translations (localization files - common for all users)
..\Project1\FormSettings\User1\ (this contains an ini file per form for User1)
..\Project1\FormSettings\UserN\ (this contains an ini file per form for UserN)
Run Code Online (Sandbox Code Playgroud)

所以你可以看到我使用它的原因:保存一些特定于机器的数据(记住从这台机器制造的最新登录,一种MRU),以存储翻译字符串或第三方组件(这些是从exe提取的运行时)资源)和用于保存一些用户特定数据(如表单大小).真实情况更复杂,但至少你可以得到一些"公共文件夹"和一些"用户文件夹".

现在我想保留这个结构,所以我的所有文件都在一个..\Project1文件夹(+子文件夹)中.即使因为用户不是Windows用户,但他们是SQL Server用户.

我的问题是要选择哪个文件夹..\.

目前我(成功地)使用此代码进行检索 ..\

uses ShlObj;

function GetSpecialFolder(const CSIDL: integer) : string;
var
  RecPath : PWideChar;
begin
  RecPath := StrAlloc(MAX_PATH);
    try
    FillChar(RecPath^, MAX_PATH, 0);
    if SHGetSpecialFolderPath(0, RecPath, CSIDL, false) 
      then result := RecPath
      else result := ''; …
Run Code Online (Sandbox Code Playgroud)

delphi winapi special-folders

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

如何获得视觉上鲜明的颜色列表?

我需要指定颜色来区分不同的项目.简单案例:根据客户订购不同颜色的行.

我不想让用户为每个客户选择一种颜色,我想在运行时这样做.

如果有一个客户我将使用"红色",如果有两个"红色"和"白色",...

当然,我可以创建GimmeRandomColour(i: index)自己的函数,使用iRGB函数创建良好的随机颜色(但在这种情况下,创建漂亮的颜色可能会很棘手).或者我可以说如果i是0给我clRed,...(以这种方式创建许多颜色可能是一个问题).

如何以可接受的对比度获得"良好的颜色列表"?

delphi colors color-palette

7
推荐指数
1
解决办法
3160
查看次数

检查活动目录中的用户身份验证

我想知道用户是否为其 Active Directory 用户输入了域、用户和密码的正确组合。

我试图制作一个无法连接的非常简单的程序,但通过阅读错误消息,我可以知道用户/密码是否正确。

这是基于技巧的(逻辑是读取异常消息),无论如何我在 2 个服务器上测试了这个原型,我注意到 excpetion 消息从服务器到服务器发生变化,所以这是不可靠的。

uses adshlp, ActiveDs_TLB;
// 3 TEdit and a TButton

procedure TForm4.Button1Click(Sender: TObject);
Var
 aUser : IAdsUser;
 pDomain, pUser, pPassword : string;
 myResult : HRESULT;
 Counter: integer;
begin
  pDomain := edtDomain.Text;
  pUser:= edtUser.Text;
  pPassword := edtPwd.Text;
  Counter := GetTickCount;


 Try
    myResult := ADsOpenObject(Format('LDAP://%s',[pDomain]),Format('%s\%s',[pDomain,pUser]),pPassword,
    ADS_READONLY_SERVER,
    IAdsUser,aUser);
 except
    On E : EOleException do
    begin
    if (GetTickCount - Counter > 3000) then  ShowMessage ('Problem with connection') else
    if Pos('password',E.Message) > 0  then ShowMessage ('wrong …
Run Code Online (Sandbox Code Playgroud)

delphi ldap delphi-10-seattle

7
推荐指数
1
解决办法
3725
查看次数

Delphi剪贴板:读取已复制文件的文件属性

我想检索复制到剪贴板的文件的文件大小。

我阅读了TClipboard文档,但没有找到解决方案。

我认为这TClipboard.GetAsHandle可能会有所帮助,但是我无法完成任务。

谢谢。

delphi clipboard filesize delphi-10-seattle

7
推荐指数
1
解决办法
159
查看次数