小编Leo*_*era的帖子

如何更改delphi GUI样式?

好吧我不太了解delphi,但我做了一些项目,通常有典型的Windows组件样式,如下所示: 新风格

我正在开发一个项目,我从一些演示代码开始,然后风格完全关闭,从这个按钮可以看出: 老式

我不确定为什么它会有所不同,因为我使用相同的组件.是否有一些项目设置我可以改变,以恢复这个应用程序的正常的东西?

delphi user-interface delphi-2010

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

Delphi DEC库(Rijndael)加密

我正在尝试使用DEC 3.0库(Delphi Encryption Compedium Part I)来加密Delphi 7中的数据并通过POST将其发送到PHP脚本,我用mcrypt(RIJNDAEL_256,ECB模式)对其进行解密.

德尔福部分:

uses Windows, DECUtil, Cipher, Cipher1;

function EncryptMsgData(MsgData, Key: string): string;
var RCipher: TCipher_Rijndael;
begin
  RCipher:= TCipher_Rijndael.Create(KeyStr, nil);
  RCipher.Mode:= cmECB;
  Result:= RCipher.CodeString(MsgData, paEncode, fmtMIME64);
  RCipher.Free;
end;
Run Code Online (Sandbox Code Playgroud)

PHP部分:

function decryptMsgContent($msgContent, $sKey) {
    return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $sKey, base64_decode($msgContent), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND));
}
Run Code Online (Sandbox Code Playgroud)

问题是PHP的解密不起作用,输出是乱码,与实际数据不同.

当然,Delphi Key和PHP $Key是相同的24个字符串.

现在我知道DEC 3.0已经老了,已经过时了,我不是加密专家,无法判断实际上是不是实际上是Rijndael 256.也许有人可以告诉我这个实现与PHP的mcrypt w/RIJNDAEL_256有什么不同.也许密钥大小不同,或块大小,但无法从代码中分辨出来.这是Cipher1.pas的摘录:

const
{ don’t change this }
  Rijndael_Blocks =  4;
  Rijndael_Rounds = 14;

