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

سؤال: حول طباعة النصوص

بدأه محمد سامر أبو سلو في 6 سبتمبر 2005 · 9 رد · 2,187 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي صندوق نصوص فيه خاصية Multiline=true

وأريد طباعة النص الموجود فيه على الطابعة

وسؤالي هنا:

1 - كيف يمكنني الطباعة مع مراعاة الطباعة في الاتجاه العربي الصحيح من اليمين لليسار

2 - إذا كان النص طويلا كفاية بحيث يملأ أكثر من صفحة كيف يمكنني الطباعة على صفحات متعددة أيضا مع مراعاة الاتجاه العربي الصحيح من اليمين لليسار

ملاحظة:

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

يرجى المساعدة

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

يبدو لسبب ما ما حدا جاوب على أسئلتي هون

وبما أنني توصلت للحل مارح خلي الأسئلة بلا جواب

جواب الأسئلة موجود في الملف المرفق

وكمان فيه تجربة عن شغلة بالدوت نيت اسمها stringbuilder

WindowsApplication2.zip

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

وإذا في شي أسئلة حول الكود بحاول جاوب عليها قدر الامكان

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#4

السلام عليكم

اخواني أنا كنت عما دور على كود طباعة نصوص ولقيت هادا الكود، وشكرا كتير للأخ اللي كتب الموضوع

بس ممكن تقولولي كيف رجع عملية الطباعة من اليسار لليمين ؟؟

#5

السلام عليكم..

جزاك الله خيراً على هذه المشاركة المفيدة..

كيف يمكن وضع ترقيم للصفحات على شكل N of M؟

حاولت ولم أصل فأرجو المساعدة.

#6

السلام عليكم

حاسك عم تسال و تجاوب على نفسك اخ محمد ههههه

الله يقويك اخي

اقتباس

أبكـــــي فتبتسم الجراح من البكا

فكـــــأنّها في كـل جارحـــــــة فـم ُ

يالابتسـام الجــرح كـم أبكي و كم

ينساب فــــوق شفاهه الحمرا دم

ُ

#7

الاخ محمد سامر الف شكر على المثال الرائع بس ازاى عملت الكود ده انا فعلاً دورت على حل وفشلت بكل الطرق معلش ممكن شرح الكود لتعم الفائدة ؟

#9

السلام عليكم

مشكور اخي محمد سالم على النموذج الرائع

انا حاليا متفرغ لمشروع تخرج

برنامج مستودعات ومخازن

وهيك انتا ريحت علي في الاكواد بخصوص الطباعه

مشكووور جدا اخي

#10

هذا الكود الأساسي المستخدم مع بعض التعليقات التوضيحية باللغة العربية - طبعا هذا لايغني عن الكود الكامل في المثال المرفق

مع ملاحظة رغم أن الكود على 2003 إلا أنعه سيعمل بصورة مماتزة على 2005 و 2008

	' تعريف عناصر الطباعة مع تمكين تعقب الأحداث الخاصة بها
	Private WithEvents Pdlg As New PrintDialog
	Private WithEvents Pdoc As New PrintDocument
	Private WithEvents PPD As New PrintPreviewDialog
	Private WithEvents PSD As New PageSetupDialog

	' تعريف متغير StringBuilder
	Private Sb As New System.Text.StringBuilder

	' متغير يحمل إعدادات الصفحة
	Private PStgs As New PageSettings

	' متغير نصي وسيط
	Private Stp As String

	' نوع الخط الذي سيتم استخدامه
	Private PrintFont As New Font("arial", 12)




	Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
		Try
			' تحديد خصائص الصفحة
			Pdoc.DefaultPageSettings = PStgs

			Stp = Sb.ToString
			' تحديد وثيقة صندوق حوار الطباعة إلى Pdoc
			Pdlg.Document = Pdoc

			If Pdlg.ShowDialog = DialogResult.OK Then
				' نفذ أمر الطباعة
				Pdoc.Print()
			End If
		Catch ex As Exception
			MsgBox(ex.Message)
			ex = Nothing
		End Try
	End Sub

	Private Sub Pdoc_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles Pdoc.PrintPage
		' عدد الحروف
		Dim numChars As Integer
		' عدد السطور
		Dim numLines As Integer
		' النص الذي سيظهر في الصفحة
		Dim stringForPage As String
		' تنسيق النص مع استخدام المتغير الخاص بقلب الاتجاه من اليمين لليسار
		Dim strFormat As New StringFormat(StringFormatFlags.DirectionRightToLeft)

		' تحديد منطقة الرسم
		Dim rectDraw As New RectangleF( _
		e.MarginBounds.Left, e.MarginBounds.Top, _
		e.MarginBounds.Width, e.MarginBounds.Height)

		' تحديد القياس
		Dim SizeMeasure As New SizeF(e.MarginBounds.Width, _
		e.MarginBounds.Height - PrintFont.GetHeight(e.Graphics))

		' تحديد كيفية تقسيم النص
		strFormat.Trimming = StringTrimming.Word

		' تحديد قياسات النص
		e.Graphics.MeasureString(Stp, PrintFont, _
		SizeMeasure, strFormat, numChars, numLines)

		' تحديد النص الذي سيتم طباعته في الصفحة الحالية
		stringForPage = Stp.Substring(0, numChars)

		' الطباعة الفعلية للنص - رسم النص في الصفحة
		e.Graphics.DrawString(stringForPage, PrintFont, _
		Brushes.Black, rectDraw, strFormat)

		' تحديد إن كان يوجد صفحات إضافية
		If numChars < Stp.Length Then
			Stp = Stp.Substring(numChars)
			e.HasMorePages = True
		Else
			e.HasMorePages = False
		End If
	End Sub

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 29 فبراير 2008 في 23:48

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

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