Problème avec les TLabel

pelly1308 Messages postés 13 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 5 septembre 2005 - 10 mai 2004 à 16:21
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Derniè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.

Mélanie

3 réponses

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
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

Kenavo

Code, Code, Codec !
0
pelly1308 Messages postés 13 Date d'inscription jeudi 18 décembre 2003 Statut Membre Derniè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.
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
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 !

Kenavo

Code, Code, Codec !
0
Rejoignez-nous