我的许多客户使用软件进行数字签名.这个软件叫大堤,它是从商业的意大利室内设置和它连接到智能卡硬件像这样.
现在我希望从我的应用程序中做出数字签名,绕过执行它的软件.
是否可以在Delphi中执行此操作,是否有人已经这样做了?我也想添加时间戳.
BOUNTY注意事项:我不知道在意大利以外这是多么重要,无论如何在意大利有一项法律要求某些文件按特定规则存储.为了实现这一点,必须对数字签名并在文件上放置时间戳(pfd文件).基本上我问"是否有任何已经在Delphi中实现这一点并找到了成功的方法.你能分享你的结果吗?".基本上有一百万个USB智能卡读卡器,我不想在我的应用程序中开始支持数百万个驱动程序(我编写的应用程序部分是文档管理系统),如果有像TWAIN这样的东西用于图像扫描程序这会很棒.
我也可以接受链接到特定硬件的限制,所以我可以说如果你想要这个功能你必须购买这个硬件,我不想支持所有现有的硬件或时间戳/数字签名Web服务.所以我正在寻找的是Delphi 1-0-1的pdf文件的时间戳和数字签名.我希望我表达自己,如果没有,请问.
我的IDE挂了几分钟,因为每次按"."我都会处理一个大项目.或者按CTRL + SPACE.
如果我很幸运,我按时按ESC键,如果没有,我必须等待1分钟,同时将我的头撞在桌子上.
我想完全禁用它,该怎么办?
我有一个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>但这是我不喜欢的东西.
我正在尝试定义重构我正在进行的项目的最佳方法.
由于缺乏良好的设计,几乎所有项目都由以下部分组成:
1)包含业务逻辑的表单
2)巨大的数据模块(每个表单1个+额外的一些)
3)包含公共代码(库)的一些单元
没有OOP(除了一些小区域),代码重用它是最低级别的.
一个问题是使用了数据感知控件,因此在数据模块上删除许多数据集+数据源并以高度耦合的方式直接链接到数据库非常简单.
理想情况下,我想提取类,如TCustomer,TEmployee,以获得os封装的优势,并且可以在将来创建新的UI而无需复制所有代码.
无论如何,我的问题是:如何继续处理数据控件?我应该实现一个返回数据集的函数,并将dataawarecomponent.datasource链接到函数结果吗?
function TCustomer.LoadByID(aCustomerID: integer): TDataset
Run Code Online (Sandbox Code Playgroud)
?
这是一个非常简单的问题.我应该在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)我能够从命令提示符运行.错误在哪里?谢谢.
有没有人已经实现了从Outlook和/或Thunderbird(从现在的"OT")到Delphi表单的电子邮件拖放.
我需要为用户提供一种在我的应用程序数据库中存储重要电子邮件的方法,而无需编写OT插件.目前他们使用这种技术:
在修改之后我想做:
所以基本上我是从资源管理器中实现拖放.我需要一个额外的层,允许我的应用程序将原来在OT上的电子邮件视为普通文件,因此我可以从OT拖动,就像它是一个普通的Windows资源管理器窗口一样.
注意:我不需要支持所有OT版本.我可以接受不支持Outlook 2003(例如)但不支持2010.因此,如果该技术不能自动适用于所有OT版本,我将更喜欢使用最新版本的版本.
最后的说明:很明显,我只对拖放电子邮件感兴趣(例如,不是Outlook日历项目).一个想法是拖动和删除附件.但这可能是未来的额外改进.
在我的应用程序中,我在每台机器上存储应用程序文件夹中的一些文
真实案例的简化版本如下:
..\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) 我需要指定颜色来区分不同的项目.简单案例:根据客户订购不同颜色的行.
我不想让用户为每个客户选择一种颜色,我想在运行时这样做.
如果有一个客户我将使用"红色",如果有两个"红色"和"白色",...
当然,我可以创建GimmeRandomColour(i: index)自己的函数,使用i和RGB函数创建良好的随机颜色(但在这种情况下,创建漂亮的颜色可能会很棘手).或者我可以说如果i是0给我clRed,...(以这种方式创建许多颜色可能是一个问题).
如何以可接受的对比度获得"良好的颜色列表"?
我想知道用户是否为其 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 ×10
clipboard ×1
colors ×1
data-aware ×1
datamodule ×1
delphi-xe2 ×1
email ×1
filesize ×1
ide ×1
ldap ×1
outlook ×1
refactoring ×1
tdictionary ×1
thunderbird ×1
winapi ×1