Wie zeichnet man Unicode-Text auf TCustomControl? Gibt es andere Möglichkeiten, dies ohne die Canvas zu tun?
Antwort
Zu viele Anzeigen?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));