1

如果您有一个带有 TEdit“TestEdit”的非主题、非 Unicode VCL 应用程序并将 TestEdit.Font.Charset 设置为 RUSSIAN_CHARSET TestEdit 将显示西里尔字符。但是,如果您将应用程序切换为使用主题,这将不再起作用。请尝试以下操作来查看:

  1. 创建一个新的 VCL 应用程序。
  2. 关闭默认 Unit1 而不保存。
  3. 将项目源代码 (Project1.pas) 替换为本文底部的代码,并另存为 CharsetTest.pas。
  4. 在项目选项中取消选中运行时主题。
  5. 运行程序,单击单选按钮,观察编辑框的字体。
  6. 现在检查项目选项中的运行时主题或将 XPMan 添加到使用子句中。
  7. 重复步骤 5。

我的问题是:有没有办法让应用程序即使在主题时也能尊重字符集?(无需切换到 Unicode。)

program CharsetTest;

uses
  Windows,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls,
  ExtCtrls;

{$R *.res}

type
  TForm1 = class(TForm)
  private
    CharsetRadioGroup: TRadioGroup;
    TestEdit: TEdit;
    procedure CharsetRadioGroupClick(Sender: TObject);
  public
    constructor Create(AOwner: TComponent); override;
  end;

constructor TForm1.Create(AOwner: TComponent);
begin
  inherited CreateNew(AOwner);

  BorderWidth := 8;
  Caption := 'Charset Test';
  ClientHeight := 180;
  ClientWidth := 250;

  CharsetRadioGroup := TRadioGroup.Create(Self);
  CharsetRadioGroup.Name := 'CharsetRadioGroup';
  CharsetRadioGroup.Height := 105;
  CharsetRadioGroup.Align := alTop;
  CharsetRadioGroup.Caption := 'Charset';
  CharsetRadioGroup.Parent := Self;
  CharsetRadioGroup.Items.Add('Default');
  CharsetRadioGroup.Items.Add('Russian');
  CharsetRadioGroup.Items.Add('Greek');
  CharsetRadioGroup.OnClick := CharsetRadioGroupClick;

  TestEdit := TEdit.Create(Self);
  TestEdit.Name := 'TestEdit';
  TestEdit.Align := alBottom;
  TestEdit.Font.Size := 20;
  TestEdit.Font.Name := 'Courier New';
  TestEdit.Text := 'äöüÄÖÜß';
  TestEdit.Parent := Self;

  CharsetRadioGroup.ItemIndex := 1;
end;

procedure TForm1.CharsetRadioGroupClick(Sender: TObject);
begin
  case CharsetRadioGroup.ItemIndex of
    0:
      TestEdit.Font.Charset := DEFAULT_CHARSET;
    1:
      TestEdit.Font.Charset := RUSSIAN_CHARSET;
    2:
      TestEdit.Font.Charset := GREEK_CHARSET;
  end;
end;

var
  Form1: TForm1;

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
4

2 回答 2

1

不是直接的答案,但您可以使用TMS Unicode 控件为编辑添加 Unicode 支持,而让应用程序的其余部分保持原样。几年前我们这样做是为了在单个组合框中获得支持,而且开销还不错。

TMS 包所基于的原始 TNT Unicode 库可在此处获得,但 TMS 并不昂贵,自从他们购买它以来,他们已经进行了很多改进。

于 2010-11-02T21:26:18.167 回答
0

这似乎是 Windows 编辑控件的问题:

在我们升级到最近的(阅读“启用 Unicode”)Delphi 之前,我们的一些客户将不得不在没有主题的情况下生活。

于 2011-08-10T13:45:59.047 回答