class procedure TCipher_Rijndael.GetContext(var ABufSize, AKeySize, …
Run Code Online (Sandbox Code Playgroud)

php delphi delphi-7 mcrypt rijndael

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

在选择时设置ComboBox文本

我正在开发一个应用程序,其中我有一个具有长文本值的组合框.由于文本值很大(以字符... 20或更多),要在组合框中显示,要求是first在选择后显示在字符上从下拉.就像用红色标记的图像一样.如果用户选择第3项,3 0.5 to 1.25 Slight我应该只3在组合框中显示.

在此输入图像描述

所以我试过这个

   sTheSelectedValue : string;

  procedure TForm1.ComboBox1Select(Sender: TObject);
  begin
   sTheSelectedValue:=TrimTextAndDisplay(ComboBox1.Text); //send theselected value
   ComboBox1.Text :='';                                   //clear the selection
   ComboBox1.Text:=sTheSelectedValue;                     //now assign as text to combo box   
   Button1.Caption:=ComboBox1.Text;                      //just show the new value on the button.
  end;


   function TForm1.TrimTextAndDisplay(TheText : string): string;
   var
   sTheResult : string;
     begin
        sTheResult :=copy(TheText,0,1); //extract the first value..
        Result     :=sTheResult;
     end;
Run Code Online (Sandbox Code Playgroud)

结果是 在此输入图像描述

按钮似乎显示正确的值,但不显示组合框.

我想要的是进入3组合框,我似乎无法设置ComboBox1.Text:= 任何人告诉我该怎么做?像这样从组合框中选择结果应该是 在此输入图像描述

delphi combobox delphi-7

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

使用XPath从XML读取不同的值

我有一个XML格式如下:

<Accounts>
   <Account Number="1"   DebitAmount="1000" Amount="2827561.95" /> 
   <Account Number="225" DebitAmount="2000"  Amount="12312.00" /> 
   <Account Number="236" DebitAmount="London"    Amount="457656.00" /> 
   <Account Number="225" DebitAmount="London"    Amount="23462.40" /> 
   <Account Number="236" DebitAmount="Bangalore" Amount="2345345.00" /> 
</Accounts>
Run Code Online (Sandbox Code Playgroud)

如何使用Xpath检索唯一帐号?即,我想得到值1,225和236.

这就是我所做的:(我正在使用Delphi 2007 ...)

Const XmlStr =
' <Accounts>
   <Account Number="1"   DebitAmount="1000" Amount="2827561.95" /> 
   <Account Number="225" DebitAmount="2000"  Amount="12312.00" /> 
   <Account Number="236" DebitAmount="London"    Amount="457656.00" /> 
   <Account Number="225" DebitAmount="London"    Amount="23462.40" /> 
   <Account Number="236" DebitAmount="Bangalore" Amount="2345345.00" /> 
</Accounts>';

 function GetAccountNumbers:TList;
 Var
   XMLDOMDocument  : IXMLDOMDocument;
   accounts : IXMLDOMNodeList;
  accountdetail :IXMLDOMNode;
   i:Integer
   list :TList
 begin
   Result:=TList.Create;
   XMLDOMDocument:=CoDOMDocument.Create; …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2007 delphi-2010

6
推荐指数
1
解决办法
3107
查看次数

检测低用户活动并检查背景上的电子邮件

我正在编写一个必须在后台执行某些操作的应用程序:检查电子邮件并解析它们以在数据库中注入一些数据,并连接到Web服务以检查某些异步操作的状态.

现在,我的解决方案是一个简单的计时器,它按照预定义的时间表执行这些操作:每隔五分钟发送一次电子邮件,每分钟进行一次Web服务检查(但只有在有待处理的活动时才会执行这些操作,因此大多数情况下这不执行任何操作)

现在我没有使用线程(我在开发阶段的早期.)但我的计划是创建一个后台线程并让它离线完成工作.

几个问题:

  1. 我计划控制计时器中的所有内容.设置一个全局变量(基本的"锁定"),启动线程.如果已设置"锁定",请忽略它.线程在终止时清除它.我应该为我的线程使用更强大的锁定/队列机制吗?(我已经安装了OmniThread)
  2. 如何运行低优先级的线程?当后台线程执行数据插入或联网时,我不希望应用程序感到迟钝.
  3. 是否有一种干净的方法来验证用户活动并仅在用户不忙于键盘/鼠标时启动此线程?

请记住,我没有线程经验.我写了一个FTP同步应用程序,所以我不是一个完整的新手,但很久以前.

delphi multithreading delphi-xe

5
推荐指数
2
解决办法
295
查看次数

如何在Delphi中有效地使用接口进行内存管理

我是Delphi的新手并且已经手动完成了所有的内存管理,但是听说Delphi能够使用接口来进行引用计数并以这种方式提供一些内存管理.我想开始这个,但有一些问题.

  1. 一般来说,我该如何使用它.创建接口和实现它的类.然后,只要我需要该对象,变量实际上是接口类型,但实例化对象和presto?没有必要考虑解放它吗?没有更多的尝试 - 终极?

  2. 为真正不需要它们的类创建一堆接口似乎非常麻烦.有关自动生成这些的提示吗?我该如何最好地组织它?接口和类在同一个文件中?

  3. 有什么常见的陷阱可能会让我感到悲伤?例如:将接口对象转换为其类的对象是否会破坏我的引用计数?或者Delphi是否有任何非显而易见的方法来创建引用循环?(除了A使用B使用C使用A)

如果有教程覆盖任何一个,那将是很好的,但我没有在我的搜索中提出任何东西.谢谢.

delphi delphi-xe

5
推荐指数
2
解决办法
1318
查看次数

Eclipse Data Tools项目 - SQL Query Parser

刚刚在DTP项目中发现了SQL Query Parser类,它看起来像一个伟大的(独特的)项目.

我的问题是我需要分析并查看是否可以合并一些在大系统中使用的非常多毛的SQL片段.我需要一个智能且功能强大的解析器,因此我可以执行准确的分析,并确定是否可以将这些片段连接在一起以提高性能.我已经想出了我需要进行的分析; 然而,由于-是解析器将无法解析这些碎片,因为它们使用特定的DB2 OLAP功能(over(),partition by,等),所以我需要包括DB2插件我的代码.

这是怎么做到的?我无法在org.eclipse.datatools.sqltools.parsers.sql.query.db2.*任何地方找到classes(),而且我也不知道如何注册它们(我正在尝试手动执行它,但当然它找不到合适的类.)

这就是我目前正在做的事情,我知道这是错的,但我还没有找到有关它的文档:

SQLQueryParserManagerProvider provider = SQLQueryParserManagerProvider
        .getInstance();

provider.registerParserManager(
        "org.eclipse.datatools.sqltools.parsers.sql.query.db2",
        "DB2 UDB", null, null);

SQLQueryParserManager parserManager = SQLQueryParserManagerProvider
        .getInstance().getParserManager("DB2 UDB", null);
Run Code Online (Sandbox Code Playgroud)

你能指出如何获得足够的解析器来解析DB2吗?

编辑:可能正确的问题是,如何确保db2特定提供程序正确注册?什么是正确的班级名称?

java sql eclipse parsing

5
推荐指数
1
解决办法
806
查看次数

从EF 6代码优先迁移和多种配置生成完整的SQL脚本

我正在尝试生成完整的SQL脚本以首次部署我的应用程序。我知道来自软件包管理器控制台的此命令应该创建完整的SQL脚本(请参阅此SO问题)

Update-Database -Script -SourceMigration:0 
Run Code Online (Sandbox Code Playgroud)

我还读过,$InitialDatabase对于源代码迁移,它应该可以代替“ 0”工作。

但是,我的迁移文件夹中有两种配置。我正在使用以下语法:

Update-Database -Script -SourceMigration:0 -ConfigurationTypeName MyConfig
Run Code Online (Sandbox Code Playgroud)

我正在为所有配置恢复一个空脚本。

需要说明的是,我启用了自动迁移,并且没有向其添加任何显式迁移。

asp.net entity-framework ef-code-first ef-migrations

5
推荐指数
1
解决办法
5711
查看次数

如何编写一个映射4 GB的内存管理器用于Delphi

我有一个使用超过2千兆字节的虚拟内存的对象但Delphi只管理2 GB我正在考虑以太多制作一些对象并将它们分组并使用windows wow64方法一些如何使用64位窗口.或者只是将内存管理器升级到4 GB并围绕Int64构建它.实际上,我需要使用TStream作为使用Int64的基础对象,而不是整数.

delphi

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

线程完成但循环不会结束

我用一些似乎不正确的假设编写了一些线程代码,整数是线程安全的.现在似乎虽然它们是,但我对它们的使用并不是线程安全的.我使用全局整数ThreadCount来保存线程数.在线程创建期间,我增加ThreadCount.在线程销毁期间,我减少它.在创建所有线程之后,我等待它们完成(ThreadCount应该降为0),然后编写我的最终报告并退出.

有时候(5%),我从来没有达到0,即使对我的日志的验尸检查显示所有线程都运行并完成.因此所有迹象都表明ThreadCount遭到践踏.我一直告诉自己这是不可能的,因为它是一个整数,我只是使用inc/dec.

这里有一些相关代码:

var  // global
  ThreadCount : integer;            // Number of active threads
...

constructor TTiesUpsertThread.Create(const CmdStr : string);
begin
  inherited create(false);
  Self.FreeOnTerminate := true;
...
  Inc(ThreadCount);      // Number of threads created.  Used for throttling.
end;

destructor TTiesUpsertThread.Destroy;
begin
  inherited destroy;
  Dec(ThreadCount);     // When it reaches 0, the overall job is done.
end;

...
//down at the end of the main routine:

    while (ThreadCount > 0) do   // Sometimes this doesn't ever end.  
    begin
      SpinWheels('.'); // sleeps for 1000ms …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading thread-safety

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