PDA

View Full Version : آموزش: پرینت از فرم در C#



Mohammad_1ta
یک شنبه 20 تیر 1389, 18:09 عصر
سلام دوستان عزیز،
بوسیله این آموزش، میتوانید با زدن دکمه، از فرمتون عین همونی که میبینین رو پرینت بگیرین.

1- فرمتون رو طراحی کنین:


http://up.iranblog.com/Files/a54ffd4664bb4004871e.gif


2- به قسمت کد نویسی برنامه برین و کدهای زیر رو در برنامه قرار بدید (همانند عکس زیر):


http://up.iranblog.com/Files/ac50811a77f249e4b6fd.gif




[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
private Bitmap memoryImage;
private void CaptureScreen()
{
Graphics mygraphics = this.CreateGraphics();
Size s = this.Size;
memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
Graphics memoryGraphics = Graphics.FromImage(memoryImage);
IntPtr dc1 = mygraphics.GetHdc();
IntPtr dc2 = memoryGraphics.GetHdc();
BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
}


3- به طراحی فرمتون باز گردین و از Toolbox بقل برنامه، PrintDocument رو بکشین و بیارین تو برنامه خودتون:


http://up.iranblog.com/Files/8c0a34805f88469087ea.gif


4- روی PrintDocument1 که زیر فرمتون اومده، 2 بار کلیک کنید و برنامه ی مربوط به آن (که کدش پایین هست) رو قرار بدید:


http://up.iranblog.com/Files/39abb41e213d421e9a64.gif


http://up.iranblog.com/Files/9b9908ba1faf4785aa4e.gif


e.Graphics.DrawImage(memoryImage, 0, 0);

5- حال برای پرینت گرفتن از فرم، نیاز به دکمه ای دارین که با کلیک روی آن، پرینت آغاز بشه...
برای اینکار روی یکی از Button هاتون 2 بار کلیک کنید و کدهای زیر رو برای آن قرار بدید:


http://up.iranblog.com/Files/fed8cd868e0543a58735.gif



CaptureScreen();
printDocument1.Print();


6- پایان؛ به همین راحتی میتونین از فرمتون پرینت بگیرین.

منبع: محمد یکتا:چشمک:

موفق باشید. :لبخندساده:

akhlaghi_mohammad
جمعه 23 مهر 1389, 23:48 عصر
سلام دوست عزيز...
ممنون از تاپيكي كه براي پرينت گرفتن از فرم گذاشتي...
خيلي جالب بود..ولي اگه ميشد كيفيت پرينت رو يه خورده بيشتر كرد بهتر بود...
آيا راهي هست...:لبخندساده:
كسي ميتونه بگه چه جوري؟

msn2msn
سه شنبه 01 شهریور 1390, 15:05 عصر
سلام.
ممنون بابت مطلبتون.
من ازش استفاده كردم ولي فرممو برعكس(آينه‌اي) چاپ كرد. از طرف ديگه فقط اون قسمت از فرم كه ديده ميشد رو چاپ كرد و قسمت پايينشو كه اسكرول ميشد چاپ نكرد. راهي واسه اصلاحش هست؟

hiradec
چهارشنبه 17 خرداد 1391, 20:10 عصر
سلام ممنون از کدتون فقط عکسهارو نمی تونم بیبنم هر کاری کردم نشد اگه ممکنه بگین اولین کد رو کجای فرم باید کپی کنم ممنون می شم اگه به ایمیلم بفرستین
mojtaba.mesgar@yahoo.com
mesgar.hirad@yahoo.com

MaSoUti
سه شنبه 17 مرداد 1391, 12:33 عصر
سلام با تشکر از مطلب خوبتون

میشه این تیکه کدی که گذاشتین رو توضیح بدین که هر خط چه کاری انجام میده ؟

c-sharp_South
دوشنبه 16 بهمن 1391, 12:33 عصر
کیفیت فرم پایینه . کد دیگه ای کسی بلد نیست ؟
یک سوال دیگه ! این فرم رو افقی پرینت میگیره . اگه من عمودی بودن فرم ام بیشتر از ارتفاعش باشه و بخوام روی برگه به صورت عمودی چاپ بشه باید چیکار کنم ؟؟؟

hackman
یک شنبه 20 اسفند 1391, 20:58 عصر
سلام
بابت کد ممنون

حالا اگه بخام تو فرمم چند تا لیبل داشته باشم که کاربر بتونه جای اونارو خودش تغییر بده باید چیکار کنم ؟؟؟

m.mesgari
یک شنبه 25 فروردین 1392, 22:04 عصر
دوست عزیز عکسها نمایش داده نمیشه

raminfarivar
پنج شنبه 02 خرداد 1392, 20:14 عصر
بسیار سپاسگذارم از این توضیحات

erfan_urchin
دوشنبه 17 تیر 1392, 17:43 عصر
کیفیت فرم پایینه . کد دیگه ای کسی بلد نیست ؟

بفرمایید. من همیشه با این کد پرینت میگیرم
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
// print form
Bitmap bm = new Bitmap(Width, Height);
this.DrawToBitmap(bm, new Rectangle(0, 0, this.Width, this.Height));
e.Graphics.DrawImage(bm, 20, 20);
}

private void button1_Click(object sender, EventArgs e)
{
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.ShowDialog();
}

batman1
سه شنبه 28 مهر 1394, 11:47 صبح
دوستان،برای من دوتا خطا داد.
میشه بگید که این خطا ها مربوط به چی هست؟
136143
136144
ممنون.