如果您有一个非主题的非Unicode VCL应用程序,其TEdit为“TestEdit”,并将TestEdit.Font.Charset设置为RUSSIAN_CHARSET,则TestEdit将显示西里尔字符。但是,如果您将应用程序切换为使用主题,则此功能不再适用。请尝试以下方法来查看:
我的问题是:有没有办法让应用程序尊重charset即使主题? (不切换到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.
答案 0 :(得分:1)
不是直接答案,但您可以使用TMS Unicode Controls为编辑添加Unicode支持,并保留原始应用程序的其余部分。几年前我们做了这个以获得单个组合框的支持,并且开销也不错。
TMS包基于的原始TNT Unicode库可用here,但TMS并不昂贵,并且自购买以来它们已经做了很多改进。
答案 1 :(得分:0)
这似乎是Windows编辑控件的一个问题:
在我们升级到最近(读取“启用Unicode”)Delphi之前,我们的一些客户必须没有主题。