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;
|