小编Fab*_*mes的帖子

使用关联字符串(键/值)的最简单方法是什么?

我有很多常量相关的常量,在某些时候我需要配对它们,像这样:

const
  key1 = '1';
  key2 = '2';
  key3 = '3';

  value1 = 'a';
  value2 = 'b';
  value3 = 'c';
Run Code Online (Sandbox Code Playgroud)

我想避免这样做:

if MyValue = key1 then Result := value1;
Run Code Online (Sandbox Code Playgroud)

我知道如何使用字符串列表:

MyStringList.Add(key1 + '=' + value1);
Result := MyStringList.Values[key1];
Run Code Online (Sandbox Code Playgroud)

但是,有没有更简单的方法呢?

delphi

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

如何使用TestComplete自动化测试运行过程?

我们正在尝试使用TestComplete在我们的日常构建中集成测试,到目前为止,我们有一台专用于测试的机器,我们的构建脚本会将TestComplete测试所需的一切复制到此机器(应用程序,数据库,测试脚本项目和源文件等) .

基本上我们可以手动打开TestComplete项目并运行测试.

现在我们想要自动化这个过程,那你怎么做呢?或者您认为如何成为实现这种自动化的最简单,最好的方法?

保持简短,我们希望在每次构建后自动执行打开TestComplete的过程,运行所有测试并发送包含测试结果的电子邮件.

任何人都可以分享一些经验吗?

谢谢.

build-automation automated-tests dailybuilds finalbuilder testcomplete

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

如何使用Gmail的SMTP和Indy 10发送电子邮件?

我正在使用Delphi 2009和来自svn的最新Indy 10来使用SMTP发送电子邮件,但它不适用于Gmail(Google Apps托管域).当我尝试发送电子邮件时,我得到"必须首先发出STARTTLS命令".

我尝试了谷歌搜索,我找到了几个论坛和几个解决方案,但他们都只是抨击一些代码或只是说我需要一个OpenSLL DLL,到目前为止我还不是很清楚我需要什么.

有人可以确切地告诉我需要哪个DLL以及我需要在我的TIdSMTP和TIdMessage对象中更改什么才能通过Gmail的SMTP服务器发送电子邮件?

此外,非常欢迎解释为什么此身份验证不同以及DLL的用途.

delphi ssl gmail indy

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

Delphi中的非字母排序

我正在尝试以特定顺序对TStringList进行排序.

而不是A,B,C ..我试图在B,C,A中订购它.

我已经用我需要的顺序声明了一个const数组.

我尝试过CustomSorte,但我无法理解如何编写该函数.

我现在正在尝试for循环,但它真的很难和令人困惑!

我不是德尔福专家......

提前谢谢你们!

delphi sorting

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

"已知IDE包"的详细说明,用于安全删除未使用的包

我正在我的Delphi XE2 IDE中做一些清理工作,以便最小化加载的软件包,并且由于IDE中的东西较少,试着让它更稳定一些(男人,它是如何崩溃的).

这样做的主要原因是Refactor快捷方式与我使用的其他工具发生冲突,并且通常当我错误地点击重构快捷方式时IDE会加载很多东西并因某些.NET错误而崩溃,所以我摆脱了Delphi默认的重构函数.

为了摆脱它,我刚从注册表中删除了"refactoride160.bpl - Core Refactoring Package",它确实有效.

但我注意到在注册表中有很多其他包没有描述,我认为知道这些包是什么有趣,以便知道什么可以安全删除.

我知道删除软件包会有一些影响并且可以指出,但这个问题的主要目标是更好地理解IDE上加载的内容,以便我可以将其调整为使用.

以下是注册表中的条目,注意有很多无标题包,在哪里可以找到有关这些的信息?哪个可以安全删除?

[HKEY_CURRENT_USER\Software\Embarcadero\BDS\9.0\Known IDE Packages]
"C:\\Users\\Public\\Documents\\RAD Studio\\9.0\\Experts\\IDEFixPackStartup.bpl"="IDE Fix Pack Startup"
"C:\\Program Files (x86)\\SmartBear\\AQtime 7\\Bin\\AQtime7BDS9.bpl"="AQtime 7 IDE Package"
"$(BDS)\\Bin\\asmview160.bpl"="Assembly Browser Package"
"$(BDS)\\bin\\comptoolbar160.bpl"="Component Toolbar Package"
"$(BDS)\\Bin\\dbkdebugide160.bpl"="(Untitled)"
"$(BDS)\\Bin\\delphiwin32160.bpl"="Delphi Win32 Platform"
"$(BDS)\\Bin\\dotnetcoreide160.bpl"=".NET Core IDE Package"
"$(BDS)\\bin\\exceptiondiag160.bpl"="(Untitled)"
"$(BDS)\\bin\\fileexplorer160.bpl"="(Untitled)"
"$(BDS)\\bin\\historyide160.bpl"="(Untitled)"
"$(BDS)\\Bin\\htmlhelp2160.bpl"="HtmlHelp Viewer"
"$(BDS)\\bin\\idefilefilters160.bpl"="IDE File filters"
"$(BDS)\\bin\\plugview160.bpl"="Pluggable Tree View Package"
"$(BDS)\\Bin\\projecttargets160.bpl"="(Untitled)"
"$(BDS)\\Bin\\projpageide160.bpl"="Value Data: Project and template library package"
"$(BDS)\\Bin\\startpageide160.bpl"="Start Page IDE Package"
"$(BDS)\\Bin\\tlbview160.bpl"="TypeLibrary Browser Package"
"$(BDS)\\Bin\\codetemplates160.bpl"="(Untitled)"
"$(BDS)\\bin\\coreproide160.bpl"="Core IDE Pro Package"
"$(BDS)\\bin\\dbkdebugproide160.bpl"="(Untitled)"
"$(BDS)\\Bin\\profiledeployide160.bpl"="(Untitled)"
"$(BDS)\\Bin\\profilemgride160.bpl"="(Untitled)"
"$(BDS)\\bin\\refactoride160.bpl"="Core Refactoring Package"
"$(BDS)\\bin\\todoide160.bpl"="ToDo" …
Run Code Online (Sandbox Code Playgroud)

