IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Rotation d'un texte

19/05/2001

Par Maxence Delannoy

Windows

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


Figure 1 - Le résultat obtenu.

Linux

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


Figure 2 - Le résultat obtenu.

Précédent Retour à la table des matières Suivant