PDA

View Full Version : مبتدی: بهترين راه پرينت گرفتن از يه فرم ساده



samaram
جمعه 28 خرداد 1389, 18:16 عصر
ميخوام يه فرم ساده داشته باشم كه جاهاي خالي براي وارد كردن يه سري اطلاعات كاربر داره. بعد عينا همين چيزايي كه تو خونه هاي خالي پر كرده به اضافه ي مثلا ليبل هايي كه روي فرم هست با يه دكمه ي پرينت كه گوشه صفحه هست پرينت گرفته بشه. يعني دقيقا هر چي رو صفحه ديده ميشه ميخواد پرينت بگيره. بهترين راه براي پياده سازي كد دستورات پرينت چيه؟

r00tkit
جمعه 28 خرداد 1389, 20:59 عصر
دوست من راهای زیادی برای پرینت گرفتن از فرم هستش

http://msdn.microsoft.com/en-us/library/aa287529%28VS.71%29.aspx

و استفاده از کامپونت پرینت مجانی vb.net از خود microsoft (http://www.microsoft.com/downloads/details.aspx?familyid=286111b0-6965-46cc-bf6f-c5ee63b1f98c&displaylang=en)

و این کامپونت که خیلی با کیفیت پرینت می گیره ولی پولی هستش (http://www.winformreports.co.uk/features_pf.htm)

کار با هر دو کامپونت خیلی راحت هستش ولی توصیه من به شما اینه که از فورم پرین نگیری بلکه خود فرم و اطلاعاتشو با متود print انجام بدی (ابن تجربهی شخصی من هستش)

s.khoshfekran
جمعه 28 خرداد 1389, 21:40 عصر
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Bitmap b = new Bitmap(this.Width, this.Height);
Rectangle r = new Rectangle(0, 0, this.Width, this.Height);
this.DrawToBitmap(b, r);
Image i = (Image)b;
e.Graphics.DrawImage(i, r);
}

samaram
جمعه 28 خرداد 1389, 22:01 عصر
کار با هر دو کامپونت خیلی راحت هستش ولی توصیه من به شما اینه که از فورم پرین نگیری بلکه خود فرم و اطلاعاتشو با متود print انجام بدی (ابن تجربهی شخصی من هستش)
منم همین فرمایش شما رو کاملا قبول دارم. اما راستش بلد نیستم کدشو بنویسم!:خجالت: البته یه مقدارم منظورتونو متوجه نشدم. یعنی چی با متد print؟ منظورتون متد موجود در خود vs؟

mmd2009
جمعه 28 خرداد 1389, 22:39 عصر
دوست عزیز چرا از گزارش گیری برای چاپ استفاده نمی کنید و نیازی به متدی اضافی هم نیست فقط مقادیر برو ارسال بکنید

اگر کمکی در این زمینه خواستی بگو

r00tkit
جمعه 28 خرداد 1389, 22:51 عصر
منظورم با همین
Graphics.DrawString

Graphics.DrawPath
و...
هستش

samaram
جمعه 28 خرداد 1389, 23:13 عصر
دوست عزیز چرا از گزارش گیری برای چاپ استفاده نمی کنید و نیازی به متدی اضافی هم نیست فقط مقادیر برو ارسال بکنید

اگر کمکی در این زمینه خواستی بگو

آره راستش مشکل دارم! نمیدونم چطور مقادیر رو ارسال کنم. یه گزارش دیگه با کریستال ریپورت ساختم که داره از بانک مقادیری رو گزارش میده. اما از پس این بر نمیام!

samaram
جمعه 28 خرداد 1389, 23:18 عصر
منظورم با همین
Graphics.DrawString

Graphics.DrawPath
و...
هستش
آها. ببینید یه عزیزی کمکم کرد و من همون کد موجود در msdn که شما لنکشو دادین رو بعد از استفاده از یه پنل به این صورت تغییر دادم:


[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 = MyPanel.CreateGraphics();
Size s = MyPanel.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, MyPanel.ClientRectangle.Width, MyPanel.ClientRectangle.Height, dc1, 0, 0, 13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
}


private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(memoryImage, 0, 0);
}

private void btnPrint_Click(object sender, EventArgs e)
{
CaptureScreen();
printDocument1.Print();
}

منتها نتیجه ، پرینت از کل فرم هستش. ظاهرا باید یه تغییر دیگه در کد بدم تا بتونم فقط محتویات درون پنل رو پرینت بگیرم. آخه نمیخوام مثلا نوار بالای پنجره و یا دکمه ی پرینت هم در پرینت بیاد! میخوام فقط عناصر داخل پنل پرینت گرفته بشه.

mmd2009
جمعه 28 خرداد 1389, 23:29 عصر
آره راستش مشکل دارم! نمیدونم چطور مقادیر رو ارسال کنم. یه گزارش دیگه با کریستال ریپورت ساختم که داره از بانک مقادیری رو گزارش میده. اما از پس این بر نمیام!


دوست عزیز این اموزش ویدئویی رو درست کردم واسه این روزا دیگه

بهتر بری ببینش همه چیزش کامله

راحت میتونی ازش استفاده بکنی و مشکلی هم پیش نمیاد و کارت هم جلوه بهتری میگره و خیلی هم مانور دادن داخلش راحتره

http://www.barnamenevis.org/forum/showthread.php?t=228193