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 :

Quick Report et impression de données hors BDD


Sujet :

C++Builder

  1. #1
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut Quick Report et impression de données hors BDD
    Bonjour,

    J'ai besoin d'imprimer des données sous une forme pseudo tabulaire : j'ai par exemple une liste d'objets (ou structures, peut importe) qui contiennent plusieurs AnsiString ; ce que je veux c'est que ça s'imprime comme sur l'image ci-dessous :


    J'ai bien réussi en bidouillant à faire ce que je veux (les champs pouvant prendre plusieurs lignes sont dans des TRichEdit liés au composant équivalent de QR pour pouvoir compter les lignes et je rajoute des sauts de ligne pour que chaque colonne ait autant de ligne après avoir inséré le contenu d'un objet) mais dès que ça dépasse une page, j'ai la première colonne qui commence sur la page 1, la deuxième sur la page 2 (ou 3 ...), etc ... sauf pour la première ligne !


    Ce que j'aimerai faire c'est définir le contenu d'une bande (champ titre, champ description, champ niveau ...), puis rajouter une bande par instance d'objet à imprimer pour faire un code du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Etat->Detail->NewBand();
    Etat->Detail->ActiveBand->Champ1 = iterateur->champ1;
    Etat->Detail->ActiveBand->Champ2 = iterateur->champ2;
    Etat->Detail->ActiveBand->Champ3 = iterateur->champ3;
    Merci beaucoup pour votre aide

    P.S. : essayez d'être le plus précis possible car Quick Report et moi ç'est loin de ne faire qu'un

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 3
    Points : 7
    Points
    7
    Par défaut PEUT ETRE
    Peut etre faut il simplement changer les propriétés d'orientation de la page ou/et la taille des caractères

    @+

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    Non, le problème de décalage n'apparait que si cela doit faire plusieurs pages, cela n'a donc aucun rapport avec l'orientation de la page ou la taille de caractères !
    En fait j'utilise un QRRichEdit (ou un nom dans le genre) pour chaque colonne et si ma ligne n'est pas assez longue, il y a le retour à la ligne automatique (d'ou l'utilisation d'un TRichEdit de même taille que le composant imprimable pour pouvoir compter le nombre de lignes que ça m'a pris). Ensuite je ajoute une ligne vide dans chaque colonne jusqu'à ce que toutes les colonnes soient au même niveau. Le seul problème est que au moment ou le RichEdit est découpé sur deux pages (ou plus) il y a tout un décalage qui apparait pour les colonnes de droite !

    J'y comprend rien !

  4. #4
    GaL
    GaL est déconnecté
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    A mon avis pour resoudre ton probleme tu devrait mettre chaque ligne dans une bande enfant en mettant comme parent la bande qui se trouve juste au dessus.
    Tu devrait donc avoir autant de bande que de sorts et armes.

    Ensuite pas la peine de te casser la tete avec tes sauts de ligne et tes lignes vide met simplement la propriete AutoStretch et ton QRRichEdit a true, normallement tout devrait se redimmensionner comme tu le veux

  5. #5
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    Encore quelques questions :

    Si je fais une bande enfant pour chaque ligne, je dois recréer dynamiquement mes contrôles qui sont dedans (ce qui implique toute une structure de données pour tout se rapeller) ?

    Si je fais un code du genre ça peut le faire ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaBande->hasChild = true;
    *(MaBande->Child) = MaBandeModele;
    Et quand je voudrais effacer mon état, il faudra que je fasse un delette sur chaque composant et chaque bande enfant ou juste sur chaque bande enfant (qui se chargera des compos qui lui sont encrés) ou il suffit de mettre la propriété HasChild de chaque bande à false ?

    Je sais je fais le gros fainéant mais j'en ai marre de cet Etat

    Merci beaucoup à vous tous

  6. #6
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    bon ben j'ai trouvé un peu de temps pour me pencher sur la question et voila ce que j'ai pondu :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    void TMDIChild::SetEtatSorts()
    {
        int i;
        TQRCustomBand * Bande1;
        TQRChildBand * Bande2 = NULL;
        TControl * Control;
     
        // destruction des bandes enfant (effaçage)
        Bande1 = EtatSorts->DetailSorts;
        while (Bande1->ChildBand) // on descend jusqu'au dernier fils
            Bande1 = Bande1->ChildBand;
        while (static_cast<void *>(Bande1) != static_cast<void *>(EtatSorts->DetailSorts))
        {   // on remonte en supprimant les bandes
            Bande2 = dynamic_cast<TQRChildBand * >(Bande1);
            Bande1 = Bande2->ParentBand;
            delete Bande2;
        }
     
        Bande1 = EtatSorts->DetailSorts;
        //Remplissage de l'état
        for(i = 0; i < ListeSorts->Items->Count ; i++)
        {
            //Création de la bande et des QRRichText
            Bande1->HasChild = true;
            Bande1 = Bande1->ChildBand;
            if(!Bande1)
            {
                Application->MessageBox("lsdqkmfmlqksdjh",NULL,MB_OK);
                Close();
            }
            Bande1->ParentWindow = EtatSorts->DetailSorts->ParentWindow;
            Bande1->Height = 20;
     
            Control = new TQRRichText(Bande1);
            Control->Height = EtatSorts->SortNom->Height;
            Control->Width = EtatSorts->SortNom->Width;
            Control->Top = 0;
            Control->Left = EtatSorts->SortNom->Left;
            static_cast<TQRRichText *>(Control)->Lines->Add(ListeSorts->Items->Item[i]->Caption);
     
            Control = new TQRRichText(Bande1);
            Control->Height = EtatSorts->SortNiv->Height;
            Control->Width = EtatSorts->SortNiv->Width;
            Control->Top = 0;
            Control->Left = EtatSorts->SortNiv->Left;
            static_cast<TQRRichText *>(Control)->Lines->Add(ListeSorts->Items->Item[i]->SubItems->Strings[1]);
     
            Control = new TQRRichText(Bande1);
            Control->Height = EtatSorts->SortDesc->Height;
            Control->Width = EtatSorts->SortDesc->Width;
            Control->Top = 0;
            Control->Left = EtatSorts->SortDesc->Left;
            static_cast<TQRRichText *>(Control)->Lines->Add(ListeSorts->Items->Item[i]->SubItems->Strings[3]);
        }
    }
    le problème est que pour afficher l'aperçu, j'ai une fonction qui fait appel à SetEtatSorts puis a EtatSorts->PreviewModal() et à ce moment là, j'ai un beau message d'erreur : <<Le contrôle '' n'a pas de fenêtre parente>>

    vous en pensez koi :

  7. #7
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    Mille excuse, j'ai fait un peu du n'importe quoi
    Bon ben j'ai trouvé la solution a mon problème : c'est pas ma bande enfant qu'avait pas de parent mais mes QRRichText !!!
    Voici la solution revue et corrigée, il ne me reste plus qu'a comprendre pourquoi quand mon QRRichText ne fait qu'une ligne je n'ai pas de problème et quand il en fait plusieurs, j'ai un espace d'1 cm entre la fin d'un texte et le début du texte de la bande enfant !!!
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    void TMDIChild::SetEtatSorts()
    {
        int i;
        TQRCustomBand * Bande1;
        TQRChildBand * Bande2 = NULL;
        TControl * Control;
     
        // destruction des bandes enfant (effaçage)
        Bande1 = EtatSorts->DetailSorts;
        while (Bande1->ChildBand) // on descend jusqu'au dernier fils
            Bande1 = Bande1->ChildBand;
        while (static_cast<void *>(Bande1) != static_cast<void *>(EtatSorts->DetailSorts))
        {   // on remonte en supprimant les bandes
            Bande2 = dynamic_cast<TQRChildBand * >(Bande1);
            Bande1 = Bande2->ParentBand;
            delete Bande2;
        }
     
        Bande1 = EtatSorts->DetailSorts;
        //Remplissage de l'état
        for(i = 0; i < ListeSorts->Items->Count ; i++)
        {
            //Création de la bande et des QRRichText
            Bande1->HasChild = true;
            Bande1 = Bande1->ChildBand;
            Bande1->Height = 20;
     
            Control = new TQRRichText(Bande1);
            Control->Parent = Bande1;
            Control->Height = EtatSorts->SortNom->Height;
            Control->Width = EtatSorts->SortNom->Width;
            Control->Top = EtatSorts->SortNom->Top;
            Control->Left = EtatSorts->SortNom->Left;
            static_cast<TQRRichText *>(Control)->AutoStretch = true;
            static_cast<TQRRichText *>(Control)->Lines->Add(ListeSorts->Items->Item[i]->Caption);
     
            Control = new TQRRichText(Bande1);
            Control->Parent = Bande1;
            Control->Height = EtatSorts->SortNiv->Height;
            Control->Width = EtatSorts->SortNiv->Width;
            Control->Top = EtatSorts->SortNiv->Top;
            Control->Left = EtatSorts->SortNiv->Left;
            static_cast<TQRRichText *>(Control)->AutoStretch = true;
            static_cast<TQRRichText *>(Control)->Lines->Add(ListeSorts->Items->Item[i]->SubItems->Strings[1]);
     
            Control = new TQRRichText(Bande1);
            Control->Parent = Bande1;
            Control->Height = EtatSorts->SortDesc->Height;
            Control->Width = EtatSorts->SortDesc->Width;
            Control->Top = EtatSorts->SortDesc->Top;
            Control->Left = EtatSorts->SortDesc->Left;
            static_cast<TQRRichText *>(Control)->AutoStretch = true;
            static_cast<TQRRichText *>(Control)->Lines->Add(ListeSorts->Items->Item[i]->SubItems->Strings[3]);
        }
    }

  8. #8
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    hé bien il semblerai que cet espace en trop fut dû à la taille que je donnais à ma bande :
    est la taille de l'espace rajouté si un controle est étiré (QRRichText->AutoStretch)
    solution :

  9. #9
    GaL
    GaL est déconnecté
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    oui effectivement g eu a peu près les meme problèmes que moi.
    Désolé de ne pas t'avoir aidé mais j'étais parti en WE...

    En tout cas si tu as d'autres soucis n'hesitent pas...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/09/2013, 11h27
  2. Impression Par Quick Report
    Par BYALI dans le forum Bases de données
    Réponses: 4
    Dernier message: 19/01/2008, 16h51
  3. [Quick Report] - Sélection d'un bac d'impression.
    Par Argonz dans le forum Outils
    Réponses: 3
    Dernier message: 07/07/2007, 07h20
  4. [QUICK REPORT] Imprimer des données dans QRIMAGE
    Par freud dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/01/2007, 12h07
  5. [D7] Dépassement de pile à l'impression avec Quick Report
    Par Bigbaloo dans le forum Composants VCL
    Réponses: 8
    Dernier message: 16/03/2005, 00h28

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