PDA

View Full Version : مشكل با پرينت گرفتن



bahar2008
یک شنبه 20 مرداد 1387, 11:07 صبح
سلام دوستان خوبم
من در فرمم يك ديتا گريد دارم كه با اسكرول بار اطلاعاتش رو كاربر مي تونه كامل ببينه و در پايين ديتا گريد با دستورات گرافيكي نمودار كشيده ام ولي براي پرينت گرفتن از اين صفحه مشكل دارم .
البته كد پرينت از ديتا گريد رو دارم ولي مشكل اينجاست كه از نمودار پرينت نميگيره و اگر بخوام از خود فرم پرينت بگيرم چون ديتا گريدم اسكرول بار داره تمام اطلاعات رو پرينت نمي گيره :ناراحت::ناراحت:
چه جوري مي تونم جوري پرينت بگيرم كه هم ديتا گريدم با تمام اطلاعاتش و هم نمودارم به طور كامل پرينت گرفته بشن؟

bahar2008
یک شنبه 20 مرداد 1387, 11:56 صبح
من الان پرينت گرفتن با دستورات PrintDocument1 رو امتحان كردم و ديدم كه تمام فرمم رو پرينت مي گيره ولي نموداري كه با دستورات گرافيكي درستش كردم رو در printpreviwe نشون نمي ده :اشتباه: :ناراحت:
آيا طرز پرينت گرفتن از اشكالي كه با دستورات گرافيكي درست مي شن فرق داره ؟؟؟:ناراحت:

ALI TT
یک شنبه 20 مرداد 1387, 17:14 عصر
سلام دوست عزیز ، برای این کار می تونی اون کدی که باهاش نمودار رو توی دیتا گرید نمایش می دی در رویداد پرینت بنویسی :


Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

e.Graphics و ...

End Sub

منظورم از سه نقطه همون توابعی هستش که باهاشون میشه یه نمودار رسم کرد

bahar2008
دوشنبه 21 مرداد 1387, 10:26 صبح
ممنونم از لطفت دوست عزيز ولي ميشه يك مثال بزني؟
اين يك ذره از كد دستورات گرافيكي هست كه من استفاده كردم ....حالا اين كد رو كجا بايد بگذارم؟:ناراحت:



Dim graph1 As Graphics
graph1 = Me.CreateGraphics()
Dim brush1 As Brush
brush1 = System.Drawing.Brushes.Black
Dim rec As New Rectangle
rec.X = 45
rec.Y = 250
rec.Width = 330
rec.Height = 130
Dim pen1 As Pen
pen1 = New Pen(Color.Black, 1)
graph1.DrawRectangle(pen1, rec)
For i As Integer = 75 To 360 Step 30
graph1.DrawLine(pen1, i, 250, i, 380)
Next
For i As Integer = 276 To 370 Step 26
pen1.DashStyle = Drawing2D.DashStyle.Dash
graph1.DrawLine(pen1, 45, i, 375, i)
Next
Dim f As Font
f = New System.Drawing.Font("arial", 10, FontStyle.Regular)
Dim d As Brush
d = System.Drawing.Brushes.Black
graph1.DrawString("81", f, d, 337, 389.5)
graph1.DrawString("82", f, d, 307, 389.5)
graph1.DrawString("83", f, d, 277, 389.5)
graph1.DrawString("84", f, d, 247, 389.5)
graph1.DrawString("85", f, d, 217, 389.5)
graph1.DrawString("86", f, d, 187, 389.5)
graph1.DrawString("87", f, d, 157, 389.5)
graph1.DrawString("88", f, d, 127, 389.5)
graph1.DrawString("89", f, d, 97, 389.5)
graph1.DrawString("90", f, d, 67, 389.5)

ALI TT
دوشنبه 21 مرداد 1387, 14:53 عصر
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

Dim graph1 As Graphics
graph1 = Me.CreateGraphics()
Dim brush1 As Brush
brush1 = System.Drawing.Brushes.Black
Dim rec As New Rectangle
rec.X = 45
rec.Y = 250
rec.Width = 330
rec.Height = 130
Dim pen1 As Pen
pen1 = New Pen(Color.Black, 1)
graph1.DrawRectangle(pen1, rec)
For i As Integer = 75 To 360 Step 30
graph1.DrawLine(pen1, i, 250, i, 380)
Next
For i As Integer = 276 To 370 Step 26
pen1.DashStyle = Drawing2D.DashStyle.Dash
graph1.DrawLine(pen1, 45, i, 375, i)
Next
Dim f As Font
f = New System.Drawing.Font("arial", 10, FontStyle.Regular)
Dim d As Brush
d = System.Drawing.Brushes.Black
graph1.DrawString("81", f, d, 337, 389.5)
graph1.DrawString("82", f, d, 307, 389.5)
graph1.DrawString("83", f, d, 277, 389.5)
graph1.DrawString("84", f, d, 247, 389.5)
graph1.DrawString("85", f, d, 217, 389.5)
graph1.DrawString("86", f, d, 187, 389.5)
graph1.DrawString("87", f, d, 157, 389.5)
graph1.DrawString("88", f, d, 127, 389.5)
graph1.DrawString("89", f, d, 97, 389.5)
graph1.DrawString("90", f, d, 67, 389.5)

End Sub

توی رویدا پرینت ، پرینت داکیومنت .

بعد باید یه جوری تنظیم کنی که اول تمام اطلاعات توی دیتا گرید رو پرینت بگیره و بعد بیاد سراغ دستورات گرافیکی .
موفق باشی

Meysamkh
دوشنبه 21 مرداد 1387, 15:17 عصر
سلام
من می خوام از دیتا گریدم پرینت بگیرم چون شما این کارو کردین میشه منو راهنمائی کنید که باید چی کار کنم.
ممنون

Zaparo
دوشنبه 21 مرداد 1387, 15:54 عصر
http://barnamenevis.org/forum/showthread.php?p=571670&posted=1#post571670

bahar2008
سه شنبه 22 مرداد 1387, 08:59 صبح
ممنونم از راهنماييت ali tt جان
من اين راه رو هم امتحان مي كنم اگر جواب نگرفتم باز مي آم و مزاحمتون مي شم :قلب: :قلب:

Meysamkh جان اگر با راهنمايي Zaparo جواب نگرفتي بگو تا كدش رو برات قرار بدم ..... البته من خودم هم كدش رو از جايي برداشتم و خودم ننوشتمش :لبخند: :لبخند:

bahar2008
سه شنبه 22 مرداد 1387, 09:22 صبح
من اون كاري كه شما گفتيد رو انجام دادم ولي باز هم جواب نداد و توي print previwe فقط يك صفحه خالي نشون مي ده :ناراحت:

كد مربوط به دكمه پرينت


Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click
Dim PrintPreviewDialog1 As New PrintPreviewDialog
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.Show()
End Sub


اين هم كد مربوط به PrintDocument1 هست


Dim graph1 As Graphics
graph1 = Me.CreateGraphics()
Dim brush1 As Brush
brush1 = System.Drawing.Brushes.Black
Dim rec As New Rectangle
rec.X = 45
rec.Y = 250
rec.Width = 330
rec.Height = 130
Dim pen1 As Pen
pen1 = New Pen(Color.Black, 1)
graph1.DrawRectangle(pen1, rec)
For i As Integer = 75 To 360 Step 30
graph1.DrawLine(pen1, i, 250, i, 380)
Next
For i As Integer = 276 To 370 Step 26
pen1.DashStyle = Drawing2D.DashStyle.Dash
graph1.DrawLine(pen1, 45, i, 375, i)
Next
Dim f As Font
f = New System.Drawing.Font("arial", 10, FontStyle.Regular)
Dim d As Brush
d = System.Drawing.Brushes.Black
graph1.DrawString("81", f, d, 337, 389.5)
graph1.DrawString("82", f, d, 307, 389.5)
graph1.DrawString("83", f, d, 277, 389.5)
graph1.DrawString("84", f, d, 247, 389.5)
graph1.DrawString("85", f, d, 217, 389.5)
graph1.DrawString("86", f, d, 187, 389.5)
graph1.DrawString("87", f, d, 157, 389.5)
graph1.DrawString("88", f, d, 127, 389.5)
graph1.DrawString("89", f, d, 97, 389.5)
graph1.DrawString("90", f, d, 67, 389.5)
End Sub


به جاي اينكه نمودار رو در print previwe نشون بده اين نمودار رو در روي صفحه فرمم نشون ميده :ناراحت:

bahar2008
چهارشنبه 23 مرداد 1387, 08:52 صبح
يعني هيشكي نمي تونه كمكم كنه؟ :اشتباه: :ناراحت: هيشكي نميدونه چه جوري مي تونم از دستورات گرافيكي اي كه در برنامم به كار بردم پرينت بگيرم؟؟؟:گریه: :گریه:

bahar2008
جمعه 25 مرداد 1387, 15:47 عصر
من هنوز مشکلم حل نشده :گریه: :گریه: :گریه: :گریه:

bahar2008
جمعه 01 شهریور 1387, 11:33 صبح
یعنی واقعا هیچکی نمی دونه چه جوری این مشکل حل می شه؟:گریه:
من نمی تونم از دستورات گرافیکی که استفاده کردم پرینت بگیرم چه کار باید بکنم؟:گریه:

bahar2008
یک شنبه 03 شهریور 1387, 09:18 صبح
يك راه حل بهم پيشنهاد شده كه مي تونم دستورات گرافيكي خودم رو به صورت bitmap در بيارم و bitmap رو به پرينتر بفرستم
حالا كسي مي دونه من اون دستورات را چه جوري مي تونم تبديل به bitmap كنم؟

bahar2008
سه شنبه 05 شهریور 1387, 12:43 عصر
لطفا يكي به من بگه چه جوري مي تونم اين دستورات رو به پرينتر بفرستم :گریه::گریه::گریه:


