Méthode print sur un NSView
LeLaid
Membre
Salut à vous :P
J'ai un soucis avec l'impression d'une view.
Dans und fenêtre j'ai une view (NSView) dans laquelle je fais des jolis dessins ;D
J'ai ajouté un bouton qui permet d'appeler le paneau d'impression.
Le hic c'est que ma view est "rognée"... Je ne vois pas comment spécifier la région à imprimer.
Dans ma view j'ai ceci:
Quand je veux imprimer j'ai ceci:
Comment fais-je? Qq'un peut m'aider?
Pascal
J'ai un soucis avec l'impression d'une view.
Dans und fenêtre j'ai une view (NSView) dans laquelle je fais des jolis dessins ;D
J'ai ajouté un bouton qui permet d'appeler le paneau d'impression.
Le hic c'est que ma view est "rognée"... Je ne vois pas comment spécifier la région à imprimer.
Dans ma view j'ai ceci:
Quand je veux imprimer j'ai ceci:
Comment fais-je? Qq'un peut m'aider?
Pascal
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ou alors le couper en morceaux :
http://developer.apple.com/documentation/Cocoa/Conceptual/Printing/Tasks/PaginatingViews.html
Au niveau de l'écran le dessin de n'est pas plus grand qu'une page A4
Bon je vais essayer...
Merci pour la réponse
ps. Il ne s'agit pas d'un ensemble de Julia mais d'une fractale basée sur le dessin récursif (les ensembles de Julia sont dessinés par pixel comme Mandelbrot non?)
N'oublie pas qu'il y a les marges, plus grand qu'une page A4 OK, mais qu'une page A4 moins les marges ?
Merci.
Ca s'appele le dragon? Ok. Cette fonction récursive est assez marante à manipuler.
Par exemple on peut aussi obtenir ceci:
J'ai essayé ceci:
- printView est l'action qui est appelée quand je clique sur le bouton "print"
- fractalView est une iVar de type class qui hérite de NSView.
Je dois sûrement foire quelque part....
schlum, je sais que c'est pas super exitant pour toi mais si tu peux me donner un indice....
Pascal
Parceque je suis plutot débutant... et j'avoue ne pas bien comprendre ta réponse :-\\
Je peux aussi avoir le header? :P
Considère qu'elle fait juste un "NSFillRect(rect);"
Encore une question 8--) enfin, deux...
Que fait la méthode drawRect:forPrinting que la méthode drawRect: ne fait pas?
Où puis-je trouver la définition de la constante kSDKXDefPrintMaxSize ?
Encore merci
Alors ça je peux répondre facilement
C'est une petite astuce qui permet d'avoir un comportement différent si on dessine pour l'impression ou pour l'application (par exemple gérer le N&B joliment etc.)
ça ça te sert pas, c'est un define sur une chaà®ne statique qui est une clé pour les préférences user...
En gros ça permet de récupérer la taille max pour l'impression que l'utilisateur a choisie dans les préférences.
Pour ça, je vais te donner une astuce...
Tu cherches sur Google "kCommandStrokedAndFilledRects site:developer.apple.com" :P
- Alt + Double-clic sur un nom de constante ou de méthode dans le code pour ouvrir la doc dessus
- Pomme (Commande) + Double-clic sur un nom de constante ou de méthode dans le code pour ouvrir la définition (de la méthode dans le .h typiquement) de l'élément cliqué.
En l'occurrence, pour le cas qui nous intéresse : kSDKXDefPrintMaxSize est une constante définie par schlum lui-même dans son projet (enfin je suppose).
Et de même j'imagine fort que [tt]drawRect:forPrinting:[/tt] est juste une méthode à lui dans sa classe, dans laquelle il a mis tout le code qu'habituellement on met dans [tt]drawRect:[/tt], et il aurait alors implémenté son [tt]drawRect:[/tt] simplement, en faisant appel à sa méthode [tt][self drawRect:rect forPrinting:NO];[/tt]. Ce qui permet de capitaliser le code utilisé dans son drawRect pour le dessin à l'écran et le code utilisé pour imprimer (pour "dessiner sur le contexte d'impression").
Enfin ce ne sont que des suppositions, j'ai pas vu son code, mais ça me semblerait somme toutes logique.
schlum, encore merci pour ton aide... Je commence (un peu) à comprendre mais j'ai encore des trous... En ce qui concerne drawRectForPrinting c'est limpide
Ca veut donc dire que tout le travail consitant à faire entrer une vue sur une page doit être codé? Il n'existe pas des méthodes standard?
J'ai essayé avec le code ci-dessous:
Les lignes 2 et 3 semblent complètement ignorées... alors que la 4 marche correctement
Pourant ces dans la doc apple que j'ai trouvé les deux lignes en questions (voir "fit to page"):
http://developer.apple.com/documentation/Cocoa/Conceptual/Printing/Concepts/pagination.html#//apple_ref/doc/uid/20001051
Une idée?
Je t'ai donné le code de la méthode standard...
Changer le contexte avec un scale puis appeler la fonction de dessin de la vue originale !
Ton code aurais put être écrit en utilisant NSGraphicsContext et NSAffineTransform ou sont-ce des choses totalement différentes (de NSGraphicsContext, CGContextTranslateCTM et CGContextScaleCTM)?
Quoiqu'il en soit merci bcp pour toutes ces réponses. Ca commence à prendre forme dans ma tête :crackboom:-