Nyomtatási gond visual studióban írt programnál

Nyomtatási gond visual studióban írt programnál
2011-01-21T16:00:20+01:00
2011-03-16T14:56:36+01:00
2022-11-21T04:10:36+01:00
Taki87
Helló!
Olyan gondom van, hogy írtam 1 progit, ez 2 formból áll. Az első formon bevitt adatok a másodikon formon, ezek az adatok 1 munkalap formájában jelennek meg. A gond a következő: nyomtatni tudok a formból de csak ha a teljes form látszik (ha nincs benne AutoScroll), de így nem lehetátnézni az adatokat, hogy minden stimmel-e. A következőt használom hozzá:
{
private System.IO.Stream streamToPrint;
string streamType;

public PrintForm()
{
InitializeComponent();
}

[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool BitBlt
(
IntPtr hdcDest, // handle to destination DC
int nXDest, // x-coord of destination upper-left corner
int nYDest, // y-coord of destination upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
IntPtr hdcSrc, // handle to source DC
int nXSrc, // x-coordinate of source upper-left corner
int nYSrc, // y-coordinate of source upper-left corner
System.Int32 dwRop // raster operation code
);

private void printDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
System.Drawing.Image image = System.Drawing.Image.FromStream(this.streamToPrint);
int x = e.MarginBounds.X;
int y = e.MarginBounds.Y;
int width = image.Width;
int height = image.Height;
if ((width / e.MarginBounds.Width) > (height / e.MarginBounds.Height))
{
width = e.MarginBounds.Width;
height = image.Height * e.MarginBounds.Width / image.Width;
}
else
{
height = e.MarginBounds.Height;
width = image.Width * e.MarginBounds.Height / image.Height;
}
System.Drawing.Rectangle destRect = new System.Drawing.Rectangle(x, y, width, height);
e.Graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, System.Drawing.GraphicsUnit.Pixel);
}

public void StartPrint(Stream streamToPrint, string streamType)
{
this.printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
this.streamToPrint = streamToPrint;
this.streamType = streamType;
System.Windows.Forms.PrintDialog PrintDialog1 = new PrintDialog();
PrintDialog1.AllowSomePages = true;
PrintDialog1.ShowHelp = true;
PrintDialog1.Document = printDoc;

DialogResult result = PrintDialog1.ShowDialog();
if (result == DialogResult.OK)
{
printDoc.Print();
//docToPrint.Print();
}

}

private void btnPrint_Click(object sender, EventArgs e)
{
Graphics g1 = this.CreateGraphics();
Image MyImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height, g1);
Graphics g2 = Graphics.FromImage(MyImage);
IntPtr dc1 = g1.GetHdc();
IntPtr dc2 = g2.GetHdc();
BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
g1.ReleaseHdc(dc1);
g2.ReleaseHdc(dc2);
MyImage.Save(@"c:\PrintPage.jpg", ImageFormat.Jpeg);
FileStream fileStream = new FileStream(@"c:\PrintPage.jpg", FileMode.Open, FileAccess.Read);
StartPrint(fileStream, "Image");
fileStream.Close();

if (System.IO.File.Exists(@"c:\PrintPage.jpg"))
{
System.IO.File.Delete(@"c:\PrintPage.jpg");
}
}
}
Valaki tudna segíteni, hogy ezt hogy lehet megoldani, hogy lehessen gördíteni az oldalt, de ugyanakkor egye ki is lwhhwssen gyomtatni.

Segítségeteket előre is köszönöm. Ha valakinek lenne hozzá forrás kódja az jó lenne.
Köszi

UI.: Bocs ha már hasonló probléma volt, csak nem találtam meg
Mutasd a teljes hozzászólást!
private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
this.printForm1.Print(this,Microsoft.VisualBasic.PowerPacks.Printing.Pr​intForm.PrintOption.ClientAreaOnly);

}
És itt a form design részénél a következőt használtam: Visual Basic PowerPacks PrintForm1
mivel 1 oldalas ezért nem kell több)
Előre is köszi.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd