【发布时间】:2010-11-02 19:13:39
【问题描述】:
如果您有一个带有 TEdit“TestEdit”的非主题、非 Unicode VCL 应用程序并将 TestEdit.Font.Charset 设置为 RUSSIAN_CHARSET TestEdit 会显示西里尔字符。但是,如果您将应用程序切换为使用主题,这将不再起作用。请尝试以下操作来查看:
- 创建一个新的 VCL 应用程序。
- 关闭默认 Unit1 而不保存。
- 将项目源代码(Project1.pas)替换为本文底部的代码,另存为 CharsetTest.pas。
- 在项目选项中取消选中运行时主题。
- 运行程序,单击单选按钮,观察编辑框的字体。
- 现在检查项目选项中的运行时主题或将 XPMan 添加到 uses 子句。
- 重复第 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.
【问题讨论】:
-
字符集 so DOS/Windows 3.1/Windows 9x...
-
我知道。但是该应用程序可以运行,我们目前不想进行 Unicode 步骤。
标签: delphi themes character-encoding vcl visual-styles