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

MFC Discussion :

Impression et aperçu avant impression


Sujet :

MFC

  1. #41
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 32
    Par défaut
    Citation Envoyé par farscape Voir le message
    le lookup et le seek est a faire en début de boucle et pas en fin.
    le stockage dans la map est à faire en fin de page...
    Fait ultérieurement. Le résultat était le suivant : la première ligne se dessine correctement sur ma page 1. Lorsque je dépasse la zone de ma page, la ligne du fichier à la position déterminée se dessine en boucle (infiniement) sur ma page 1.

    Citation Envoyé par buggen25 Voir le message
    Salut.
    Tu peux estimer le nombre de pages a l'avance.
    De plus, j'aimerai savoir quel est le problème avec ton impression.
    On peux par exemple deplacer le viewport de CDC vers le bas, et dessiner avec DrawText avec une decalage d'une page vers le bas
    Je n'ai aucun problème d'impression. C'est simplement mon aperçu avant impression qui ne fonctionne pas. Lorsque je dépasse les limites de ma page, j'aimerais que les lignes de textes non encore dessinées le soient sur ma page 2 (elles le sont actuellement sur la page 1, ce qui efface les première lignes du fichier auparavant dessinées)(j'ai au préalable déterminé mon nombre de page dans OnPreparePrinting).

    [EDIT] : Problème de boucle infinie réglée et maintenant j'obtiens le même résultat que celui de base (écrasement de lignes, pas de changement de page).

  2. #42
    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
    De ma propre experience, j'ai réussi a avoir un aperçu avant impression d'une liste sur plusieurs pages. an ajoutant a ma methode DrawText(x,y+iHauteurPage...
    C'est faire un decalage vars la deuxième page chaque fois qu'une page est remplit.
    C'est l'idée que j'ai adopté, et ça a marché

  3. #43
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 32
    Par défaut
    Citation Envoyé par buggen25 Voir le message
    De ma propre experience, j'ai réussi a avoir un aperçu avant impression d'une liste sur plusieurs pages. an ajoutant a ma methode DrawText(x,y+iHauteurPage...
    C'est faire un decalage vars la deuxième page chaque fois qu'une page est remplit.
    C'est l'idée que j'ai adopté, et ça a marché
    J'avais déjà tenté de faire quelque chose de ce type là, mais je n'avais pas réussi à obtenir le dessin souhaité sur la page voulue. Je ne sais pas du tout comment atteindre cette seconde page.
    Une fois que la première page est remplie (lignes destinées à la page 1 + lignes destinées à la page 2), il se passe exactement la même chose sur la page 2 (surement parce qu'à chaque page déterminée dans mon OnPreparePrinting la méthode OnPrint est appelée). J'ai compris (tout juste) l'idée de Farscape pour que lors du second appel de ma fonction OnPrint, la lecture du fichier ne débute qu'au niveau du changement de page. Si seulement je pouvais faire fonctionner ce processus, mon problème serait résolu.

  4. #44
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 32
    Par défaut
    Bon eh bien... problème résolu. Je ne suis pas passé par ta méthode farscape, ni la tienne buggen25. Je tiens à vous remercier pour les déclics provoqués et les réponses obtenues.

    Voici comment j'ai fonctionné :
    - Déclaration d'un membre de type ULONGLONG : m_pos;
    - Dans la méthode OnPrint j'ai pris en compte dans mes conditions la valeur du booléen CPrintInfo->m_bPreview et ai développé une partie impression ainsi qu'une autre de prévisualisation. Lorsque l'utilisateur choisit le mode aperçu avant impression, je donne la valeur 0 à m_pos si la variable CPrintInfo->m_nCurPage est à 1. A ce moment là je fais mon File.Seek(m_pos, CFile::begin)
    Lorsque je dépasse la zone utilisable de la page, je récupère la position dans le fichier et break (j'ai également supprimer les fonctions liées au DC EndPage() et StartPage()). Voilà, tout marche finalement, donc encore merci

  5. #45
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    si tu ne stock pas les débuts de page comme indiqué ,
    en previsu quand ton utilisateur va dérouler les pages puis revenir en arrière ça ne fonctionnera pas ...

  6. #46
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 32
    Par défaut
    Citation Envoyé par farscape Voir le message
    si tu ne stock pas les débuts de page comme indiqué ,
    en previsu quand ton utilisateur va dérouler les pages puis revenir en arrière ça ne fonctionnera pas ...
    En effet... pourrais-tu me dire pourquoi ça se comporte comme ça? pourquoi est-ce qu'il faut stocker le début de chaque page?
    J'ai fait ce que tu m'as dit de faire auparavant, ai utilisé CMap (au passage, à quoi sert cette classe? (http://msdn.microsoft.com/en-us/libr...4z(VS.71).aspx pas assez clair ici)) Si je fais mon Lookup en début de boucle ce n'est pas conforme, la ligne ciblée est dessinée sans fin. Je l'ai sorti de la boucle (l'ai mis avant d'y entrer), le résultat se rapproche plus de ce que je souhaite mais n'est pas le bon. Quand l'utilisateur déroule les pages, rien ne s'enregistre et surtout la fonction ne lit plus les lignes du fichier étant donné qu'il est ouvert dans OnBeginPrinting. Si tu n'as pas le temps d'expliquer les choses et pas l'envie (ce que je peux aisément comprendre), je ne peux pas t'y obliger (cf mes autres posts).

    [EDIT] : Bon, cette fois-ci ça a l'air de vraiment bien marcher, mes données se stockent correctement et lorsque je déroule, tout semble nickel.

    Merci à toi Farscape et si tu passes par là, j'aimerais vraiment savoir pourquoi il fallait les stocker (pourquoi ça ne se fait pas automatiquement au moment où je dessine mes pages?) et un peu plus de choses sur CMap.

  7. #47
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    comme je te l'ai dis précédemment OnPrint est appelée pour chaque page .
    si l'utilisateur click sur la page précédente OnPrint sera appelée avec le numéro de page demandé.
    dans ce contexte tu dois dérouler le fichier à l'ofset correspondant à la page demandée par l'interface, d'où le stockage des ofset de pages au fur et a mesure de l'avancement des pages demandées.
    la CMap correspond à la std::map du C++/stl.
    cela permet d'associer une clef à une donnée et donc de retrouver la donnée à partir de la clef.
    ici la clef c'est le numéro de page , la donnée: l'ofset de déplacement depuis le début du fichier.

  8. #48
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 32
    Par défaut
    Bonjour,

    Quelqu'un aurait une idée du mécanisme lié à la Checkbox "Imprimer dans un fichier" de la boîte de dialogue de l'impression?

  9. #49
    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
    Normalement on peut parametrer la boite de dialogue CPrintDialog, en modifiant le parametre de son membre PRINTDLG avec le flag PD_HIDEPRINTTOFILE (Print dialog HIDE PRINT TO FILE)

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/11/2013, 20h18
  2. [AC-2003] Aperçu avant impression différente de l'impression
    Par meolimo dans le forum IHM
    Réponses: 3
    Dernier message: 18/01/2013, 16h52
  3. ComponentPrint Problème Impression ou Aperçu avant impression
    Par Invité dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/03/2012, 11h53
  4. Réponses: 1
    Dernier message: 06/01/2009, 22h50
  5. Réponses: 1
    Dernier message: 16/09/2008, 18h59

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