小编fro*_*ogb的帖子

有一种简单的方法来解决Delphi utf8文件缺陷吗?

我发现(很难)如果一个文件有一个有效的UTF-8 BOM但包含任何无效的UTF8编码,并且被任何Delphi(2009+)编码启用的方法读取LoadFromFile,那么结果就是完全空文件,没有错误指示.在我的几个应用程序中,我宁愿丢失一些不良编码,即使在这种情况下我也没有得到任何错误报告.

调试显示MultiByteToWideChar调用两次,首先获取输出缓冲区大小,然后进行转换.但是TEncoding.UTF8包含FMBToWCharFlags这些调用的私有值,并使用MB_ERR_INVALID_CHARS值初始化.因此,获取charcount的调用返回0并且加载的文件完全为空.在没有标志的情况下调用此API将"默默地删除非法代码点".

我的问题是如何最好地编织Encoding区域中的类的嵌套来解决这个私有值的事实(并且需要,因为它是所有线程的类var).我想我可以使用Marco Cantu的Delphi 2009书中的指南添加自定义UTF8编码.并且如果MultiByteToWideChar在没有标志的情况下再次调用它之后返回编码错误,它可以选择性地引发异常.但这并没有解决如何使用我的自定义编码而不是Tencoding.UTF8.

如果我可以在初始化时将其设置为应用程序的默认设置,也许通过实际修改类var for Tencoding.UFT8,这可能就足够了.

当然,我需要一个解决方案,而不是等待提交质量控制报告,要求更强大的设计,接受它,并看到它改变.

任何想法都会非常受欢迎.并且有人可以确认这仍然是XE4的一个问题,我还没有安装?

delphi utf-8

13
推荐指数
2
解决办法
1711
查看次数

调用继承错误造成的损害是什么?

在Delphi XE程序中搜索高度间歇性的内存损坏时,我找到了一个类构造函数,它初始化类中的几个字段,然后调用inherited.我相信初始化是在构造函数首次编写后添加的,并且意外地在错误的位置.我现在已经纠正它,先调用继承.内存损坏的例外几乎总是发生在这个类的方法中.

问题:这个错误是否可能导致间歇性内存损坏?在跟踪代码时,似乎没有,但我真的希望这个解决方案可以解决间歇性问题.在解决问题后一段时间内没有发生这种情况并不能证明它已经消失了.

一些代码:

Tmyclass = class
  ctype : integer;
  ts : tstringlist;
  th : thandle;
public
  Constructor Create;
  Destructor Destroy; override;
  ...
end;

Constructor Tmyclass.Create;
begin
  ctype := 3;
  doinit;
  inherited;
end;
Run Code Online (Sandbox Code Playgroud)

delphi

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

如何从Delphi 2010中的默认右键单击菜单中删除项目?

在Delphi 2010 VCL应用程序的默认右键单击弹出菜单底部插入Unicode,从右到左和IME项的人或者是什么?我想在不太可能需要的用户环境中删除它们,而无需为每个编辑和备忘录定义自定义弹出菜单.大多数时候只有复制,剪切,粘贴和选择都是合适的.

delphi vcl delphi-2010

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

如何在IDE菜单中添加自定义样式?

我稍微修改了Delphi Seattle提供的一种VCL样式,并使用不同的.vcf名称保存它.我无法找到一种方法将我的样式添加到IDE中"外观"下的菜单中,以便我可以轻松地为项目选择它.可用样式被分组为Embarcadero样式这一事实意味着将支持创建另一个组.

将其放在与其他文件夹相同的文件夹中不会使其显示在列表中.

delphi

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

在不使用JEDI的情况下检查Admin用户

最近一个问题的答案提供了对Vista及以上版本的管理员组成员资格的检查,这与我迄今为止使用的(我学到的)弃用方法不同.但我真的不想安装整个JEDI API只是为了获得Delphi VCL中缺少的一些函数头和常量的定义,而JEDI API下载似乎还不支持XE.即使最新的SVN文件支持XE,安装11MB仍然只是为了完成这项任务.任何人都可以建议一个简单,经过测试的独立Delphi例程的来源吗?

delphi

0
推荐指数
1
解决办法
565
查看次数

标签 统计

delphi ×5

delphi-2010 ×1

utf-8 ×1

vcl ×1