Public Sub nemoodar()
clear()
Dim graph1 As Graphics
graph1 = Me.CreateGraphics()
Dim brush1 As Brush
brush1 = System.Drawing.Brushes.Black
Dim rec As New Rectangle
rec.X = 45
rec.Y = 250
rec.Width = 330
rec.Height = 130
Dim pen1 As Pen
pen1 = New Pen(Color.Black, 1)
graph1.DrawRectangle(pen1, rec)
For i As Integer = 75 To 360 Step 30
graph1.DrawLine(pen1, i, 250, i, 380)
Next
For i As Integer = 276 To 370 Step 26
pen1.DashStyle = Drawing2D.DashStyle.Dash
graph1.DrawLine(pen1, 45, i, 375, i)
Next
Dim f As Font
f = New System.Drawing.Font("arial", 10, FontStyle.Regular)
Dim b As Brush
b = System.Drawing.Brushes.Black
graph1.DrawString("81", f, b, 337, 389.5)
graph1.DrawString("82", f, b, 307, 389.5)
graph1.DrawString("83", f, b, 277, 389.5)
graph1.DrawString("84", f, b, 247, 389.5)
graph1.DrawString("85", f, b, 217, 389.5)
graph1.DrawString("86", f, b, 187, 389.5)
graph1.DrawString("87", f, b, 157, 389.5)
graph1.DrawString("88", f, b, 127, 389.5)
graph1.DrawString("89", f, b, 97, 389.5)
graph1.DrawString("90", f, b, 67, 389.5)
Dim max As Double = 0
Dim min As Double = 10000
For i As Integer = 2 To 11
If DataGridView1.Rows(2).Cells(i).Value > max Then
max = DataGridView1.Rows(2).Cells(i).Value
End If
If DataGridView1.Rows(2).Cells(i).Value < min Then
min = DataGridView1.Rows(2).Cells(i).Value
End If
Next
If min = max Then
Exit Sub
End If
Dim fasele As Double = max - min
Dim fnoghte As Integer = Math.Round(120 / fasele, 0)
Dim y81 As Integer = 375 - (DataGridView1.Rows(2).Cells(2).Value - min) * fnoghte
Dim y82 As Integer = 375 - (DataGridView1.Rows(2).Cells(3).Value - min) * fnoghte
Dim y83 As Integer = 375 - (DataGridView1.Rows(2).Cells(4).Value - min) * fnoghte
Dim y84 As Integer = 375 - (DataGridView1.Rows(2).Cells(5).Value - min) * fnoghte
Dim y85 As Integer = 375 - (DataGridView1.Rows(2).Cells(6).Value - min) * fnoghte
Dim y86 As Integer = 375 - (DataGridView1.Rows(2).Cells(7).Value - min) * fnoghte
Dim y87 As Integer = 375 - (DataGridView1.Rows(2).Cells(8).Value - min) * fnoghte
Dim y88 As Integer = 375 - (DataGridView1.Rows(2).Cells(9).Value - min) * fnoghte
Dim y89 As Integer = 375 - (DataGridView1.Rows(2).Cells(10).Value - min) * fnoghte
Dim y90 As Integer = 375 - (DataGridView1.Rows(2).Cells(11).Value - min) * fnoghte
Dim pen2 As Pen
pen2 = New Pen(Color.Black, 2)
If y81 <> 375 Then
graph1.FillEllipse(brush1, 343, y81 - 2, 5, 5)
End If
If y82 <> 375 Then
graph1.FillEllipse(brush1, 313, y82 - 2, 5, 5)
End If
If y83 <> 375 Then
graph1.FillEllipse(brush1, 283, y83 - 2, 5, 5)
End If
If y84 <> 375 Then
graph1.FillEllipse(brush1, 253, y84 - 2, 5, 5)
End If
If y85 <> 375 Then
graph1.FillEllipse(brush1, 223, y85 - 2, 5, 5)
End If
If y86 <> 375 Then
graph1.FillEllipse(brush1, 193, y86 - 2, 5, 5)
End If
If y87 <> 375 Then
graph1.FillEllipse(brush1, 163, y87 - 2, 5, 5)
End If
If y88 <> 375 Then
graph1.FillEllipse(brush1, 133, y87 - 2, 5, 5)
End If
If y89 <> 375 Then
graph1.FillEllipse(brush1, 103, y89 - 2, 5, 5)
End If
If y90 <> 375 Then
graph1.FillEllipse(brush1, 73, y90 - 2, 5, 5)
End If
If y81 <> 375 And y82 <> 375 Then
graph1.DrawLine(pen2, 345, y81, 315, y82)
End If
If y82 <> 375 And y83 <> 375 Then
graph1.DrawLine(pen2, 315, y82, 285, y83)
End If
If y83 <> 375 And y84 <> 375 Then
graph1.DrawLine(pen2, 285, y83, 255, y84)
End If
If y84 <> 375 And y85 <> 375 Then
graph1.DrawLine(pen2, 255, y84, 225, y85)
End If
If y85 <> 375 And y86 <> 375 Then
graph1.DrawLine(pen2, 225, y85, 195, y86)
End If
If y86 <> 375 And y87 <> 375 Then
graph1.DrawLine(pen2, 195, y86, 165, y87)
End If
If y87 <> 375 And y88 <> 375 Then
graph1.DrawLine(pen2, 165, y87, 135, y88)
End If
If y88 <> 375 And y89 <> 375 Then
graph1.DrawLine(pen2, 135, y88, 105, y89)
End If
If y89 <> 375 And y90 <> 375 Then
graph1.DrawLine(pen2, 105, y89, 75, y90)
End If
End Sub

parsavb
چهارشنبه 06 شهریور 1387, 19:13 عصر
دوست عزیز شما می تونی ابتدا اطلاعات خودت رو به کریستال ریپورت ارسال کنی و بعد تو اونجا پرینت خودت رو بگیری چون امکانات کریستال ریپورت برای پرینت خیلی بیشتر و قابل انعطاف تر هستش

