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

محاذاة الطباعة في printdocument

مغلق
بدأه إسماعيل الحلو في 30 مارس 2006 · 9 رد · 1,201 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف يمكن محاذاة النص على اليمين او توسيط بداخل أداة printdocument

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

#2

شو يا اخوان

لا توجد خاصية تعمل محاذاة لليمين او لا تملك الأداة هذه الخاصية (Right to Left)

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

#3

أعتقد أن التحكم في هذه الأشياء يكون في كود الطباعه نفسه الذي تكتبه عند حدث PrintPage. فلديك في الـ PrintPageEventArgs معلومات مثل MarginBounds و PageBounds يمكنك استخدامها مع عمليات طرح وقسمه بسيطه لتفعل كل ما تريد.

مثلا لعملية توسيط النص , يمكنك أولا قياس عرض النص أثناء التشغيل بدالة MeasureString التي ترجع SizeF , ثم تطرح ذلك العرض من عرض الـ PageBounds ثم تقسم الناتج على 2 ... والرقم الناتج الأخير مرره لدالة الـ DrawString كـ X.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#4

أخي معتز انا بشكرك على ردك

بس والله تعبت وانا بدور على كود يعمل لي محاذاة لليمين فقط ، فانا بكون ممنون لك لو تساعدني فيه لاني لو قدرت اعمل ذلك ماوضعت هذه المشاركة

صدقني استنفذت كل طاقتي في حل هذه المشكلة وبحث في المواقع الأجنبية بس للأسف ما لقيت شئ

وشكرا لك على المساعدة

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

#5

اذا كان لا يوجد طريقه مباشره , فيمكنك استخدام الطريقه التي أخبرتك بها في ردي السابق ... مثلا وانت تطبع عند حدث الـ PrintPage .. تكتب :

string stringToPrint = "بسم الله الرحمن الرحيم , أما بعد أيها الأخوه الكرام فنحن نكتب باللغه العربيه";
SizeF stringSizeF = e.Graphics.MeasureString(stringToPrint,this.Font);
e.Graphics.DrawString(stringToPrint,this.Font,Brushes.Black,(e.PageBounds.Width-stringSizeF.Width),20);

في أول الكود أعرف طول وعرض النص المراد طباعته باستخدام MeasureString وأمرر لها النص والخط الذي سأطبع به.

وبدلا من أن أمرر X واضحه للـ DrawString , مررت لها ( عرض الصفحه - عرض النص ) ومررت لها الـ Y = 20.

طبعا الكود السابق كما ترى لا يهتم باعدادات المستخدم الخاصه بالـ Margins ,, واذا رغبت في احترام اعداداته .. استخدم MarginBounds بدلا من PageBounds :

e.Graphics.DrawString(stringToPrint,this.Font,Brushes.Black,(e.MarginBounds.Width-stringSizeF.Width),e.MarginBounds.Y);

في الكود أنا أفترض أن stringToPrint مكونه من سطر واحد ,, أو مكونه من عدة سطور ولكن كل السطور متساويه في عرضها. ولذلك فاذا كنت تطبع من ملف أو تطبع نصوص مدخله من قبل المستخدم ويوجد احتمال أنها تحتوي على سطور غير متساويه في العرض ... فقم بعمل Loop على السطور لكى ترسم كل سطر على حده على حسب عرضه.

بالنسبه لتوسيط النص داخل الصفحه فاستخدم نفس الكود السابق ولكن مرر الـ X كـ

( عرض الصفحه - عرض النص ) / 2.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#6

أخي معتز

المشكلة التي تظهر عندي موضحة بالصورة

انا اريد ان يكون محاذاة كل النص على اليمين في جميع الأسطر

وشكرا لمجهودك الكبير

pic.bmp

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

#7

كما ذكرت لك يا أخي في نهاية ردي السابق ... قم بعمل Loop على السطور واستخدم MeasureString لقياس كل سطر ثم ارسمه على أساس عرضه وعرض الصفحه. لأنك ان لم تفعل ذلك سيكون كل النص محاذي لليمين على أساس أكثر السطور عرضا وليس على أساس كل سطر كما تريد أنت.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#8

والله انك عبقري يا اخ معتز انا نسيت اكتب MeasureString في العبارة الثانية

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            string stringToPrint = "بسم الله الرحمن الرحيم , أما بعد أيها الأخوه الكرام فنحن نكتب باللغه العربيه";
            SizeF stringSizeF = e.Graphics.MeasureString(stringToPrint, this.Font);
            e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black, (e.PageBounds.Width - stringSizeF.Width)-50, 20);
            stringToPrint = "الحمد لله رب العالمين";
            SizeF stringSizeF1 = e.Graphics.MeasureString(stringToPrint, this.Font);
            e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black, (e.PageBounds.Width - stringSizeF1.Width)-50, 50);
        }

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

#9

الحمد لله على حل المشكله :)

لي سؤال , لماذا تطرح 50 ؟

أعتقد أنك تطرحها لأنك تريد أن يكون هناك هامش مناسب على يمين الصفحه. فاذا كان الأمر كذلك فهذا الحل غير مناسب في كثير من الحالات , فالمستخدم يجب أن يكون له الحق في تغيير مساحة تلك الهوامش ولذلك لا تكتب قيم Hard-Coded هكذا في الكود لأنك بذلك ستلغي اعدادات الطباعه الخاصه بالمستخدم.

يمكن معرفة اعدادات المستخدم الخاصه بالهامش من خلال MarginBounds , فاستخدمها بدلا من PageBounds اذا أردت.

مثلا :

e.Graphics.DrawString(stringToPrint,this.Font,Brushes.Black,(e.MarginBounds.Width-stringSizeF.Width),e.MarginBounds.Y);

واذا رأى المستخدم أم الهامش كبير أو صغير , فاجعل له الحريه بأن يغيره من خلال مثلاPageSetupDialog.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#10

:D

صحيح كلامك يا باشا وانا عدلت الكود زي ما قلت

ومشكوووووووووور كتير على جهدك يا اخ معتز

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

هذا الموضوع مغلق.

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