小编Tho*_*mas的帖子

右键单击TOpenDialog中的文件时,使用自定义样式会显示无效字符

请参阅以下步骤以重现.适用于XE2,但不适用于XE8.

  1. 创建一个新的VCL表单应用程序 - Delphi
  2. 在表格上放置一个TButton和一个TOpenDialog
  3. 在按钮OnClick事件调用中OpenDialog1.Execute
  4. 运行程序,打开文件对话框,右键单击文本文件=>显示菜单项确定
  5. 转到项目/选项/应用程序/外观.启用并选择自定义样式(例如"Ruby Graphite")并重新编译
  6. 运行程序,打开文件对话框,右键单击文本文件=>不正确显示菜单项(显示无效字符)

使用XE8订阅更新1(Windows从8.1升级到10)进行测试

delphi topendialog vcl-styles windows-10 delphi-xe8

10
推荐指数
1
解决办法
862
查看次数

unicode文本文件输出在XE2和Delphi 2009之间有所不同?

当我尝试下面的代码时,与D2009相比,XE2中的输出似乎不同.

procedure TForm1.Button1Click(Sender: TObject);
var Outfile:textfile;
    myByte: Byte;

begin
  assignfile(Outfile,'test_chinese.txt');
  Rewrite(Outfile);

  for myByte in TEncoding.UTF8.GetPreamble do write(Outfile, AnsiChar(myByte));
  //This is the UTF-8 BOM

  Writeln(Outfile,utf8string('??'));
  Writeln(Outfile,'°C');
  Closefile(Outfile);
end;
Run Code Online (Sandbox Code Playgroud)

在Windows 8 PC上使用XE2进行编译可以使用写字板

?? C

txt十六进制代码:EF BB BF 3F 3F 0D 0A B0 43 0D 0A

在Windows XP PC上使用D2009进行编译可以在Wordpad中进行

总结°C

txt十六进制代码:EF BB BF E6 80 BB E7 BB 93 0D 0A B0 43 0D 0A

我的问题是它为什么不同,我如何使用旧的文本文件I/O将中文字符保存到文本文件?

谢谢!

delphi unicode utf-8

8
推荐指数
3
解决办法
9375
查看次数

在Delphi 10.1 Berlin中使用VCL样式时,TSaveDialog的属性"ofOverwritePrompt"不起作用

  1. 创建一个新的VCL Forms应用程序
  2. 在主窗体上添加一个Tbutton和一个TSaveDialog

  3. 在SaveDialog1的属性中将"ofOverwritePrompt"设置为True

  4. 使用:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      SaveDialog1.Execute();
    end;
    
    Run Code Online (Sandbox Code Playgroud)
  5. 运行应用程序.按按钮执行保存对话框.尝试保存到已存在的文件.如果要替换文件,则会出现一个消息框.按取消.到目前为止都很好.关闭应用程序.

  6. 转到项目/选项/应用程序/外观并选择自定义样式(例如Amakrits).将Amakrits设置为默认样式.

  7. 按照上面的#5运行应用程序.只会显示消息框的一小部分.您必须按Enter键才能继续.

(使用TFileSaveDialog会得到相同的结果)

如果我使用Delphi XE8编译并运行应用程序就可以了,因为即使选择了另一种样式,保存对话框窗口似乎也使用默认的窗口样式.

编辑:我有Windows 10专业版.使用Delphi 10.1 Berlin编译为win32的源代码.替换消息框部分隐藏.仅显示左上方的小部分,请参见图.

替换消息框部分隐藏. 仅显示左上方的小部分.

这里用XE8 win32编译:

在此输入图像描述

PS.我使用默认的100%比例因子.

使用win64(Delphi 10.1 Berlin)编译似乎没问题:

在此输入图像描述

因此,编译为win32对我来说不起作用,但64位会.有线索吗?

编辑:尝试使用"GetSaveFileName(OFN)"也不适合我在win32(胜利64是好的):

在此输入图像描述

delphi vcl-styles delphi-10.1-berlin

8
推荐指数
1
解决办法
584
查看次数