小编Jan*_*gen的帖子

Delphi - 如何使用Delphi创建WYSIWYG HTML编辑器?

如何使用WYSIWYG界面制作HTML文件?IE一个HTML编辑器.专门用于创建格式化的电子邮件,包括图像,超链接,字体格式,项目符号,缩进等...

注[jd]:这是一个自我回答的问题,旨在成为其他人的指针.

html delphi wysiwyg editor

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

如何激活case语句的代码完成?

在最近的Delphi版本中,可以使用代码完成来一次编写case语句中的所有情况,例如枚举类型.

但无论我尝试什么,我都无法让它发挥作用.我应该开始输入什么,然后使用什么热键?也许我错过了一个工具/选项设置,虽然我不怀疑,因为它是一个手动操作.

delphi code-completion delphi-xe2

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

防止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
查看次数

(如何)在断点处导出调用堆栈?

当代码在断点处停止时,有没有办法导出调用堆栈?

我有很长的ID字符串,我需要抓住在另一个程序中使用(见图),从屏幕截图重新输入并不是一个选项;-)

我在XE2 IDE中点击但找不到任何东西.

(解决方法:现在我继续在断点之后逐步执行代码,直到我已经移动到足够远的堆栈,局部变量再次可用.)

在此输入图像描述

ide delphi callstack breakpoints delphi-xe2

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

如何使用FireDAC设置与Oracle的ODBC连接?

我可以通过本机驱动程序成功连接到Oracle,但无法使ODBC连接正常工作.Oracle 11g客户端软件安装在我的Windows 7 64位计算机上,以及从Microsoft Windows 32位的Instant Client下载下载的32位ODBC驱动程序 .

让我首先描述成功的联系:

TNSNames.ORA 包含Oracle 10安装的数据:

# TNSNAMES.ORA Network Configuration File: C:\oracle\ora92\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

VS2003-2005-10.TimeTellBV.nl =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = VS2003-2005-10)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = Orclvs10)
    )
  )
Run Code Online (Sandbox Code Playgroud)

我设置了我TFDConnection

DriverName := S_FD_OraId;
Params.Database := 'VS2003-2005-10';
Run Code Online (Sandbox Code Playgroud)

或者,我可以TNSNAMES.ORA通过直接指定绕过:

DriverName := S_FD_OraId;
Params.Database := '(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = VS2012-2012.timetellbv.nl)(PORT = 1521)) ) (CONNECT_DATA = …
Run Code Online (Sandbox Code Playgroud)

delphi oracle odbc firedac delphi-10.2-tokyo

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

禁用编辑器选项卡上的关闭图标?

从Delphi Tokyo 10.2.x升级到Rio 10.3.1后,编辑器中文件的选项卡现在带有关闭图标:

在此处输入图片说明

在Delphi Rio 10.3.1中关闭图标-鼠标悬停使其他对象可见/活动

在此处输入图片说明

在Delphi Tokyo 10.2.x中没有关闭图标

特别是对于较短的文件名,当我想在编辑器中切换到特定文件时,我会定期单击小x。如果文件有待处理的编辑,我可以单击“取消”以阻止它关闭,但是我经常发现自己不得不重新打开它。

有点麻烦。

可以在IDE中禁用这些关闭图标吗?

ide delphi delphi-10.3-rio

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

Delphi Superobject,json的通用列表

我有一个带有一些TObjectList <>的对象 - 我尝试使用帮助形式SuperObject编码为JSON的字段.

TLogs = TObjectList<TLog>;
TMyObject = class(TObject)
private
  FLogs: TLogs;
end;
Run Code Online (Sandbox Code Playgroud)

在SuperObjects代码内部,有一个ToClass过程,迭代字段并将它们添加到json结果中.

在此循环中,检查TRttiFields FieldType.如果它为零,则跳过该对象.

for f in Context.GetType(Value.AsObject.ClassType).GetFields do
  if f.FieldType <> nil then
  begin
    v := f.GetValue(value.AsObject);
    result.AsObject[GetFieldName(f)] := ToJson(v, index);
  end
