7 Stimmen

Wie zeichne ich Unicode-Text?

Wie zeichnet man Unicode-Text auf TCustomControl? Gibt es andere Möglichkeiten, dies ohne die Canvas zu tun?

11voto

Andreas Rejbrand Punkte 100651

Ja, du hast absolut recht. Trotzdem würde ich dir empfehlen, auf Delphi 2009 oder eine spätere Version umzusteigen, in der die VCL eine vollständige Unicode-Unterstützung bietet und alles viel einfacher ist.

Auf jeden Fall kannst du das tun

procedure TMyControl.Paint;
var
  S: WideString;
  r: TRect;
begin
  inherited;
  r := ClientRect;
  S := 'Dies ist das Integralzeichen: '#$222b;
  DrawTextW(Canvas.Handle, PWideChar(S), length(S), r, DT_SINGLELINE or
    DT_CENTER or DT_VCENTER or DT_END_ELLIPSIS);
end;

in alten Versionen von Delphi (denke ich. Der Code kompiliert in Delphi 7 auf meiner virtuellen Windows 95 Maschine, aber ich sehe keinen Text. Das liegt daran, dass Windows 95 zu alt ist, denke ich.)

Update

Wenn du sehr alte Betriebssysteme wie Windows 95 und Windows 98 unterstützen möchtest, musst du TextOutW anstelle von DrawTextW verwenden, da letzteres nicht implementiert ist (Quelle). TextOut ist weniger leistungsfähig als DrawText, daher musst du die Position manuell berechnen, wenn du beispielsweise den Text in einem Rechteck zentrieren möchtest.

procedure TMyControl.Paint;
var
  S: WideString;
begin
  inherited;
  S := 'Dies ist das Integralzeichen: '#$222b;
  TextOutW(Canvas.Handle, 0, 0, PWideChar(S), length(S));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X