Escrever WideString em Canvas

Delphi

09/09/2005

Olá!

Existe alguma forma de escrever uma WideString em um Canvas. Exemplo: Image1.Picture.Bitmap.Canvas.TextOut(8,8,Texto);

Sendo que Texto seria uma variável WideString. Na verdade o que eu estou tentando fazer é transformar um texto WideString em imagem. Existe alguma outra forma de fazer isso?

Até!


Delphi32

Delphi32

Curtidas 0

Respostas

Massuda

Massuda

09/09/2005

Acho que poucas funções da VCL estão prontas para lidar com Unicode (talvez nenhuma).

No caso, você não pode usar TCanvas.TextOut porque esse método assume que irá escrever uma string normal (ANSI).

Acho que a alternativa é usar as rotinas de API do Windows para Unicode. Por exemplo, para escrever num canvas, faça algo assim...
var
  S: WideString;
  R: TRect;
  Flags: UINT;
....
  // veja a Ajuda do Delphi para DrawText
  DrawTextW(Canvas.Handle, PWideChar(@S[1]), Length(S), R, Flags);
...
Note o ´W´ no final do nome da função... várias funções da API do Windows que usam strings vem em duas versões, uma para strings ANSI (e que são normalmente chamadas pelo Delphi) e outra para strings Unicode (tem o mesmo nome da versão ANSI, só que tem o ´W´ no final do nome).


GOSTEI 0
Delphi32

Delphi32

09/09/2005

Massuda, seu código funcionou direitinho, mas só pra ficar registrado aqui caso outras pessoas precisem da mesma coisa, logo depois que postei o tópico aqui eu fui dar uma vasculhada pela net e achei na Code Central uma unit que implementa a classe TWideCanvas. Nessa unit tem inclusive rotinas para escrever WideStrings em um TCanvas. Segue a URL:

[url]http://cc.borland.com/Item.aspx?id=17762[/url]

Valeu pela ajuda! Até!


GOSTEI 0
POSTAR