![]() |
![]() |
![]() |
|
![]() |
|
Zend Server Community Edition v5.0 CE
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
Google : le maître des noms de domaines
La nouvelle version de GMail en images !
Barème de rémunération pour les disques durs multimédias
Comparer strings sans tenir compte des accents
Drag & Drop à partir d'une fenêtre Windows
SMTPCLIENT et SMTPMESS : Envoyer des mails
+11 visiteurs en ligne
Auteur : Thwilliam
Catégorie : Les Bases
Niveau : Débutant
Déposé le : 25 Avril 2010 à 12h41
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.
Â
Â
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; |
Comparer strings sans tenir compte des accents
Drag & Drop à partir d'une fenêtre Windows
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