delphi packages delphi-xe2

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

以这种方式删除和重新分配事件是否安全?如果没有,为什么?

A.Event1 := nil;
A.Event2 := nil;
try
  ...
finally
  A.Event1 := MyEvent1;
  A.Event2 := MyEvent2;
end;
Run Code Online (Sandbox Code Playgroud)

可能出现问题吗?

编辑:

我已经接受了巴里的答案,因为它完全回答了我的问题,但根据情景,韦加的答案也是正确的,遗憾的是我不能同时接受.

delphi

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

建议的舍入货币值的方法

首先看到以下问题:

SetRoundMode(rmUp)和舍入"round"值(如10)会产生10,0001.

我需要将货币值向上舍入,因此0.8205变为0.83,但上面显示的SimpleRoundTo行为让我有些头疼.

如何以安全的方式提升货币价值?

delphi

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

使用带名称空间的ChildNodes从XML读取值

我有2个XML文件,首先这个工作得很好:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:ConsultarSituacaoLoteRpsResposta xmlns:ns2="http://www.ginfes.com.br/tipos_v03.xsd" xmlns:ns3="http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_resposta_v03.xsd">
  <ListaMensagemRetorno>
    <ns2:MensagemRetorno>
      <ns2:Codigo>E172</ns2:Codigo>
    </ns2:MensagemRetorno>
  </ListaMensagemRetorno>
</ns3:ConsultarSituacaoLoteRpsResposta>
Run Code Online (Sandbox Code Playgroud)

我用来读它的代码是这样的:

MyNode := Doc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('MensagemRetorno');
MyValue := MyNode.ChildValues['Codigo'];
Run Code Online (Sandbox Code Playgroud)

问题是我有第二个XML:

<?xml version="1.0" encoding="utf-8"?>
<ConsultarSituacaoLoteRpsResposta xmlns="http://www.issnetonline.com.br/webserviceabrasf/vsd/servico_consultar_situacao_lote_rps_resposta.xsd">
  <ListaMensagemRetorno>
    <MensagemRetorno>
        <Codigo xmlns="http://www.issnetonline.com.br/webserviceabrasf/vsd/tipos_complexos.xsd">E156</Codigo>
    </MensagemRetorno>
  </ListaMensagemRetorno>
</ConsultarSituacaoLoteRpsResposta>
Run Code Online (Sandbox Code Playgroud)

请注意,此XML在"Codigo"节点中具有命名空间,因此我的代码找不到此节点.

我发现从第二个XML读取"Codigo"值的唯一方法是这样的:

for I := 0 to MyNode.ChildNodes.Count -1 do
begin
  ChildNode := RetornoNode.ChildNodes[I];
  if ChildNode.NodeName = 'Codigo' then
    Codigo := ChildNode.NodeValue;
end;
Run Code Online (Sandbox Code Playgroud)

但我认为应该有更好的方法来做到这一点,因为我仍然不明白为什么第一个代码不适用于第二个XML.

有人可以帮我澄清一下吗?

xml delphi dom delphi-xe2

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

自动go app部署

我想知道是否有任何方便的方法可以自动将代码部署到GO中的实时服务器,无论是标准内置方法还是其他方法.

我想要谷歌应用程序引擎的东西,我只是运行命令,它上传到服务器并触发重启.

(最终我想要一个git提交来触发重建和重新部署,但这将是未来的轨道)

deployment go

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

SetRoundMode(rmUp)和舍入"round"值如10,结果10,0001怎么来的?

这段代码:

 SetRoundMode(rmUp);
 Memo1.Lines.Add(CurrToStr(SimpleRoundTo(10)));
Run Code Online (Sandbox Code Playgroud)

结果10,0001.

我根本就没有得到它.

我认为rmUp会做类似的事情,围绕10,0001到11,但从不到10到10,000.

谁能解释为什么会这样?

谢谢.

delphi

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