Run Code Online (Sandbox Code Playgroud)

我的通用列表字段的FieldType为nil.为什么?

如何让SuperObject序列化我的对象列表?

delphi generics json rtti superobject

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

为什么有些字符常量为1字节宽,有些则为2字节宽?

我以为我开始理解Unicode了,但这比我好:

const
c1 = #1;   --> SizeOf() = 2
c2 = #33;  --> SizeOf() = 2
c3 = #127; --> SizeOf() = 2
c4 = #128; --> SizeOf() = 1
c5 = #160; --> SizeOf() = 1 
c6 = #161; --> SizeOf() = 1 
c7 = #255; --> SizeOf() = 1 
Run Code Online (Sandbox Code Playgroud)

谁能解释一下?Delphi XE2,默认Windows-1252代码页

谢谢Jan

delphi delphi-xe2

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

字符串/整数对的最佳存储,快速查找字符串?

我需要保持字符串和整数之间的对应关系,然后查找字符串值并返回整数.存储符合以下要求的信息的最佳结构是什么:

  • 按顺序,速度和内存大小很重要.

  • 我不想重新发明轮子并编写自己的排序程序.调用Sort(CompareFunction)当然没问题.

条件:

  • 整数不保证是连续的,也没有像0或1那样的"起始值"

  • 数据对的数量可以在100到100000之间变化

  • 所有数据都在开头读入,没有后续的添加/删除/修改

  • FWIW字符串是Outlook(MAPI?)用于标识条目的十六进制条目ID.示例:00000000FE42AA0A18C71A10E8850B651C24000003000000040000000000000018000000000000001E7FDF4152B0E944BA66DFBF2C6A6416E4F52000487F22

有很多选项(TStringList(带有对象或名称/值对),TObjectList,TDictionary,......)我最好先征求意见......

我已阅读如何更快地搜索Delphi TStringList中的名称/值对?它建议用于字符串/字符串对的TDictionary,以及在Delphi 2007中对多维数组进行排序,数组建议使用字符串/整数的TStringlist对象,但是对整数进行排序.

delphi storage data-structures delphi-xe2

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

TIdServerIOHandlerSSLOpenSSL.SSLOptions.CipherList中的密码名称顺序是否重要?

我限制了我的web服务只允许这些TLS 1.x密码的密码:

TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
TLS_RSA_WITH_IDEA_CBC_SHA
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA

更新以回应Dave Thompson的评论:

我现在按顺序获取这个SO答案生成的密码.
因为我们目前使用的是Delphi XE2/Indy 10.5.8.0/OpenSSL 1.0.2f,所以我忽略了ECDHE密码,这些软件版本实现起来太麻烦了.
此外,我们仍然允许TLS 1.0.
在更新到Delphi Seattle 10之后,我们将禁止使用TLS 1.0并将ECDHE密码重新放入.

这留下:

TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcc15)
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f)
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e)
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x6b)
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x67)
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 (0xc4)
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39)
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33)
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (0x88)
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (0x45)
Run Code Online (Sandbox Code Playgroud)

转换为OpenSSL名称(根据映射OpenSSL密码套件名称到RFC名称),这些是:

DHE-RSA-CHACHA20-POLY1305 
DHE-RSA-AES256-GCM-SHA384 
DHE-RSA-AES128-GCM-SHA256 
DHE-RSA-AES256-SHA256 
DHE-RSA-AES128-SHA256 
- cannot find the equivalent for 0xc4 - anyone? -
DHE-RSA-AES256-SHA
DHE-RSA-AES128-SHA 
DHE-RSA-CAMELLIA256-SHA 
DHE-RSA-CAMELLIA128-SHA256
Run Code Online (Sandbox Code Playgroud)

服务器提供密码的顺序很重要,但我是否可以控制此顺序?CipherList是一个字符串属性,包含与'+'连接的这些名称:

TIdServerIOHandlerSSLOpenSSL.SSLOptions.CipherList := 'DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SH:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-CAMELLIA128-SHA256'; …
Run Code Online (Sandbox Code Playgroud)

delphi ssl openssl indy

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