Mostrar el texto en la orientación que queramos en un TCanvas
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj4BKE-HhIvyDUf3Jsnp-AO1BQrO66UhN5Hpgv5uqzyI0E3kFwQM2BKdpxPENvKALly3atToV7isL6EyleYp2O0o6gnBPLW5DWZP0Otvvie99bn3xtmZ_GwnlK3wGAQUhpUXeIElhoL_IU/s400/images.jpeg)
función:
procedure DrawTextOrientation(canvas: TCanvas; position: TPoint; epsilon: integer; font: TFont; text: string);
function iif(condition: boolean; resultTrue: integer; resultFalse: integer): integer;
begin
result := resultFalse;
if Condition then result := resultTrue
end;
var
newFont, FontSelected: integer;
begin
if text = '' then
exit;
SetBkMode(canvas.handle, transparent);
newFont := CreateFont(
-font.Size,
0,
epsilon * 10,
0,
iif(fsBold in font.Style, FW_BOLD, FW_NORMAL),
iif(fsItalic in font.Style, 1, 0),
iif(fsUnderline in font.Style, 1, 0),
iif(fsStrikeOut in font.Style, 1, 0),
ANSI_CHARSET,
OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,
PROOF_QUALITY,
FF_DONTCARE,
PChar(font.Name));
FontSelected := SelectObject(canvas.handle, newFont);
TextOut(canvas.handle, position.x, position.y, PChar(text), length(text));
SelectObject(canvas.handle, FontSelected);
DeleteObject(newFont);
end;
funcionamiento del método:
procedure TForm3.Button1Click(Sender: TObject);
var
ft: TFont;
begin
try
ft := TFont.Create;
ft.Name := 'Arial';
ft.Size := 12;
ft.Style := ft.Style + [fsBold, fsItalic, fsUnderline, fsStrikeOut];
DrawTextOrientation(image1.canvas, Point(40, 40), 0, ft, 'This is a vertical text');
ft.Style := ft.Style - [fsBold, fsItalic, fsUnderline, fsStrikeOut];
DrawTextOrientation(image1.canvas, Point(90, 110), 0, ft, 'test');
DrawTextOrientation(image1.canvas, Point(80, 100), 45, ft, 'test');
DrawTextOrientation(image1.canvas, Point(75, 95), 90, ft, 'test');
DrawTextOrientation(image1.canvas, Point(65, 110), 135, ft, 'test');
DrawTextOrientation(image1.canvas, Point(70, 125), 180, ft, 'test');
DrawTextOrientation(image1.canvas, Point(80, 135), 235, ft, 'test');
DrawTextOrientation(image1.canvas, Point(90, 135), 270, ft, 'test');
DrawTextOrientation(image1.canvas, Point(97, 125), 315, ft, 'test');
finally
FreeAndNil(ft);
end;
end;
Aquí os dejo el resultado de la llamada al ejemplo:
Programación en Windows.
Vertical TitleBar.
Comments
Post a Comment