我使用DCPcrypt和SHA512来散列字符串.
我正在使用Warren Postma的版本https://bitbucket.org/wpostma/dcpcrypt2010
它工作正常.然而,它与德国的变音符号如ä,ö,ü以及其他可能的unicodes相混淆.
我正在使用这样的库:
function TForm1.genhash(str: string): string;
var
Hash : TDCP_sha512;
Digest: array[0..63] of byte;
i: integer;
s: string;
begin
s:= '';
hash := TDCP_sha512.Create(nil);
if hash<>nil then
begin
try
Hash.Init;
Hash.UpdateStr(str);
Hash.Final(Digest);
for i:= 0 to length(Digest)-1 do
s:= s + IntToHex(Digest[i],2);
finally
hash.free;
end;
end;
Result := s;
end;
Run Code Online (Sandbox Code Playgroud)
当我输入字母时,ä我希望输出为:
64868C5784A6004E675BCF405F549369BF607CD3269C0CAC1711E21BA9F40A5ABBF0C7535856E7CF77EA55A072DD04AA89EEA361E95F497AA965309B50587157
我查看了这些网站:http : //hashgenerator.de/ http://passwordsgenerator.net/sha512-hash-generator/
但是我得到:
1A7F725BD18E062020A646D4639F264891368863160A74DF2BFC069C4DADE04E6FA854A2474166EED0914B922A9D8BE0C89858D437DDD7FBCA5C9C89FC07323A
所以我的问题是:我如何使用DCPcrypt库为德语变音符号生成哈希?谢谢
在Firemonkey中,我们可以使用TShadowEffect来绘制漂亮的阴影.
此阴影还会调整其不透明度和半透明度,以便在控件重叠时显示其下方的正确组件.
没有TShadowEffect:

使用TShadowEffect:

有没有办法在VCL表单中绘制相同的阴影效果而不嵌入FMX表单?
我正在努力使用带有FireDac的in运算符.
我使用的是oracle-database,无法进行简单的查询.
FDQuery1.SQL.Text := 'SELECT * FROM Customers WHERE Gender in (:Genders)';
FDQuery1.ParamByName('Genders').AsString:= 'M';
Run Code Online (Sandbox Code Playgroud)
它适用于一个参数,但这显然不是in运算符的目的.
但是,多个值不起作用:
FDQuery1.ParamByName('Genders').AsString:= 'M, F';
FDQuery1.ParamByName('Genders').AsString := '''M'', ''W''';
Run Code Online (Sandbox Code Playgroud)
可能是不支持in运算符?如果是这样的话会被替换掉什么?
当结果为空时,我总是使用 NVL() 来分配默认值。
但是在 PostgreSql 中只有 COALESCE()。
我可以给 COALESCE 函数一个别名以便它与 NVL 一起执行吗?
或者我可以以某种方式复制函数声明吗?
我正在Delphi 10.1 Berlin下使用FireDac.
为了向用户显示数据,我使用像TDBEdit这样的数据感知控件.
我使用TFDQuery和TDataSource将它们与控件链接起来.
这有效,但需要一些时间来执行的长sql查询将冻结GUI.
我想知道如何在执行那些长时间运行的查询时阻止gui冻结.
我在考虑背景线程.
在维基上,我读到FireDac可以使用多线程:http://docwiki.embarcadero.com/RADStudio/XE6/en/Multithreading_(FireDAC )
然而,在Embarcadero的社区论坛线程杰夫Overcash写道:
我没有看到的一件事或德米特里提到的是你不能在背景线程查询中使用TDataSource或LiveBindings.如果您是后台线程,则显示结果的查询应断开LB或DataSource,打开并获取所有数据,然后重新建立连接.
这两个将尝试将光标移动到您或查询缓冲区以显示,而缓冲区非常易变,在另一个线程中移动.
我想知道是否有人也使用FireDac并在表单上显示值可以帮助我在这里.
可以使用类似的东西将枚举转换为字符串:
uses
TypInfo;
type
Language = (Delphi,Delphi_Prism,CBuilder);
var
StrLanguage : String;
begin
StrLanguage := GetEnumName(TypeInfo(Language),integer(Delphi)) ;
end;
Run Code Online (Sandbox Code Playgroud)
(摘自theroadtodelphi)
是否可以对具有自定义值的枚举执行相同操作?
像这样的东西:
type
THotkey = (hkShift= 1, hkSpace= 3, hkEnter= 6);
Run Code Online (Sandbox Code Playgroud)
作为一种解决方法,我使用占位符来跳过未使用的枚举.
然而,这不是很好,如果我不得不跳过巨大的差距是有问题的.
type
THotkeys = (hkShift, hkUnused1, hkSpace, hkUnused2, hkUnused3, hkEnter);
Run Code Online (Sandbox Code Playgroud) 我正在将一个Lazarus项目搬到Delphi Seattle.
Lazarus项目依赖于40多个单元(包括控件),并有几个应用程序.
在所有项目的uses子句中,他们使用了以下内容:
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBCtrls, {$I OurLibrary.inc};
Run Code Online (Sandbox Code Playgroud)
他们包括那些40多个单位$I OurLibrary.inc.
由于其中一些单位是控件,我在Delphi中注册了它们.
但是,如果我保存项目或构建/编译它,Delphi再次添加使用部分中的单位.
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBCtrls, uOurEdit, {$I OurLibrary.inc};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,uOurEdit即使它进入,该单元也会再次添加$I OurLibrary.inc.
如果我手动删除它并再次编译项目它运行.一旦我切换回设计师模式并尝试运行它同样的事情不断发生 - 它再次添加uOurEdit.
一旦你移除一个单位Lazarus不再添加它.德尔福做到了这一点.
有没有办法告诉德尔福停止读取单位或自动停止添加单位?
在“ Insert ... On Conflict”语句中使用相同的值时,可以简化语法吗?
INSERT INTO cars
(car_id, car_type, car_model)
values
(1, 'tesla', 'model s')
ON CONFLICT (car_id) DO UPDATE SET
car_type = 'tesla',
car_model = 'model s';
Run Code Online (Sandbox Code Playgroud)
有更多此类声明,因为它们是脚本的一部分,该脚本在每次应用程序更新时都会运行。
基本上,我正在寻找一种方法来两次不指定相同的值。
delphi ×6
firedac ×2
postgresql ×2
concurrency ×1
delphi-xe7 ×1
delphi-xe8 ×1
firemonkey ×1
vcl ×1