19/05/2001
Par Maxence Delannoy
WindowsPour dessiner un texte incliné, il faut créer une nouvelle police de caractères. Cette technique ne fonctionne qu'avec les polices True Type. Exemple : Insérez le code suivant dans le gestionnaire de l'événement OnPaint d'une fiche. N'oubliez pas de choisir une police TrueType (comme Arial par exemple) comme police pour votre fiche. procedure TForm1.FormPaint(Sender: TObject);
const
TEXTE = 'Texte à 45°';
var
FontInfo: TLogFontA;
PoliceDeDepart, PoliceInclinee: HFont;
begin
{ On doit d'abord copier les attributs de la police courante à l'aide de la
fonction GetObject }
if GetObject(Canvas.Font.Handle, SizeOf(FontInfo), @FontInfo) <> 0 then
begin
{ On indique l'angle désiré (en dixième de degré dans le sens
trigonométrique)}
FontInfo.lfEscapement := 450;
FontInfo.lfOrientation := 450;
{ On crée la nouvelle police }
PoliceInclinee := CreateFontIndirect(FontInfo);
try
{ On sélectionne cette nouvelle police tout en sauvegardant la police de
départ }
PoliceDeDepart := SelectObject(Canvas.Handle, PoliceInclinee);
{ On dessine notre texte au centre de la fiche }
Canvas.TextOut((ClientWidth - Canvas.TextWidth(TEXTE)) div 2,
(ClientHeight + Canvas.TextHeight(TEXTE)) div 2, TEXTE);
{ On restaure la police originale }
SelectObject(Canvas.Handle, PoliceDeDepart);
finally
{ On détruit la police inclinée }
DeleteObject(PoliceInclinee);
end;
end;
end;
LinuxAvec Qt, c'est plus simple. Il suffit d'appeler la fonction QPainter_rotate pour tourner le canevas d'un certain angle. Exemple :
uses
Qt;
{$R *.xfm}
procedure TForm1.FormPaint(Sender: TObject);
const
TEXTE = 'Texte à 45°';
begin
{ Les appels du type QPainter_ doivent toujours être encadrés par une
séquence Canvas.Start/Canvas.Stop }
Canvas.Start;
try
{ On déplace l'origine du canevas au centre de la fiche }
QPainter_translate(Canvas.Handle, ClientWidth div 2, ClientHeight div 2);
{ On tourne le canevas de 45° (sens horaire) }
QPainter_rotate(Canvas.Handle, 45);
{ On dessine notre texte }
Canvas.TextOut(Canvas.TextWidth(TEXTE) div -2,
Canvas.TextHeight(TEXTE) div -2, TEXTE);
finally
Canvas.Stop;
end;
end;
|