pelly1308
Messages postés13Date d'inscriptionjeudi 18 décembre 2003StatutMembreDernière intervention 5 septembre 2005
-
10 mai 2004 à 16:21
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 2009
-
11 mai 2004 à 14:43
Bonjour tout le monde.
J'ai un problème avec les labels:
Je veux un label de taille fixe, j'ai donc mis l'option AutoSize à false, et dans mon programme, je change la fonte du texte. Je voudrais que le texte soit centré en hauteur (j'ai mis l'option Layout à tlCenter) mais quand la taille est trop grande, une bande blanche (ou plutôt transparente) apparait dans le bas du label. Je ne comprends absolument pas pourquoi. Et donc, quand la fonte est très grande, aucune partie du texte n'est visible.
Si quelqu'un sait réparer ça, où du moins pourquoi cela se produit, merci d'avance.
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 10 mai 2004 à 17:51
Salut,
Ca vient de la façon dont est calculé le rectangle où sera écrit le texte du Caption du Label. Regarde la fonction Paint de TCustomLabel (fichier source StdCtrls.pas)
begin
with Canvas do
begin
if not Transparent then
begin
Brush.Color := Self.Color;
Brush.Style := bsSolid;
FillRect(ClientRect);
end;
Brush.Style := bsClear;
Rect := ClientRect;
{ DoDrawText takes care of BiDi alignments }
DrawStyle := DT_EXPANDTABS or WordWraps[FWordWrap] or Alignments[FAlignment];
{ Calculate vertical layout }
if FLayout <> tlTop then
begin
CalcRect := Rect;
DoDrawText(CalcRect, DrawStyle or DT_CALCRECT);
if FLayout = tlBottom then OffsetRect(Rect, 0, Height - CalcRect.Bottom)
else OffsetRect(Rect, 0, (Height - CalcRect.Bottom) div 2);
if Rect.Bottom < Height then Rect.Bottom := Height;
end;
DoDrawText(Rect, DrawStyle);
end;
end;
En gros, la fonction OffsetRect, lorsque CalcRect.Bottom (hauteur nécessaire) est supérieur à Height (Hauteur du Label) décale le rectangle de tracage (Rect) vers le haut : si il décale de 10 points, il y aura 10 lignes vierges en bas du contrôle.
J'ai donc ajouté la ligne
if Rect.Bottom < Height then Rect.Bottom := Height;
après l'appel à OffsetRect pour corriger le truc. Ca n'a pas l'air de poser d'autre problème ...
Fais tout de même gaffe, si tu modifie le source fais le dans une copie locale dans un premier temps
pelly1308
Messages postés13Date d'inscriptionjeudi 18 décembre 2003StatutMembreDernière intervention 5 septembre 2005 11 mai 2004 à 12:37
Merci, mais finalement, je vais faire sans, parce que trafficoter dans les composants, c'est pas super apprécié là où je fais mon stage (mon responsable de stage a dit que c'était pas grave si ça faisait une ligne blanche, on ferait avec!).
Merci quand même.
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 11 mai 2004 à 14:43
Effectivement,
Tu peux aussi créer ton Label en prévoyant un peu plus de hauteur, soit la valeur absolue de la propriété Height de la plus grande fonte que tu utilises !