الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ممكن مساعده في تصحيح كود يستخدم الاسكانر فيدر ( ممتاز بدون ادوات )

بدأه Ahmed Wahb في 3 أغسطس 2009 · 1 رد · 1,343 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

الاخوه الكرام

لدي مثال رائع يقوم بسحب الاوراق من الاسكانر فيدر بدون ادوات

واقوم الان بتطويرة ليتم استخدامه بشكل احترافي ولكن احتاج مساعدة الخبراء منكم في اجراء تعديل عليه

حيث يقوم البرنامج بسحب الصور وارسالها الي فورم اخر وتكوين هذة الفورم بعدد الصور المسحوبه

ولكن اريد ان اقوم بتكوين PictureBox بعدد الاوراق المسحوبه علي نفس الفورم وعرض كافة الصور عليها

واترككم مع الكود الان

نقوم بتعريف التالي 

	Implements IMessageFilter

	Private msgfilter As Boolean
	Private tw As Twain
	Private picnumber As Integer = 0

	<STAThread()> Shared Sub Main()
		If (Twain.ScreenBitDepth < 15) Then
			MessageBox.Show("Need high/true-color video mode!", "Screen Bit Depth", MessageBoxButtons.OK, MessageBoxIcon.Information)
			Return
		End If

		Dim mf As FrmMain = New FrmMain()
		Application.Run(mf)
	End Sub

	Public Sub New()
		InitializeComponent()
		tw = New Twain()
		tw.Init(Me.Handle)
	End Sub

ثم نقوم بأنشاء عدد 3 كلاس بأسماء GdiPlusLib.vb & TwainDefs.vb & TwainLib.vb

مرفقين في اخر الشرح

ثم نقوم بوضع عدد 2 Button علي الفورم الاول لاختيار الاسكانر المراد التعامل معه ونضع فيه الكود التالي

 tw.Select()

وButton الاخر لبدأ سحب الاوراق من الاسكانر ونضع فيه الكود التالي

 If (Not msgfilter) Then
			'Me.Enabled = False
			msgfilter = True
			Application.AddMessageFilter(Me)
		End If
		tw.Acquire()

ولا ننسي ان نقوم بأستدعاء الكلاس الذي يساعدنا بأستدعاء الاسكانر كالتالي

Imports SP_Scanner_Feeder.TwainLib

مع العلم بأن SP_Scanner_Feeder هو أسم البرنامج الذي قمت بتسميتة

ثم نقوم بأضافة الكود التالي وهو خاص بعد الانتهاء من سحب الصور

 Private Sub EndingScan()
		If (msgfilter) Then
			Application.RemoveMessageFilter(Me)
			msgfilter = False
			' Me.Enabled = True
			Me.Activate()
		End If
	End Sub

ثم نأتي بعد ذالك للكود المهم وهو الذي يقوم بتخزين الصور اثناء السحب

 Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
		Dim cmd As TwainCommand = tw.PassMessage(m)
		If (cmd = TwainCommand.Not) Then
			Return False
		End If

		Select Case cmd
			Case TwainCommand.CloseRequest
				EndingScan()
				tw.CloseSrc()
			Case TwainCommand.CloseOk
				EndingScan()
				tw.CloseSrc()
			Case TwainCommand.DeviceEvent
			Case TwainCommand.TransferReady
				Dim pics As ArrayList = tw.TransferPictures()
				EndingScan()
				tw.CloseSrc()
				picnumber += 1

				Dim i As Integer

'هنا يتم ارسال الصور الي الفورم الاخر ليتم عرض كل صورة علي فورم  وهذا المطلوب تعديله
'حيث ما اريد ان اقوم في كل خطوة بأنشاء PictureBox   ليتم عرض الصور عليه  وكود اضافة الصور مرفق بعد هذا الكود

				For i = 0 To pics.Count - 1 Step 1
					Dim img As IntPtr = CType(pics(i), IntPtr)
					Dim newpic As TwainGui.PicForm = New TwainGui.PicForm(img)
					'newpic.MdiParent = Forms.FMain 'Me.MdiParent
					Dim picnum As Integer = i + 1
					newpic.Text = "ScanPass" + picnumber.ToString() + "_Pic" + picnum.ToString()
					newpic.Show()
				Next

		End Select

		Return True
	End Function