bahar2008
پنج شنبه 07 شهریور 1387, 13:24 عصر
ممنون از راهنماییت دوست عزیز این راه رو خیلی قبل پیش ها امتحان کردم و چون کریستال ریپورت به بانک وصل می شه و مجبور بودم برای اطلاعاتی که می خواستم یک تیبل جدا درست کنم و وصلش کنم به تیبل های دیگم که اطلاعات رو به طور همزمان در 2 تیبل بریزه و خلاصه کلی مشکلات داشتم به این صورت نمودار کشیدم که اطلاعاتم رو از دیتا گرید بخونه و فقط همونایی که لازم دارم رو نشون بده و دیدم این کار راحت تر از کریستال ریپورت هست از این راه رفتم و حالا مشکلم اینه که چه جوری می تونم از این نموداری که با این دستورات نوشتم پرینت بگیرم :اشتباه: :ناراحت:

parsavb
جمعه 08 شهریور 1387, 07:10 صبح
اگه مشکلت فقط تبدیل اینها به bitmap هستش این تاپیک (http://barnamenevis.org/forum/showthread.php?t=119847) رو نگاه کن .این برنامه که گذاشتم با همین راه کار می کنه ، یعنی اول فرم رو به pic تبدیل می کنه و بعد پرینت می گیره

parsavb
یک شنبه 10 شهریور 1387, 08:16 صبح
این برنامه دیتا گرید رو به bitmap تبدیل می کنه و فکر کنم به درد خور باشه
تبدیل دیتاگرید به bitmap (http://barnamenevis.org/forum/attachment.php?attachmentid=22538&d=1220156120)

bahar2008
یک شنبه 10 شهریور 1387, 09:05 صبح
ممنونم از لطفت دوست عزيز
من كد پرينت از ديتاگريد رو دارم و درست هم اجرا مي شه ولي مشكلم اينجاست كه اين نموداري كه كشيدم در پايين ديتا گريد هست ولي با اينكه از ديتا گريد پرينت مي گيره ولي از نموداري كه با دستورات گرافيكي نوشتم پرينت نمي گيره كه گفتم شايد اگر اون نمودار رو تبديل به bitmap كنم و دستور پرينتش رو قاطي دستورات پرينت ديتا گريدم كنه مشكلم حل بشه

parsavb
یک شنبه 10 شهریور 1387, 09:33 صبح
خوب کد قبلی که گذاشته بودم خود فرم شما رو به عکس تبدیل می کرد

bahar2008
یک شنبه 10 شهریور 1387, 10:00 صبح
اتفاقا همين الان داشتم اون كد رو امتحان مي كردم روي پروژه خودم كه ديدم ديتا گريد رو كامل پرينت نيم گيره و فقط از فرم پرينت مي گيره آخه ديتا گريد من اسكرول بار داره و بايد تمام اطلاعاشت ديده بشه رد پرينت ولي اون كد فقط همون قسمتي كه در صفحه ناميش مي ده رو پرينت مي گيره
البته من كدي دارم كه اين مشكل رو حل كرده ولي مشكل من اين هست كه قاطي اون كد چه كدي بنويسم كه دستورات گرافيكي كه استفاده كردم رو هم همراه با ديتا گريد پرينت بگيره :ناراحت:

bahar2008
یک شنبه 10 شهریور 1387, 16:53 عصر
ممنونم از لطفت parsavb عزیز که به من کمک کردید :قلب::قلب::قلب:
مشکلم حل شد :قلب::قلب::قلب:

Meysamkh
دوشنبه 11 شهریور 1387, 12:27 عصر
سلام به bahar2008 عزیز
من باز مزاحمت شدم که ازت بخوام لطف کنی و به من کمک کنی تا بتونم از دیتا گریدم print بگیرم.
اگه میشه و حوصله داری step by step برام توضیح بده و اینکه چیو کجا استفاده کنم و ...