IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Textwidth du Canvas


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 18
    Points
    18
    Par défaut Textwidth du Canvas
    Salut,

    je voudrais connaitre la largeur d'un texte. Pour cela j'utilise le textwidth du TCanvas qui renvoie en pixels la largeur d'un texte. Mais quand j'affiche mon texte dans une image la valeur que j'obtient ne correspond pas au nombre de pixels que j'ai sur l'image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       Im := TBitmap.Create;
       Im.Width := 2000;   Im.Height := 2000;
       Im.Canvas.Font.Size := 20;
       Im.Canvas.TextOut(20,20,ma chaine);
       decalXCanvas := Im.Canvas.TextWidth(tempstr);
       FreeAndNil(Im);
    Est-ce que quelqu'un saurait pourquoi?
    Merci

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Avec une recherche sur le forum tu aurais trouvé >>> ça <<<
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Salut,

    J'ai regardé mais j'ai toujours un résultat faux, même en utilisant le code qui est donné.
    En regardant le code, il ne fait que faire un textwidth sur une chaine où il enlève tout ce qu'il y a après le retour chariot. Ducoup le pb reste entier...

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Tu n'as pas regardé la bonne source, malatar t'avais mis sur la voie , jette un oeil sur mes posts... (Comme quoi il faut tout lire ).

    Allez je te le réécris et tu me dira si ça te convient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function TextSize(Phrase:string;police:TFont=nil):TPoint;
    var
      DC: HDC;
      X: Integer;
      Rect: TRect;
      C : TBitmap;
    begin
      C := TBitmap.create;
    try
      if police <> nil then  C.canvas.Font := police;
     
        Rect.Left := 0;
        Rect.Top:=0;
        Rect.Right:=0;
        Rect.Bottom:=0;
        DC := GetDC(0);
        C.Canvas.Handle := DC;
        DrawText(C.Canvas.Handle, PChar(Phrase), Length(Phrase), Rect, (DT_EXPANDTABS or DT_CALCRECT));
        C.Canvas.Handle := 0;
        ReleaseDC(0, DC);
        result.X:=Rect.Right;
        result.Y:=Rect.Bottom;
    finally
      C.Free;
    end;
    end;

    Et en plus, je me cite afin que tu comprennes pourquoi TextWidth ne marche pas dans ton Image :
    Lis bien les posts précédents : TextHeight & TextWidth ne donnent pas la taille éxacte au pixel près. Les valeurs qui sont renvoyées par ces fonctions ne sont qu'approximatives sauf si tu utilises dans ton canvas une police de caractères à largeur fixe.
    Si avec ça tu ne t'en sort pas...
    Bidouilleuse Delphi

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Merci pour vos réponses

    mais décidément je dois pas être doué

    j'ai
    En fait je pense que ça marche, quand il dessine le texte dans l'image à partir du point (0,0) le texte est décalé en X et et en Y par rapport (0,0) donc la différence doit venir de là.

    Merci

Discussions similaires

  1. Timage et Canvas??
    Par vanack dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/04/2007, 11h38
  2. Ombres portées sur un canvas
    Par pifou02 dans le forum Langage
    Réponses: 2
    Dernier message: 23/11/2003, 19h03
  3. Comment mettre le curseur d'un Memo sur le Canvas d'une Form ?
    Par julie20 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/08/2003, 13h24
  4. [Canvas] Listbox, couleur et multiselect
    Par rbag dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/09/2002, 13h02
  5. Réponses: 2
    Dernier message: 17/05/2002, 20h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo