小编Jan*_*gen的帖子

TDataModule后代'创建'没有.Create但没有问题?

我突然注意到TDataModuleTestExchange(nil)我们的代码库中有一个'构造函数调用':

procedure TDialoogConfigExchange.ButtonTestClick(Sender: TObject);
var
   lDataModuleTestExchange: TDataModuleTestExchange;
   lResult                : Boolean;
begin
   inherited;
   [snip]
   begin
      lDataModuleTestExchange := TDataModuleTestExchange(nil);  // *** HERE ***
      try
         lResult := lDataModuleTestExchange.GetCalendarFolder(EditHost.Text,EditGebruiker.Text,EditWachtwoord.Text);
         if lResult then
            ToonMelding(sExchangeTestGelukt, mtInformation, [mbOk])
         else
            ToonMelding(Meldingen.Text, mtError, [mbOK]);
      finally
         lDataModuleTestExchange.Free;
      end;
   end;
end;
Run Code Online (Sandbox Code Playgroud)

所以,而不是TDataModuleTestExchange.**Create**(nil)这个工作就好了!

unit dmTestExchange;

interface

uses
  System.SysUtils, System.Classes,
  Xml.XMLDoc, Xml.XMLIntf, Xml.XMLDOM,
  TimeTellDM;

type
  TDataModuleTestExchange = class(TTimeTellDataModule)  // TDataModule descendant
  private
  public
    function GetCalendarFolder(const AExchangeServerURL,AExchangeLoginName,AExchangePass: String): Boolean;
  end;
Run Code Online (Sandbox Code Playgroud)

没有编译器错误,没有运行时问题.怎么会?

delphi constructor datamodule delphi-xe2

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

如何为TEncoding类型的函数参数设置默认值?

从D2007转换为XE2,我转换了这个功能

function Add_Line( FileStream : TFileStream; ALine : string) : boolean;
Run Code Online (Sandbox Code Playgroud)

function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding = nil) : boolean;
var
  AStr: ANSISTring;
begin
  Result := True;
  if Enc = nil then Enc := TEncoding.ANSI;
  try
//Old    FileStream.WriteBuffer( Pointer(ALine)^, Length(ALine) );
    if Enc = TEncoding.UTF8 then
      AStr := UTF8Encode(ALine)
    else
      AStr := ANSIString(ALine);
    FileStream.WriteBuffer( AStr[1], Length(ALine) );
    end;
  except
    Result := False;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

理由:

  • 尽可能少地使用Add_Line更改代码

  • 接受自动更改为Unicode,仅在最后时刻写入8位文本文件(这在XML和CSV中使用).如果我们想要的话,未来我们仍然可以转向UTF-16文件.

我本来希望定义类似的东西:

