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

Bases de données Delphi Discussion :

problème avec DrawText


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Par défaut problème avec DrawText
    Bonsoir,

    Je viens de passer presqu'une heure à fouiner à droite et à gauche mais en vain !
    Je voulais calculer la hauteur d'un libellé dans un rapport QuickReport à l'aide de la fonction API DrawText de Windows pour adapter le quadrillage. Voici le code :

    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
     
    var  
    TextRect : TREct;
    h : Integer;
    s : string;
    begin
      Lib1.caption := 'Licence L.M.D Sciences Economiques, de Gestion et Commerciales';
      s := Lib1.caption;
      Canvas.Font := lib1.Font;
      SetRect(TextRect, 0, 0, lib1.Width, 0);
      h := DrawText(Canvas.Handle, PChar(s), Length(s) , TextRect,
                    DT_EXPANDTABS or DT_CALCRECT or DT_WORDBREAK or
                    DrawTextBiDiModeFlagsReadingOnly);
     
    //Lib1 : TQRLabel sur le rapport
    Resultat : h = 32;

    Sur le rapport le libellé se présente comme suit :

    Licence L.M.D Sciences
    Economiques, de Gestion et
    Commerciales'

    La hauteur pour ces trois lignes est de 48 au de 32.

    Je ne sais pas ou est l'anomalie. Merci.

    XP, FB2.0, D7, QR362

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Canvas c'est bien celui du QuickReport ?
    Pas celui d'une TForm ?

    Pense qu'un QuickReport si l'on souhaite imprimer c'est 300 ou 600dpi, alors que la prévisualisation sera en 72 à 90dpi selon l'écran !
    48 ou 32, ça doit être fonte en taille 10 sur ton Ecran, rien à voir avec la taille réelle sur papier !

    Ensuite, il faut parfois forcer la fonte comme tu l'as fait
    J'ai résolu ce problème pour un collègue comme toi en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonControl.Canvas.Font := MonControl.Font;
    Son Control était en MS sans Serif mais la Font du Canvas était en Tahoma, ou inversement ... truc classique du Passage à XP qui utilise Tahoma par défaut !

    Es-tu sûr du WordWrap et de Width, c'est comme si il n'avait compté que 2 lignes au lieu de 3 !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Par défaut
    Merci pour la réponse.

    La fonte est Arial avec une taille de 10. Quand l'objet Font est affecté c'est le tout qui est affecté. C'est à dire le jeux de caractères, le nom de la fonte, sa taille ainsi que son style.
    J'ai essayé avec Assign, le résultat est le même : 32.

    WordWrap est à true même s'il n'a rien à voir avec DarwText. Le width, lui, est affecté avec ' length(s) '
    Canvas c'est bien celui du QuickReport ?
    QuickReport n'a pas de propriété canvas.

    Bizarre !

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Lorsque je parlais de WordWrap je parlais de DT_WORDBREAK passé à DrawText qui fait justement le même chose !
    Donc le Width permet de savoir quand DT_WORDBREAK va couper, à tous les cas, tu as passé un Width trop grand et ton texte tient sur 2 lignes !

    Citation Envoyé par akli_agha Voir le message
    QuickReport n'a pas de propriété canvas.
    Ah, oui, effectivement, j'ai confondu avec l'utilisation direct tu TPrinter.Canvas où j'avais du jouer pour faire un listing de code barre à la mano

    Mais alors pourquoi vouloir faire ce genre de calcul ?
    TQuickRep et son TQRLabel avec ses propriétés Alignment, AutoStretch et WordWrap ne sont pas suffisant ?

    En plus tout ça c'est du calcul pour l'aperçu, imprime le sur papier, je me demande si il ne va pas paniquer !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Par défaut
    J'ai besoin de connaitre la hauteur du TQRlabel por centrer les autres informations sur la ligne. Le TQRLabel contiendra des infos variables, pas seulement ce que j'ai donné dans le message.
    Voici un aperçu :

    Licence L.M.D Sciences
    1 JEAN CHRISTOPHER 24/11/1990 à Marseille Economiques, de Gestion et
    Commerciales

    2 JEAN MICHEL 14/10/1991 à Paris Licence L.M.D Droit
    3 PIERRE CENTRO 30/04/1989 à Lyons Licence L.M.D Lettre et
    Langue
    Je ne peux pas centrer si je n'ai pas la hauteur.
    En outre je voudrais comprendre pourquoi je n'ai pas la hauteur attendue, autrement dit, pourquoi la 3éme ligne n'est pas prise ne compte dans le calcul. Merci.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    sans trop chercher , juste une piste :
    TQRLabel est un descendant de TQRCustomLabel ,
    ce dernier a des méthodes PrintToCanvas , PaintToCanvas et même une propriété FontSize
    il doit y avoir matière a creuser .

    une suggestion aller regarder les sources de QRLabled http://trtm.googlecode.com/svn/trunk...p/qrlabled.pas

    PS : QRPrinter a bien un canvas

Discussions similaires

  1. Problème avec drawText
    Par DMWeb dans le forum Qt
    Réponses: 5
    Dernier message: 25/01/2008, 14h19
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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