Je suis nouveau ici donc j'espère que mon message sera clairement édité...
J'ai essayé de vous montrer une image très explicative ici, mais les nouveaux utilisateurs ne sont pas autorisés à publier des images. Eh bien, en mots alors : je trace 3 lignes de exactement 10 centimètres lorsqu'elles sont imprimées sur du papier ou en PDF. Cependant, à l'écran, la ligne du milieu devrait ressembler à la ligne du bas. La seule différence entre elles est la propriété Width. La première ligne rouge .Width est de 0,1 millimètre et la deuxième ligne rouge .Width est de 0,5 millimètre.
Je donne à ces deux lignes rouges un DashPattern de : 4mm tiret - 1mm espace - 1mm tiret - 1mm espace.
Comme je l'ai écrit ; quand c'est imprimé, le motif de tiret est exactement le même sur les lignes rouges ! Je pense que c'est un bug lorsque les graphiques sont affichés à l'écran, mais peut-être que je rate quelque chose... Ci-dessous vous trouverez le code complet pour un projet d'exemple C# à copier/coller.
Merci d'avance !
Paul
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
public partial class Form1 : Form
{
PrintDialog dialog1 = new PrintDialog();
PrintDocument printdocument1 = new PrintDocument();
public Form1()
{
this.Text = "System.Drawing.Pen: Bug?";
this.Width = 600;
this.Height = 400;
// ajouter un panneau sur le formulaire
Panel panel1 = new Panel();
panel1.Width = 500;
panel1.Height = 300;
panel1.BackColor = Color.White;
panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);
this.Controls.Add(panel1);
// ajouter un bouton d'impression sur le formulaire
Button butPrint = new Button();
butPrint.Size = new Size(72, 28);
butPrint.Location = new Point(510, 20);
butPrint.Text = "Imprimer";
butPrint.Click += new System.EventHandler(this.butPrint_Click);
this.Controls.Add(butPrint);
// ajouter un gestionnaire pour la page d'impression
this.printdocument1.PrintPage += new PrintPageEventHandler(this.printdocument1_PrintPage);
}
private void makeSomeGraphics(Graphics g)
{
g.Clear(Color.White);
//g.SmoothingMode = SmoothingMode.AntiAlias;
g.PageUnit = GraphicsUnit.Millimeter;
g.PageScale = 1.0f;
Pen thinPenBlack = new Pen(Brushes.Black, 0.1f); // penWidth = 0.1mm
Pen thinPenRed = new Pen(Brushes.Red, 0.1f); // penWidth = 0.1mm
Pen thickPenRed = new Pen(Brushes.Red, 0.5f); // penWidth = 0.5mm
float y = 20.0f;
thinPenBlack.DashStyle = DashStyle.Solid;
g.DrawLine(thinPenBlack, 10, y, 110, y);
y = 30.0f;
// La longueur de chaque tiret et espace dans le motif de tirets est le produit de la valeur de l'élément dans le tableau et de la largeur du Pen
// donc divisez un float par la largeur du stylo
float w = thinPenRed.Width;
thinPenRed.DashPattern = new float[] { 4.0f / w, 1.0f / w, 1.0f / w, 1.0f / w };
g.DrawLine(thinPenRed, 10, y, 110, y);
// maintenant, un stylo plus large
y = 40.0f;
w = thickPenRed.Width;
thickPenRed.DashPattern = new float[] { 4.0f / w, 1.0f / w, 1.0f / w, 1.0f / w };
g.DrawLine(thickPenRed, 10, y, 110, y);
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
makeSomeGraphics(e.Graphics);
}
private void butPrint_Click(object sender, EventArgs e)
{
dialog1.UseEXDialog = true;
dialog1.Document = printdocument1;
if (dialog1.ShowDialog() == DialogResult.OK)
{
printdocument1.Print();
}
}
private void printdocument1_PrintPage(object sender, PrintPageEventArgs e)
{
makeSomeGraphics(e.Graphics);
e.HasMorePages = false;
}
}