كيف يمكن محاذاة النص على اليمين او توسيط بداخل أداة printdocument
يا أيها الناس قولو لا إله إلا الله تفلحوا وتملكوا بها العرب وتذل لكم العجم وإذا آمنتم كنتم ملوكا في الجنة
كيف يمكن محاذاة النص على اليمين او توسيط بداخل أداة printdocument
يا أيها الناس قولو لا إله إلا الله تفلحوا وتملكوا بها العرب وتذل لكم العجم وإذا آمنتم كنتم ملوكا في الجنة
شو يا اخوان
لا توجد خاصية تعمل محاذاة لليمين او لا تملك الأداة هذه الخاصية (Right to Left)
يا أيها الناس قولو لا إله إلا الله تفلحوا وتملكوا بها العرب وتذل لكم العجم وإذا آمنتم كنتم ملوكا في الجنة
أعتقد أن التحكم في هذه الأشياء يكون في كود الطباعه نفسه الذي تكتبه عند حدث PrintPage. فلديك في الـ PrintPageEventArgs معلومات مثل MarginBounds و PageBounds يمكنك استخدامها مع عمليات طرح وقسمه بسيطه لتفعل كل ما تريد.
مثلا لعملية توسيط النص , يمكنك أولا قياس عرض النص أثناء التشغيل بدالة MeasureString التي ترجع SizeF , ثم تطرح ذلك العرض من عرض الـ PageBounds ثم تقسم الناتج على 2 ... والرقم الناتج الأخير مرره لدالة الـ DrawString كـ X.
أخي معتز انا بشكرك على ردك
بس والله تعبت وانا بدور على كود يعمل لي محاذاة لليمين فقط ، فانا بكون ممنون لك لو تساعدني فيه لاني لو قدرت اعمل ذلك ماوضعت هذه المشاركة
صدقني استنفذت كل طاقتي في حل هذه المشكلة وبحث في المواقع الأجنبية بس للأسف ما لقيت شئ
وشكرا لك على المساعدة
يا أيها الناس قولو لا إله إلا الله تفلحوا وتملكوا بها العرب وتذل لكم العجم وإذا آمنتم كنتم ملوكا في الجنة
اذا كان لا يوجد طريقه مباشره , فيمكنك استخدام الطريقه التي أخبرتك بها في ردي السابق ... مثلا وانت تطبع عند حدث الـ 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.
كما ذكرت لك يا أخي في نهاية ردي السابق ... قم بعمل Loop على السطور واستخدم MeasureString لقياس كل سطر ثم ارسمه على أساس عرضه وعرض الصفحه. لأنك ان لم تفعل ذلك سيكون كل النص محاذي لليمين على أساس أكثر السطور عرضا وليس على أساس كل سطر كما تريد أنت.
والله انك عبقري يا اخ معتز انا نسيت اكتب 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);
}يا أيها الناس قولو لا إله إلا الله تفلحوا وتملكوا بها العرب وتذل لكم العجم وإذا آمنتم كنتم ملوكا في الجنة
الحمد لله على حل المشكله :)
لي سؤال , لماذا تطرح 50 ؟
أعتقد أنك تطرحها لأنك تريد أن يكون هناك هامش مناسب على يمين الصفحه. فاذا كان الأمر كذلك فهذا الحل غير مناسب في كثير من الحالات , فالمستخدم يجب أن يكون له الحق في تغيير مساحة تلك الهوامش ولذلك لا تكتب قيم Hard-Coded هكذا في الكود لأنك بذلك ستلغي اعدادات الطباعه الخاصه بالمستخدم.
يمكن معرفة اعدادات المستخدم الخاصه بالهامش من خلال MarginBounds , فاستخدمها بدلا من PageBounds اذا أردت.
مثلا :
e.Graphics.DrawString(stringToPrint,this.Font,Brushes.Black,(e.MarginBounds.Width-stringSizeF.Width),e.MarginBounds.Y);
واذا رأى المستخدم أم الهامش كبير أو صغير , فاجعل له الحريه بأن يغيره من خلال مثلاPageSetupDialog.
:D
صحيح كلامك يا باشا وانا عدلت الكود زي ما قلت
ومشكوووووووووور كتير على جهدك يا اخ معتز
يا أيها الناس قولو لا إله إلا الله تفلحوا وتملكوا بها العرب وتذل لكم العجم وإذا آمنتم كنتم ملوكا في الجنة
هذا الموضوع مغلق.