كما وضحت لكم بأعلي اريد استبدال طريقة عرض الصور بدلاً من تكوين فورم جديده لكل صورة

بأنشاء PictureBox لكل صورة علي الفورم وقمت بتصميم انشاء ال PictureBox علي الفور بشكل جيد ولكن يبقي كيفية اضافة الصورة له

كود اضافة ال PictureBox علي الفورم

 Private m_ControlCount As Integer = 0
	Private m_Location As New Point(10, 6)

	Private Sub Add_Photo()

		m_ControlCount += 1

		Dim x As New PictureBox

		x.Name = "Pic" + m_ControlCount.ToString()
		x.Text = "Photo" & i + m_ControlCount.ToString()
		x.BorderStyle = BorderStyle.FixedSingle
		x.Size = New Size(160, 108)

		x.Location = New Point(Me.m_Location.X + 5, Me.m_Location.Y)
		m_Location.X += x.Width + 10

		x.Cursor = System.Windows.Forms.Cursors.Hand

		' Add the two event handlers 
		AddHandler x.Click, AddressOf myPhoto_Click
		'AddHandler x.MouseHover, AddressOf myButtonHandler_MouseHover

		' Add the control to the collection of controls
		Controls.Add(x)
		ItemView.Controls.Add(x)
		CType(x, System.ComponentModel.ISupportInitialize).BeginInit()

	End Sub

	Private Sub myPhoto_Click(ByVal sender As Object, ByVal e As EventArgs)

		If TypeOf sender Is PictureBox Then
			MsgBox(CType(sender, PictureBox).Text + " was pressed!", _
					MsgBoxStyle.OkOnly, Me.Text)
		End If

	End Sub

حيث نفرض في حال قيامنا بسحب عدد 10 اوراق بأستخدام الاسكانر يتم تكوين عدد 10 PictureBox علي الفور بشكل جيد ويتم عرض الصور عليهم

وفي هذة الحالة يكون كود سحب الصور كالتالي

 Dim i As Integer

	'هنا يتم تسحيب الصور صورة تلو الاخري وتسجيلها
	Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
		Dim cmd As TwainCommand = tw.PassMessage(m)
		If (cmd = TwainCommand.Not) Then
			Return False
		End If

		Select Case cmd
			Case TwainCommand.CloseRequest
				EndingScan()
				tw.CloseSrc()
			Case TwainCommand.CloseOk
				EndingScan()
				tw.CloseSrc()
			Case TwainCommand.DeviceEvent
			Case TwainCommand.TransferReady
				Dim pics As ArrayList = tw.TransferPictures()
				EndingScan()
				tw.CloseSrc()
				picnumber += 1

				For i = 0 To pics.Count - 1 Step 1
					Dim img As IntPtr = CType(pics(i), IntPtr)
					'Dim newpic As TwainGui.PicForm = New TwainGui.PicForm(img)
					'newpic.MdiParent = Forms.FMain 'Me.MdiParent

					Add_Photo()

					'Dim picnum As Integer = i + 1
					'newpic.Text = "ScanPass" + picnumber.ToString() + "_Pic" + picnum.ToString()
					'newpic.Show()
				Next

		End Select

		Return True
	End Function

ولكن يبقي طريقة عرض الصور علي نفس الفورم في ال PictureBox المخصص له

مرفق المثال بالكامل

SP_Scanner_Feeder.rar

يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل

سبحان الله وبحمده ... سبحان الله العظيم

#2

up

يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل

سبحان الله وبحمده ... سبحان الله العظيم

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…