السلام عليكم ورحمة الله
أسعد الله أوقاتكم بكل خير ، أعمل على دوت نيت 2005 ، وأريد تغيير صورة خلفية ويندوز فورم MDI ، تم عمل RTLLayout = True ، لكن المشكلة أن الصورة لا تظهر ، بحثت ولم أجد اجابة
هل أجد لديكم حلا ؟
شكرا مقدماً
السلام عليكم ورحمة الله
أسعد الله أوقاتكم بكل خير ، أعمل على دوت نيت 2005 ، وأريد تغيير صورة خلفية ويندوز فورم MDI ، تم عمل RTLLayout = True ، لكن المشكلة أن الصورة لا تظهر ، بحثت ولم أجد اجابة
هل أجد لديكم حلا ؟
شكرا مقدماً
من لمح فجر الأجر هان عليه ظلام التكليف
السلام عليكم ورحمة الله وبركاته
أضف عنصر صندوق صورة PicturBox إلى الفورم الرئيسي واجعل خاصيته Dock تساوي الملء Fill واجعل خاصية SizeMode تساوي StretchImage ثم حمل الصورة التي تريد في صندوق الصورة.
ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها
كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور
عليكم السلام ورحمة الله وبركاته
شكرا لك أخي الكريم ، ما ذكرته يؤدي المطلوب لكن عند استدعاء أي فورم (Child Form) فانه لا يظهر (كأنه موجود خلف picturebox ) !!
من لمح فجر الأجر هان عليه ظلام التكليف
اختار ال picturebox ثم اضغط على send to back من الاعلى سيظهر اى عنصر تضيفه على الفورم
عندما يتم تحديد الفورم على أنه حاوي لفورمات أولاد يقوم بإضافة عنصر تحكم من النوع MdiClient والذي هو عبارة عن عنصر خاص لاحتواء فورم أبناء
ولهذا السبب كان إما يظهر الصورة أو الفورمز مع الأرضية الرمادية
وهو سبب اختفاء صورة أرضية الفورم الرئيسي لأنه عنصر يقع فوقه
لهذا وجب وضع الصورة على أرضية هذا العنصر وليس الفورم
لذا ضع الكود التالي في المشيد
public Form1()
{
InitializeComponent();
MdiClient mdiClient;
mdiClient = (MdiClient)this.Controls[0];
mdiClient.BackgroundImage = img;
}img هي متحول الذي ستضع فيه الصورة ;
وبإذن الله يتم الأمر ولكن احرص أن تكون الأرضية قابلة للتكرار لأنه سيكررها عندما تكبر الفورم
تم تعديل هذه المشاركة بواسطة المبرمج أبو أحمد في 7 مايو 2012 في 19:24
ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها
كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور
شكراً للأخوين الكريمين :
1- أخي محمد سلامة : send to back لمربع الصورة لا يجدي نفعاً لأني قد جربته مسبقاً.
2- أخي المبرمج أحمد : ما هو موجود لدي هو شبيه بما كتبته وأقوم بتغيير اللون وصورة الخلفية ، لكن الاول ينجح والثاني لا.
foreach (Control ctl in this.Controls)
{
if (ctl is MdiClient)
{
ctl.BackColor = Color.MintCream;
ctl.BackgroundImage = Image.FromFile("filename");
break;
}
}وقد جربت الكود أعلاه مرتين : في Constructor أو حدث Form Load ، دون جدوى.
تم تعديل هذه المشاركة بواسطة صاحب همة في 8 مايو 2012 في 08:33
من لمح فجر الأجر هان عليه ظلام التكليف
حياك الله أخي
أنا صراحة جربته وتاكدت منه قبل أن أضع الرد
حتى الكود الذي أنت وضعته يعمل بشكل جيد
على كل حال رفعت لك المشروع كاملا لتتأكد بنفسك
ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها
كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور
أخي الكريم
شكرا لك ، لكن هل يمكن تحويله الى نسخة 2008 أو 2005 حيث أنه لم يفتح وأظنه ذلك بسبب اختلاف الفريم وورك.
جزاك الله خير..
من لمح فجر الأجر هان عليه ظلام التكليف
ما هو أحدث فريم وورك عندك ؟
ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها
كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور
حاليا لدي دوت نيت 2005 - فريم وورك 2.0
وكذلك 2008 - فريم وورك 3.0 - 3.5
من لمح فجر الأجر هان عليه ظلام التكليف
تفضل أخي
http://www.mediafire...3458sv1t3ia8xdl
وضعت مجلد الصور داخل مجلد Debug لكي يصل إلى الصورة
أنت لك الخيار في تحديد مسار الصور
تم تعديل هذه المشاركة بواسطة المبرمج أبو أحمد في 8 مايو 2012 في 16:10
ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها
كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور
أتعبتك معي أخي الكريم .
ليس لدي اي مشكلة فيما أرسلته !!!
المشكلة عندما تكون RightToLeftLayout = True وكذلك RightToLeft =true لفورم ال Mdi ( ذكرت ذلك في أول مشاركة)
أرجو أن تكون الصورة قد اتضحت .
مع تقديري لكل جهدك - جعله الله في ميزان حسناتك.
من لمح فجر الأجر هان عليه ظلام التكليف
بالنسبة لخاصية RightToLeft تكون قيمتها الافتراضية هي Inherit أي ترث القيمة من الأب الحاوي
ولهذا اجعل :
mdiClient.RightToLeft = RightToLeft.No ;
أما الفورمات الأبناء عين لها القيمة إلى Yes
frm2.RightToLeft = RightToLeft.Yes;
وبالتالي ستجد أن الفورم الرئيسي والفورمات الأبناء كلها عربية الاتجاه و فقط الأرضية أجنبية ولكن ستظهر الصورة
تم تعديل هذه المشاركة بواسطة المبرمج أبو أحمد في 8 مايو 2012 في 18:14
ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها
كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور
السلام عليكم ورحمة الله وبركاته
تم بحمد الله وبعد بحث وتجربة أمتدت لعدة ساعات الوصول لأفضل حل لهذه المشكلة
الفكرة تكمن في رسم الصورة ضمن العنصر الحاوي MdiClient من خلال إضافة حدث الرسم Paint للعنصر نفسه وليس للفورم
وعملية الرسم تتم من خلال إجراءات API وتحديدا وظيفة StretchDIBits التابعة للمكتبة GDI
قمت بوضع كل الاحتمالات لخاصية BackgroundImageLayout بحيث يتم رسم الصورة في الوسط أو يتم تكرارها أو تحجيمها بحسب المساحة أو توسيطها وهكذا
على كل حال هذا هو المشروع :
http://www.mediafire...aqnoxc0ny3yjx7c
حاولت القيام بعملية الرسم من خلال الجرافيك التابع للوسيط e وكذلك أنشأت كائن جرافيك جديد للعنصر MdiClient ولكن النتائج كانت سيئة ومشوهة
حتى توصلت للحل السابق فكانت نتائجه سليمة وتحاكي الأصلية تماماً
تم تعديل هذه المشاركة بواسطة المبرمج أبو أحمد في 9 مايو 2012 في 06:08
ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها
كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور
عليكم السلام ورحمة الله وبركاته
أكرمك الله أخي الكريم وبارك فيك وجزاك الجنة..كنت أبحث عن هذا الحل منذ فترة طويلة لكن أعياني البحث وأسأل الله ألا يحرمك الأجر.
ملحوظة صغيرة : الكود أعلاه ينتج صورة مقلوبة ، ولذلك قمت بقلب الصورة الأصلية حتى تظهر صحيحة :)
شكرا لك أخي مرة أخرى.
من لمح فجر الأجر هان عليه ظلام التكليف
صاحب همة كتب:عليكم السلام ورحمة الله وبركاته
أكرمك الله أخي الكريم وبارك فيك وجزاك الجنة..كنت أبحث عن هذا الحل منذ فترة طويلة لكن أعياني البحث وأسأل الله ألا يحرمك الأجر.
ملحوظة صغيرة : الكود أعلاه ينتج صورة مقلوبة ، ولذلك قمت بقلب الصورة الأصلية حتى تظهر صحيحة :)
شكرا لك أخي مرة أخرى.
وإياكم أخي الطيب
بالنسبة لقلب الصورة أنا لم ألحظها لأني كنت أجرب على صور متناظرة قابلة للتكرار ولكن حلها سهل للغاية
تعليمة النسخ تسمح لك بعمليات تغيير الحجم وقلب أفقي أو عمودي ضمنا
وبالتالي لا يلزمك إلى أنه في حال كان الاتجاه عربي أن تجعل العرض سالبا لقلب الصورة أفقيا والارتفاع سالبا للقلب الأفقي وكلاهما للدوران 180 درجة وهي المشكلة الحالية
أي أنه في الكود السابق
ضع إشارة ناقص أمام البارمترين الرابع والخامس في كل تعليمات StretchDIBits ( العرض والارتفاع للصورة الهدف ) لتقوم الوظيفة بقلب الصورة أثناء النسخ
وحياك الله
تم تعديل هذه المشاركة بواسطة المبرمج أبو أحمد في 9 مايو 2012 في 11:31
ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها
كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…