OVH Cloud OVH Cloud

Impression PictureBox

6 réponses
Avatar
Daniel AUBRY
Bonjour à tous,

j'utilise un PictureBox comme l'objet Printer pour réaliser
un apercu avant impression. Cela marche très bien.
Pour ne pas écrire le code d'impression sur papier, j'imprime,
à l'aide de PaintPicture, le PictureBox sur l'imprimante de mon
choix. Cela marche très bien aussi.
Sauf, que la qualité est plutôt médiocre.
Y a t-il une possibilité d'améliorer la sortie sur imprimante ?
D'avance merci.

Dany

6 réponses

Avatar
David
Bonjour Daniel,

Tu peux utiliser le même code pour tes 2 boutons,
il "suffit" de rajouter une variable (dRatio) différente
pour l'impression et par exemple 0,7 pour aperçu (il faut
faire quelques textes pour choisir le bon facteur).
J'ai du choisir un 2eme facteur pour les lignes - à toi
de voir.
Voici un petit copier/coller extrait de toute la partie
de ce programme pour te montrer le principe.


Sous le bouton aperçu :
Call ImpressionOuApercu(Picture1, 0.7, 0.15) 'caractere ligne

Sous le bouton impression :
Call ImpressionOuApercu(Printer)
Printer.EndDoc

Private Sub ImpressionOuApercu(objDestination As Object, Optional dRatio As
Double = 1, Optional lRatio As Double = 1)

With objDestination
'exemple caractere :
.FontSize = 6 * dRatio
.CurrentX = 4850 * dRatio '4900
objDestination.Print "Société Anonyme";

'exemple ligne :
.DrawWidth = 10 * lRatio
objDestination.Line (380, htcond - 50)-(11100, htcond - 50)
End With

a+
Jean-Pol DAVID



"Daniel AUBRY" a écrit dans le message de news:
453ee9f1$0$23053$
Bonjour à tous,

j'utilise un PictureBox comme l'objet Printer pour réaliser
un apercu avant impression. Cela marche très bien.
Pour ne pas écrire le code d'impression sur papier, j'imprime,
à l'aide de PaintPicture, le PictureBox sur l'imprimante de mon
choix. Cela marche très bien aussi.
Sauf, que la qualité est plutôt médiocre.
Y a t-il une possibilité d'améliorer la sortie sur imprimante ?
D'avance merci.

Dany



Avatar
Daniel AUBRY
Je te remercie, David, mais ceci est une façon détournée
de résoudre le problème.
Je vais la mettre en place de suite.
Mais j'aurais bien aimé savoir pourqoui mon impression
de PictureBos est dégeu quelque soit l'imprimante choisie.

Merci.

Dany
"David" a écrit dans le message de news:
453fbea2$0$21496$
Bonjour Daniel,

Tu peux utiliser le même code pour tes 2 boutons,
il "suffit" de rajouter une variable (dRatio) différente
pour l'impression et par exemple 0,7 pour aperçu (il faut
faire quelques textes pour choisir le bon facteur).
J'ai du choisir un 2eme facteur pour les lignes - à toi
de voir.
Voici un petit copier/coller extrait de toute la partie
de ce programme pour te montrer le principe.


Sous le bouton aperçu :
Call ImpressionOuApercu(Picture1, 0.7, 0.15) 'caractere ligne

Sous le bouton impression :
Call ImpressionOuApercu(Printer)
Printer.EndDoc

Private Sub ImpressionOuApercu(objDestination As Object, Optional dRatio
As Double = 1, Optional lRatio As Double = 1)

With objDestination
'exemple caractere :
.FontSize = 6 * dRatio
.CurrentX = 4850 * dRatio '4900
objDestination.Print "Société Anonyme";

'exemple ligne :
.DrawWidth = 10 * lRatio
objDestination.Line (380, htcond - 50)-(11100, htcond - 50)
End With

a+
Jean-Pol DAVID



"Daniel AUBRY" a écrit dans le message de news:
453ee9f1$0$23053$
Bonjour à tous,

j'utilise un PictureBox comme l'objet Printer pour réaliser
un apercu avant impression. Cela marche très bien.
Pour ne pas écrire le code d'impression sur papier, j'imprime,
à l'aide de PaintPicture, le PictureBox sur l'imprimante de mon
choix. Cela marche très bien aussi.
Sauf, que la qualité est plutôt médiocre.
Y a t-il une possibilité d'améliorer la sortie sur imprimante ?
D'avance merci.

Dany