function Add_Line( FileStream : TFileStream; ALine …
Run Code Online (Sandbox Code Playgroud)

delphi unicode encoding delphi-xe2

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

插入了意外空间 - 为什么要编译?

我不小心碰到空格键并写了这个:

lTTEvent .CustUpdateStatus := usUnchanged;
Run Code Online (Sandbox Code Playgroud)

并且惊讶地发现编译器接受了点前面的空间(实际上,任意数量的空格).

点是否是解析器可以正确解释它的特殊字符?如何在Pascal中工作?

delphi pascal delphi-xe2

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

猪UDF用于iso至yyyy-mm-dd hh:mm:ss.000

我希望将ISO时间格式转换为yyyy-mm-dd hh:mm:ss.SSS.但是我无法实现转换.我刚接触猪,我试图编写一个udf来处理从ISO格式到yyyy-mm-dd hh:mm:ss.SSS的转换.

请指导我,我尝试了猪的内置功能(FORMAT,DATE_FORMAT)但是无法将数据转换为所需的格式.

当前数据格式:2013-08-22T13:23:18.226220 + 01:00

所需数据格式:2013-08-22 13:23:18.226

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.EvalFunc;
import org.joda.time.DateTime;
import org.joda.time.format.*;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.DateTimeFormatterBuilder;
public class test extends EvalFunc<String>{

public String exec(Tuple input) throws IOException {

    if ((input == null) || (input.size() == 0))
        return null;
    try{
        String time = (String)input.get(0);
         DateFormat dt = new SimpleDateFormat ("yyyy-mm-dd hh:mm:ss.SSS");
         Date d_t = dt.parse(time);
         String timedt = getTimedt(d_t);
         return timedt; 
    } catch (ParseException …
Run Code Online (Sandbox Code Playgroud)

java iso apache-pig

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

Delphi检测到可恢复文件时的操作过程?

我的Delphi Tokyo 10.2.1 IDE刚刚崩溃.重启时我得到提示:

在此输入图像描述

RAD Studio已恢复以下文件.保存你想要保留的那些.

文件比较显示,此时文件__recovery确实是最新版本,但尚未恢复任何内容
(注意:特定文件未在IDE中重新打开,因为崩溃阻止IDE将其注册为打开file.此文件所属的项目甚至不是项目组中的当前项目,原因相同).

该对话框只有一个关闭按钮.我可以选择那个文件.我开始测试几种变化.

无论我是否选择它,单击关闭后,Delphi会要求丢弃剩余的恢复文件?.

  • 如果我然后选择否,则没有任何变化.文件未恢复,内容__recovery保持不变
  • 当我选择Yes时,我也想测试它,但是现在没有复制旧源文件加__recovery文件夹的数量会再次触发IDE警告.我无法测试进一步的变化.IDE现在不断清除__recovery文件夹.

这有点乱.恢复不起作用吗?对话文本是否不清楚?

我期望从这样的对话框中出现以下行为:

  • 它向我提供了检测到的文件.文字说:RAD Studio 发现 了以下文件. 选择 您要保留的那些.
  • 用户必须选择他想要恢复的文件.
  • 如果仍有任何未恢复的文件,则会出现丢弃剩余的恢复文件消息.

有谁知道(f)究竟发生了什么?我该怎么办(选择/回答)?
我在网上找不到答案.

因为现在我留下了一个未恢复的文件和一个空__recovery文件夹.幸运的是我做了备份.

ide delphi file-recovery delphi-10.2-tokyo

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

TEdgeBrowser 组件:从嵌入网页上运行的脚本调用本机代码

目前我们使用TWebBrowser组件将 IE 嵌入到我们的桌面应用程序中。为了从在嵌入式浏览器中运行的脚本调用 Delphi 代码,我们实现了对window.external对象的支持,如下所述:http : //www.delphidabbler.com/articles/article-22

现在,出于多种原因,我们需要切换到现代浏览器。我们已经升级到 Delphi 10.4,它引入了新TEdgeBrowser组件(基于 Chromium 的 MS Edge)。是否也可以使用window.externalfor TEdgeBrowser?如果是这样,如何?或者还有其他方法如何从嵌入式浏览器中的脚本调用本机代码?

delphi tedgebrowser

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

为什么我的代码不能编译,而是获取E2506接口部分声明的参数化类型的方法不能使用本地符号

我正在使用Delphi XE.

以下单元无法使用此错误进行编译:

[DCC Error] GTSJSONSerializer.pas(27): E2506 Method of parameterized type declared 
   in interface section must not use 
   local symbol 'TSuperRttiContext.AsJson<GTSJSONSerializer.TGTSJSONSerializer<T>.T>'
Run Code Online (Sandbox Code Playgroud)

这是为什么?有解决方法吗?

unit GTSJSONSerializer;

interface

type
   TGTSJSONSerializer<T> = class
     class function SerializeObjectToJSON(const aObject: T): string;
     class function DeserializeJSONToObject(const aJSON: string): T;
   end;

implementation

uses
        SuperObject
      ;

class function TGTSJSONSerializer<T>.SerializeObjectToJSON(const aObject: T): string;
var
  SRC: TSuperRttiContext;
begin
  SRC := TSuperRttiContext.Create;
  try
    Result := SRC.AsJson<T>(aObject).AsString;
  finally
    SRC.Free;
  end;
end;

class function TGTSJSONSerializer<T>.DeserializeJSONToObject(const aJSON: string): T;
var
  LocalSO: ISuperObject;
  SRC: TSuperRttiContext;
begin
  SRC …
Run Code Online (Sandbox Code Playgroud)

delphi generics compiler-errors delphi-xe superobject

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

防止XSLT转换将utf-8 XML转换为utf-16?

在Delphi XE2中,我正在对收到的XML文件进行xslt转换,以删除所有命名空间信息.
问题:它改变了

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

<?xml version="1.0" encoding="utf-16"?>
Run Code Online (Sandbox Code Playgroud)

这是我从Exchange服务器返回的XML:

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="14" MinorVersion="0" MajorBuildNumber="722" MinorBuildNumber="0" Version="Exchange2010" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:ResolveNamesResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:ResolveNamesResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:ResolutionSet TotalItemsInView="1" IncludesLastItemInRange="true">
<t:Resolution>
<t:Mailbox>
<t:Name>developer</t:Name>
<t:EmailAddress>developer@timetellbv.nl</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Mailbox</t:MailboxType>
</t:Mailbox>
<t:Contact>
<t:Culture>nl-NL</t:Culture>
<t:DisplayName>developer</t:DisplayName>
<t:GivenName>developer</t:GivenName>
<t:EmailAddresses>
<t:Entry Key="EmailAddress1">SMTP:developer@timetellbv.nl</t:Entry>
</t:EmailAddresses>
<t:ContactSource>ActiveDirectory</t:ContactSource>
</t:Contact>
</t:Resolution>
</m:ResolutionSet>
</m:ResolveNamesResponseMessage>
</m:ResponseMessages>
</m:ResolveNamesResponse>
</s:Body>
</s:Envelope>
Run Code Online (Sandbox Code Playgroud)

这是删除命名空间信息的函数:

Uses
   MSXML2_TLB; // IXMLDOMdocument

class function TXMLHelper.RemoveNameSpaces(XMLString: String): String;
const
  // An XSLT script …
Run Code Online (Sandbox Code Playgroud)

delphi xslt utf-8 utf-16 delphi-xe2

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

如何输出活动/非活动输入列表的计数?

我有这个输入文件(1 =有效,0 =无效)

a  1
a  0                    
b  1                      
b  1
b  0
c  0 
c  0
c  0
c  0
.
.
.
Run Code Online (Sandbox Code Playgroud)

并希望输出如下:

 X       repeats            active count    inactive count
 a       2 times                 1               1 
 b       3 times                 2               1 
 c       4 times                 0               4 
Run Code Online (Sandbox Code Playgroud)

我试过了:

awk -F "," '{if ($2==1) a[$1]++; } END { for (i in a); print i, a[i] }'file name
Run Code Online (Sandbox Code Playgroud)

但那没用.
我怎样才能获得输出?

linux arrays awk if-statement

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

在Delphi webservice中使用OpenSSL - 可用的协议和密码

我在Delphi webservice中使用OpenSSL与HTTPS连接的可用密码有点混淆.

建立:

  • 我的webservice在客户端的服务器上运行.OpenSSL安装在那里.Web服务使用Indy(TIdHTTPWebBrokerBridge)和OpenSSL DLL(使用TIdServerIOHandlerSSLOpenSSL)来加载客户端的证书
  • 我们的Android/iOS应用程序通过HTTPS连接到此Web服务
  • 客户端已配置应用程序用户可以连接并访问我的Web服务的域和IP.如果我们使用例如SSLLabs服务器测试来测试该域,我们将获得支持的密码和协议的概述(SSLLabs甚至模仿来自设备和浏览器的握手并显示协商的密码).

问题:我的web服务(与OpenSSL结合)是否必须做/可以做什么来影响 app和webservice之间TLS握手的可用密码?是否还需要使用OpenSSL设置其他内容?

我认为答案是'不',即它只是服务器设置(在通过Android/iOS与应用程序握手)确定从可用服务器使用哪个密码.这是正确的假设吗?或者我会错过什么?
(作为事实上,我不是在限制或扩大现有的密码真正感兴趣,但客户坚持的东西"应该做的",在/与web服务/ OpenSSL的将它传达"安全"与应用程序.该SSLLabs测试表明他们的域支持TLS 1.0和使用RSA密钥交换机制的密码,所以例如没有Perfect Forward Secrecy.对我来说,这看起来像是需要修复的东西).

笔记:

  • 这个问题表明我可能需要做点什么,但它没有答案.

  • 我发布了一个早先有点相关的问题,但这没有答案.

  • 这篇SO帖子指出OpenSSL在SSL握手过程中尊重客户端的密码偏好,而不是服务器的密码偏好,这再次表明我可以做些什么?

  • 我怀疑这个问题是否在这里适当的位置(也是因为我们不支持客户),但由于这可能与更多程序员有关,所以我决定把它放在SO上.

delphi https openssl web-services

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