Как нарисовать текст Unicode? - PullRequest
7 голосов
/ 30 апреля 2011

Как нарисовать текст Unicode на TCustomControl? Есть ли другие варианты сделать это без Canvas?

1 Ответ

11 голосов
/ 30 апреля 2011

Да, вы правы на месте.Тем не менее, я бы порекомендовал вам перейти на Delphi 2009 или более позднюю версию, в которой VCL имеет полную поддержку Unicode и все намного проще.

В любом случае, вы можете сделать

procedure TMyControl.Paint;
var
  S: WideString;
  r: TRect;
begin
  inherited;
  r := ClientRect;
  S := 'This is the integral sign: '#$222b;
  DrawTextW(Canvas.Handle, PWideChar(S), length(S), r, DT_SINGLELINE or
    DT_CENTER or DT_VCENTER or DT_END_ELLIPSIS);
end;

в старых версияхDelphi (я думаю. Код компилируется в Delphi 7 на моей виртуальной машине с Windows 95, но я не вижу текста. Это потому, что Windows 95 слишком старая, я думаю.)

Обновление

Если вы хотите поддерживать очень старые операционные системы, такие как Windows 95 и Windows 98, вам нужно использовать TextOutW вместо DrawTextW, поскольку последняя не реализована (источник).TextOut менее мощный, чем DrawText, поэтому вам нужно вычислить позицию вручную, если вы хотите, например, центрировать текст внутри прямоугольника.

procedure TMyControl.Paint;
var
  S: WideString;
begin
  inherited;
  S := 'This is the integral sign: '#$222b;
  TextOutW(Canvas.Handle, 0, 0, PWideChar(S), length(S));
end;
...