Avatar
Clive Lumb
Daniel AUBRY wrote:
Je te remercie, David, mais ceci est une façon détournée
de résoudre le problème.
Je vais la mettre en place de suite.
Mais j'aurais bien aimé savoir pourqoui mon impression
de PictureBos est dégeu quelque soit l'imprimante choisie.

Merci.

Dany


C'est très simple (l'explication, pas la solution)...
Le Picturebox utilise la résolution de l'écran (72 ou 96 points par pouce),
l'imprimante est à 300 ou 600 ppp (voire plus).
Pour imprimer ton picturebox à sa taille réélle, il faut l'agrandir 30 à 40
fois - d'où les crenellations etc.

Pour pousser encore plus loin : le dessin d'objets ou de textes se fait par
des commandes vectorielles (ex "line ...") que cela soit dans un picturebox
ou sur une imprimante. C'est le driver (d'imprimante, d'écran) qui converti
les commandes en pixels, en appliquant des algos de lissage etc.. Une fois
affiché, on ne dispose plus des vecteurs, mais des pixels. Si on essaye
d'améliorer l'impression du picturebox par des effets d'échelle on n'aura
pas la bénéfice des algos de lissage.

Seule solution, tout rédessiner sur l'imprimante ou regarder l'utilisation
des "enhanced metafiles" que l'on peut envoyer soit à un picturebox, soit à
une imprimante
Avatar
touriste
Clive Lumb a écrit :
Daniel AUBRY wrote:

Je te remercie, David, mais ceci est une façon détournée
de résoudre le problème.
Je vais la mettre en place de suite.
Mais j'aurais bien aimé savoir pourqoui mon impression
de PictureBos est dégeu quelque soit l'imprimante choisie.

Merci.

Dany



C'est très simple (l'explication, pas la solution)...
Le Picturebox utilise la résolution de l'écran (72 ou 96 points par pouce),
l'imprimante est à 300 ou 600 ppp (voire plus).
Pour imprimer ton picturebox à sa taille réélle, il faut l'agrandir 30 à 40
fois - d'où les crenellations etc.

Pour pousser encore plus loin : le dessin d'objets ou de textes se fait par
des commandes vectorielles (ex "line ...") que cela soit dans un picturebox
ou sur une imprimante. C'est le driver (d'imprimante, d'écran) qui converti
les commandes en pixels, en appliquant des algos de lissage etc.. Une fois
affiché, on ne dispose plus des vecteurs, mais des pixels. Si on essaye
d'améliorer l'impression du picturebox par des effets d'échelle on n'aura
pas la bénéfice des algos de lissage.

Seule solution, tout rédessiner sur l'imprimante ou regarder l'utilisation
des "enhanced metafiles" que l'on peut envoyer soit à un picturebox, soit à
une imprimante





Bonjour,

Pour simplifier un peu moins, les commandes de dessin sont effectuée
dans un DC (Device Contexte) ce en coordonnées logiques ddéfinies selon
le mode de mapping. Windows se charge de faire la conversion de
coordonnées logique vers les coordonnées de périphérique (ecran
imprimante), donc si on utilise les coordonnées logiques le dessin est
indépendant du périphérique, (ce qui est la philosophie Windows). La
correspondance entre les coordonnées réelles et logiques étant assurée
par le programmeur.
Ceci implique l'utilisation des API Windows, pour dessiner. Ces fonctios
sont celles utilisée dans les Methafiles, qui ne sont qu'une succession
de ces fonctions.

Salut
Avatar
Daniel AUBRY
Merci de vos réponses.
J'ai mis en place la solution proposée par David et je
doid avouer que j'en suis très satisfait, tant au niveau
de l'écriture du code que du résultat.
Mais puisque je vois que j'ai affaire à des pros de l'impression,
puis je vous demander de regarder mon post du 30/09/2006 intitulé
"Impression dans un cadre". Il est resté sans réponses à ce jour.

Encore merci,
Dany
"touriste" a écrit dans le message de news:
454b9b49$0$27408$
Clive Lumb a écrit :
Daniel AUBRY wrote:

Je te remercie, David, mais ceci est une façon détournée
de résoudre le problème.
Je vais la mettre en place de suite.
Mais j'aurais bien aimé savoir pourqoui mon impression
de PictureBos est dégeu quelque soit l'imprimante choisie.

Merci.

Dany



C'est très simple (l'explication, pas la solution)...
Le Picturebox utilise la résolution de l'écran (72 ou 96 points par
pouce),
l'imprimante est à 300 ou 600 ppp (voire plus).
Pour imprimer ton picturebox à sa taille réélle, il faut l'agrandir 30 à
40
fois - d'où les crenellations etc.

