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

Visual C++ Discussion :

Imprimer des sauts de ligne en VC++6


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut Imprimer des sauts de ligne en VC++6
    Bonjour,

    J'ai suivi le tutoriel de developpez.com pour imprimer, mais j'ai quand même quelques petits soucis:
    Si je laisse la fonte par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CGdiObject* pOldFont = dcPrinter.SelectStockObject(SYSTEM_FONT);
    le texte que j'imprime (sur une IBM Infoprint 21) sont minuscules.
    Si j'utilise la fonte "DEVICE_DEFAULT_FONT" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CGdiObject* pOldFont = dcPrinter.SelectStockObject(DEVICE_DEFAULT_FONT);
    la taille des caractères est correcte, mais les lignes sont écrasées (une sur l'autre) alors que je fais des sauts de ligne avec \r\n :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dcPrinter.TextOut(50, 50, (const _TCHAR *) "Mon texte\r\nsur deux lignes", 28 );
    Mon texte s'affiche bien sur deux lignes, mais presque entièrement superposées, comme si l'interligne correspondait à celui de la fonte initiale.

    Quelqu'un aurait-il une explication/un remède ?

    Merci

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Essaie peut-être DrawText() au lieu de TextOut()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut
    Merci pour le conseil, mais je débute totalement en utilisateur de l'API Windows, et je ne trouve pas d'exemple d'utilisation de DrawText().
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    RECT Rect;
    Rect.left = 0;
    Rect.top = 0;
    Rect.right = dcPrinter.GetDeviceCaps(HORZRES);
    Rect.bottom = dcPrinter.GetDeviceCaps(VERTRES);
     
    dcPrinter.DrawText( "Mon texte\r\nsur deux lignes", 28, &Rect, DT_CALCRECT | DT_WORDBREAK | DT_EXPANDTABS);
    ... me donne une page vierge. Où est l'erreur ?

    Merci !

  4. #4
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    bonjour
    essaye d'abord ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    RECT Rect;
    Rect.left = 0;
    Rect.top = 0;
    Rect.right = dcPrinter.GetDeviceCaps(HORZSIZE);
    Rect.bottom = dcPrinter.GetDeviceCaps(VERTSIZE);
    dcPrinter.DrawText( "Mon texte\r\nsur deux lignes", 28, CRect(0,0,200,200), DT_LEFT );

  5. #5
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut
    Il y a une très nette amélioration : La sortie sur l'imprimante est la suivante :
    Mon
    sur


  6. #6
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    Maintennat augmente le x en remplaçant par CRect(0,0,600,200);

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Et si tu passes Rect au lieu d'un CRect de 200*200 ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut
    Alors là !

    En écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CRect Rect(0,0,dcPrinter.GetDeviceCaps(HORZRES),dcPrinter.GetDeviceCaps(VERTRES));
     
    dcPrinter.DrawText( "Mon texte\r\nsur deux lignes", 28, &Rect, DT_LEFT);
    J'ai exactement ce que j'attendais !

    Merci (mais j'aimerais bien comprendre la différence quand même)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [php] Affichage des sauts de ligne </br>
    Par Flushovsky dans le forum Langage
    Réponses: 3
    Dernier message: 21/12/2005, 15h51
  2. Réponses: 13
    Dernier message: 03/12/2005, 17h09
  3. [MySQL] Formulaire php + bdd = perte des sauts de ligne html ?
    Par sunshine33 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 03/10/2005, 11h19
  4. insérer des sauts de lignes en fonction du navigateur
    Par remi59 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/08/2005, 19h15
  5. remplacer des sauts de ligne par '\n'
    Par Miksimus dans le forum Général Python
    Réponses: 5
    Dernier message: 18/07/2005, 10h01

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