Free Tools CodeS-SourceS.com
Programmez!
PCInfo Web


Sélection logiciels

CCleaner v2.21

Zend Server Community Edition v5.0 CE

Google Chrome v7.0

Delphi 6 v6.0 Perso

Web to Date v8.0


En bref

29 Avr 2011 L'iPhone 4 blanc désormais en vente

06 Avr 2011 Des développeurs font marcher GMail Motion, le poisson d'avril de Google

25 Fév 2011 Mac OS X Lion : le roi de la jungle pointe le bout de son nez

09 Fév 2011 OVH lance sa no!Box : l'offre Simple Play la plus simple du marché

01 Fév 2011 Twitter et Google s'unissent pour parer à la censure égyptienne


Les derniers dossiers


Les ressources Delphi et C/C++

Music Pro

Dessin de texte sur un canvas

Comparer strings sans tenir compte des accents

Drag & Drop à partir d'une fenêtre Windows

SMTPCLIENT et SMTPMESS : Envoyer des mails


Membres en ligne

+11 visiteurs en ligne


Nos partenaires

Espacerezo

KilaSoft



Vous êtes ici : AccueilDelphiSnippets › Dessin de texte sur un canvas

Dessin de texte sur un canvas

Informations sur la source :

Auteur : Thwilliam

Catégorie : Les Bases

Niveau : Débutant

Déposé le : 25 Avril 2010 à 12h41

0 commentaire sur ce snippet


Description

La fonction Windows DRAWTEXT peut remplacer avantageusement les procédures TextOut et TextRect pour dessiner du texte. Pour ceux qui ne la connaissent pas, elle permet très facilement d'aligner horizontalement et verticalement du texte, mais surtout elle permet de dessiner du texte multi-lignes.

Le problème est qu'elle ne gère pas l'alignement vertical dans un dessin multi-lignes.

Voici donc une procedure vous facilitant la tâche. Elle peut servir également à montrer aux débutants le fonctionnement de DrawText.

Exemple d'utilisation de PaintText : dessin multi-lignes sur le Canvas d'un PaintBox de la variable MonTexte alignée au centre de façon horizontale et verticale, avec une marge gauche et droite de 10 pixels.

with PaintBox1 do
begin
Canvas.Font.Name:= 'Arial';
Canvas.Font.Size:= 10;
PaintText(Canvas, MonTexte, Rect(10, 0, Width-10, Height), vaCenter, taCenter, true);
end;

 

Le paramètre facultatif "OtherFlags" permet d'ajouter principalement :

DT_END_ELLIPSIS : en mode simple ligne, ajout de ... si le texte entier ne peut être contenu dans le rectangle.

Consultez l'aide sur DrawText (inclue dans Delphi ou sur msdn) pour d'autres flags.

 

 


Code Source

1
23
45
67
89
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
type
   TVertAlignment = (vaTop, vaCenter, vaBottom); 
// ... 
procedure PaintText(Canvas: TCanvas; const AText: string; ARect: TRect; AVertAlignment: TVertAlignment; AHorzAlignment: TAlignment; WordBreak: boolean; OtherFlags: integer = -1);var
  Flags: integer;  R: TRect;
begin  if AText  = '' then Exit;
  Canvas.Brush.Style:= bsclear;  //écrit en transparent  if not WordBreak then
  begin     Flags:= DT_SINGLELINE;
     case AVertAlignment of       vaTop: Flags:= Flags or DT_TOP;
       vaBottom: Flags:= Flags or DT_BOTTOM;       vaCenter: Flags:= Flags or DT_VCENTER;
      end;  end
  else  begin
     Flags:= DT_WORDBREAK;     R:= Rect(ARect.Left, 0, ARect.Right, 0);
     DrawText(Canvas.Handle, PChar(AText), -1, R, DT_CALCRECT or DT_WORDBREAK);     case AVertAlignment of
           vaTop: ARect.Bottom:= ARect.Top + R.Bottom;       vaBottom : begin
                    ARect.Top:= ARect.Top + (ARect.Bottom - ARect.Top) - (R.Bottom - R.Top);                    ARect.Bottom:= ARect.Top + R.Bottom;
                  end;       vaCenter : begin
                    ARect.Top:= ARect.Top + ((ARect.Bottom - ARect.Top) - (R.Bottom - R.Top)) div 2;                    ARect.Bottom:= ARect.Top + R.Bottom;
                  end;     end;
  end;  if OtherFlags > -1 then Flags:= Flags or OtherFlags;
  case AHorzAlignment of    taLeftJustify : DrawText(Canvas.Handle, Pchar(AText), -1, ARect, Flags or DT_LEFT);
    taCenter      : DrawText(Canvas.Handle, Pchar(AText), -1, ARect, Flags or DT_CENTER);    taRightJustify: DrawText(Canvas.Handle, Pchar(AText), -1, ARect, Flags or DT_RIGHT);
  end;end;


Autres contributions de Thwilliam


Commentaires sur le snippet

Soyez le premier à commenter cette ressource !


Ajoutez votre commentaire & avis sur la ressource :

Vous n'êtes pas connecté !

Rejoignez dès maintenant la communauté en 3 clics et exprimez votre avis !

J'ai déjà un compte