Pour pousser encore plus loin : le dessin d'objets ou de textes se fait
par
des commandes vectorielles (ex "line ...") que cela soit dans un
picturebox
ou sur une imprimante. C'est le driver (d'imprimante, d'écran) qui
converti
les commandes en pixels, en appliquant des algos de lissage etc.. Une
fois
affiché, on ne dispose plus des vecteurs, mais des pixels. Si on essaye
d'améliorer l'impression du picturebox par des effets d'échelle on n'aura
pas la bénéfice des algos de lissage.

Seule solution, tout rédessiner sur l'imprimante ou regarder
l'utilisation
des "enhanced metafiles" que l'on peut envoyer soit à un picturebox, soit
à
une imprimante





Bonjour,

Pour simplifier un peu moins, les commandes de dessin sont effectuée dans
un DC (Device Contexte) ce en coordonnées logiques ddéfinies selon le mode
de mapping. Windows se charge de faire la conversion de coordonnées
logique vers les coordonnées de périphérique (ecran imprimante), donc si
on utilise les coordonnées logiques le dessin est indépendant du
périphérique, (ce qui est la philosophie Windows). La correspondance entre
les coordonnées réelles et logiques étant assurée par le programmeur.
Ceci implique l'utilisation des API Windows, pour dessiner. Ces fonctios
sont celles utilisée dans les Methafiles, qui ne sont qu'une succession de
ces fonctions.

Salut


Avatar
David
Bonjour Daniel,

Trouvé dans mes archives (non testé - pas d'imprimante ici) :

(pour un cadre situé à 1.5 mm autour du texte) :

machaine = "Essai d'encadrement"

Printer.Print machaine;

Printer.Line Step(-Picture1.TextWidth(machaine) -
1.5, -1.5)-Step(Picture1.TextWidth(machaine) + 3,

Printer.TextHeight(machaine) + 3), , B

(emploi des deux mots clés Step afin de travailler en
coordonnées relatives)

a+

Jean-Pol DAVID



"Daniel AUBRY" a écrit dans le message de news:
454bcf32$0$14543$
Merci de vos réponses.
J'ai mis en place la solution proposée par David et je
doid avouer que j'en suis très satisfait, tant au niveau
de l'écriture du code que du résultat.
Mais puisque je vois que j'ai affaire à des pros de l'impression,
puis je vous demander de regarder mon post du 30/09/2006 intitulé
"Impression dans un cadre". Il est resté sans réponses à ce jour.

Encore merci,
Dany
"touriste" a écrit dans le message de news:
454b9b49$0$27408$
Clive Lumb a écrit :
Daniel AUBRY wrote:

Je te remercie, David, mais ceci est une façon détournée
de résoudre le problème.
Je vais la mettre en place de suite.
Mais j'aurais bien aimé savoir pourqoui mon impression
de PictureBos est dégeu quelque soit l'imprimante choisie.

Merci.

Dany



C'est très simple (l'explication, pas la solution)...
Le Picturebox utilise la résolution de l'écran (72 ou 96 points par
pouce),
l'imprimante est à 300 ou 600 ppp (voire plus).
Pour imprimer ton picturebox à sa taille réélle, il faut l'agrandir 30 à
40
fois - d'où les crenellations etc.

Pour pousser encore plus loin : le dessin d'objets ou de textes se fait
par
des commandes vectorielles (ex "line ...") que cela soit dans un
picturebox
ou sur une imprimante. C'est le driver (d'imprimante, d'écran) qui
converti
les commandes en pixels, en appliquant des algos de lissage etc.. Une
fois
affiché, on ne dispose plus des vecteurs, mais des pixels. Si on essaye
d'améliorer l'impression du picturebox par des effets d'échelle on
n'aura
pas la bénéfice des algos de lissage.

Seule solution, tout rédessiner sur l'imprimante ou regarder
l'utilisation
des "enhanced metafiles" que l'on peut envoyer soit à un picturebox,
soit à
une imprimante





Bonjour,

Pour simplifier un peu moins, les commandes de dessin sont effectuée dans
un DC (Device Contexte) ce en coordonnées logiques ddéfinies selon le
mode de mapping. Windows se charge de faire la conversion de coordonnées
logique vers les coordonnées de périphérique (ecran imprimante), donc si
on utilise les coordonnées logiques le dessin est indépendant du
périphérique, (ce qui est la philosophie Windows). La correspondance
entre les coordonnées réelles et logiques étant assurée par le
programmeur.
Ceci implique l'utilisation des API Windows, pour dessiner. Ces fonctios
sont celles utilisée dans les Methafiles, qui ne sont qu'une succession
de ces fonctions.

Salut