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

C++Builder Discussion :

QReport, Imprimer un texte en vertical


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut QReport, Imprimer un texte en vertical
    Bonjour,

    L'intitulé de mon message n'est pas très clair. En fait, j'aimerai écrire sur ma feuille d'impression des infos en horizontale et d'autres infos en vertical (de haut en bas) : par exemple:
    et
    Mais comment faire vu que je n'ai pas trouvé d'option permettant de renverser le mode d'écriture d'un composant

  2. #2
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    Si cette écriture est faites avec un Tabel, insère \n entre chaque lettre, et mets tes lettres en majuscule.
    Genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    AnsiString Texte = Label1->Caption.UpperCase();
    for(int i=2;i<Texte.Length()+1;i++)
        Texte.Insert('\n',i++);
    Label1->Caption = Texte;

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut
    L'idée est bonne mais ce n'est pas un TLabel mais un composant de base de données QRDBText (composant QuickReport).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2002
    Messages : 28
    Par défaut
    Dans ce cas ... transfère le contenu du QRDbText dans un QRLabel .. ca devrait pouvoir se faire non ??

    PS : ce n'est peut etre pas la meilleure solution

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut
    mmm... Je débute avec QReport, je ne vois pas ou faire le transfert dont tu parles. Je comprends bien ce que tu veux dire mais comment affecter à chaque champs de ma table à laquelle est correspondant le DBLabel à QRLabel? Je ne vois pas trop en fait ou mettre le code.

    PS: tu as la foi d'être encore derriere ton pc à cette heure, je pensais être le seul (en fait chez moi il est 0h33, vu le décalage horaire)

  6. #6
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Totalement au pif, et sans tester ... (youpi!) ... en 'free-style' quoi :
    .dans l'évènement OnPrint du QRDBText:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void __fastcall TForm2::QRDBText1Print(TObject *sender, AnsiString &Value)
    {
    String S;
    S = Value.SubString(1, 1) + AnsiString("\n");
    for ( int i = 2; i < Value.Length() + 1; i ++ )
    {
            S = S + Value.SubString(i, 1) + AnsiString("\n");
    }
    Value = S;
    }
    Heu...on test ?

    @ +

  7. #7
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Il semble que ni QRDBText, ni QRLabel n'accepte l'indication de :
    pour le retour a la ligne...


  8. #8
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Peut être un début de solution ...
    L'idée fonctionnerais avec un QRMemo, et en utilisant l'évènement OnBeforePrint de la DetailBand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void __fastcall TForm8::DetailBand1BeforePrint(TQRCustomBand *Sender,
          bool &PrintBand)
    {
    String S;
    String Value = QRDBText1->DataSet->FieldByName(QRDBText1->DataField)->AsString.UpperCase();
    S = Value.SubString(1, 1) + AnsiString("\n");
    for ( int i = 2; i < Value.Length() + 1; i ++ )
    {
    S = S + Value.SubString(i, 1) + AnsiString("\n");
     
    }
    QRMemo1->Lines->Text = S;
    }
    Il faut donc effectivement transférer le texte dans un autre objet ( comme le suggérait Jordy16 ) et ajouter des retours a la ligne entre chaque lettre ( comme le suggérait BanditBoy ).
    A toi de voir, si tu peut 'masquer' ton QRDBText avec un QRMemo (avec un height a la bonne hauteur). Ca fait un peu 'bidouille' mais bon....

    Bon courage,
    @ +

  9. #9
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut
    J'écris bien en vertical, merci...

    En fait, en regardant le résultat, je me rend compte que je me suis un peu planté, puisque je dois en faire au texte une rotation de 90° sur la gauche. En fait, je dois imprimer deux types d'informations sur une petite fiche, les infos principales et le nom du client. Le hic est que la feuille est rangé en vertical dans un casier et le nom du client doit apparaître en haut de la feuille, du coup à l'endroit puisque seulement son nom va aparaître. Mais bon, je crois que c'est abusé de faire ça, je ne crois pas que c'est possible à moins de trouver une police particulière...

    Sinon je vais rester sur votre technique. Merchiche encore.


    Sunchaser:tu ne dois pas être très matinal enfin j'espère sinon quand est-ce que tu dors ?

  10. #10
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Si si,
    C'est bien possible.
    Tu as tout ca dans ce post. En fait, la solution est donnée dans la rubrique trucs et astuces. Tout est possible

  11. #11
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut
    ben ça alors... Oki sur le principe de fonctionnement ça marche, maintenant j'essaie d'adapter sur ma fiche mais j'ai un pb :

    Lors de l'appel de ma fonction, mon QRMemo est déplacé, et je ne vois pas pourquoi ces coordonnées Left et Top sont modifiés. Au cas ou voici mon 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
        AnsiString str2 = QRDBText7->DataSet->FieldByName(QRDBText7->DataField)->AsString;
        LOGFONT lgfont;
        QRMemo2->Font->Size = 8;
        QRMemo2->Font->Name = "Times New Roman";
     
        if(GetObject(QRMemo2->Font->Handle, sizeof(LOGFONT), &lgfont))
        {
            lgfont.lfHeight = 12;
            lgfont.lfEscapement = 900;
            lgfont.lfOrientation = 900;
            lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;
            QRMemo2->Font->Handle = CreateFontIndirect(&lgfont);
            SetGraphicsMode(QRMemo2->Handle, GM_ADVANCED);
            QRMemo2->Lines->Text= str2;
        }
    Autre pb que je n'arrive pas à corriger, la police est modifié, hors dans la struct LOGFONT je ne vois pas l'attribut correspondant à la police.

  12. #12
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    A mon avis, les trois problème (top, left et font) sont lié à la même erreur. Essaye d'identifier la ligne qui cause ce problème, et d'après moi, c'est une erreur de pointeur.
    Tu écris au delà d'un tableau ou qq chose dans le genre.

    Lance ton progamme en pas à pas, et met un point de suivi sur ces paramètres pour identifier le moment où elles sont changées.

  13. #13
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut
    J'ai essayé mais je n'ai pas réussi à identifier l'erreur. Par contre, si déplacé les composant afin qu'ils s'affichent à l'endroit voulu, ça passe bien. C'est un peu gore comme méthode mais bon

    En tout cas merci pour tes infos.

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

Discussions similaires

  1. imprimer un text vertical
    Par ckarim dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/07/2009, 13h53
  2. [VB.Net] Imprimer un texte
    Par DonF dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/01/2006, 18h55
  3. [Print]Comment imprimer le texte d'une Jframe???
    Par greg3105 dans le forum Général Java
    Réponses: 4
    Dernier message: 03/04/2005, 19h47
  4. VB6] imprimer le texte afficher dans une picturebox
    Par Persons dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/08/2004, 11h15
  5. Imprimer fichier texte
    Par Freeze dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/11/2003, 11h37

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