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

مقالة :كيف تنشيء نموذج (Form) به خاصية Mirrored ؟

مغلق
بدأه محمد النحراوي في 23 ديسمبر 2004 · 21 رد · 12,754 مشاهدة · في قسم الدروس والمواضيع المتميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

هذه مقالة أوضح فيها بإذن الله كيف يمكنك أن تنشيء نموذج (Form) به خاصية Mirrored أو المرآة

وخاصية Mirror تختلف عن خاصية RightToLeft فالأولى تقوم بعكس اتجاه النموذج كلياً حتى أزرار التحكم الموجودة أعلى النافذة مثل زر إغلاق Control Box ، بالطبع أعلم أن أكثرنا يفهم عملية المرآة هذه ولكنني سأوضح أسلوب بسيط يجعل من عملية التحويل هذه تحت السيطرة تماماً من قبل المبرمج .

1 - قم بانشاء مشروع جديد وأضف إليه نموذج Form جديد .

2 - قم بإضافة أداة زر Button وأداة عنوان Label جديدين .

3 – قم بتغيير خاصية Text في هذه الأدوات وضع نصوص عربية .

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

سنقوم بتعريف بعض المتغيرات والثوابت في بداية كلاس Class النموذج Form

هذه هي ( ثابتان ومتغير واحد) :

'   هذا الثابت وظيفته إعطاء النموذج خاصية المرآه
Const WS_EX_LAYOUTRTL = &H400000

'أما هذا فوظيفته هي منع تمرير هذه الخاصية إلى الأدوات الموجودة على ذلك النموذج
Const WS_EX_NOINHERITLAYOUT = &H100000

'متغير وظيفته تخزين قيمة الخاصية للرجوع إليها عند احتياجها 
Private _mirrored As Boolean = False

ما هي الخطوة التالية ؟

نقوم بإنشاء خاصية المرآة Mirror

Public Property IsMirrored() As Boolean
        Get
            Return _mirrored
        End Get
        Set(ByVal Value As Boolean)
            If _mirrored <> Value Then
                _mirrored = Value
                MyBase.OnRightToLeftChanged(EventArgs.Empty)
            End If
        End Se
End Property

انتظر لم ننته بعد .... بقي الجزء المسئول عن تنفيذ العملية نفسها

Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Dim CP As System.Windows.Forms.CreateParams = MyBase.CreateParams()
            If IsMirrored Then
                CP.ExStyle = CP.ExStyle Or WS_EX_LAYOUTRTL ' Or WS_EX_NOINHERITLAYOUT ' لو أضفنا هذا لن ينتقل الميرور للأدوات
            End If
            Return CP
        End Get
End Property

الآن بقيت خطوة واحدة غاية في الأهمية وهي الأدوات التي وضعناها على النموذج هل نسيتها ؟

يجب ومهم ولابد وضروري أن تجعل خاصية FlatStyle لهذه الأدوات هي System لأنه بدون ذلك ستظهر لك الكلمات معكوسة عكساً تاماً أي ستجد مثلا كلمة "إضافة" ستجدها "ةفاضإ" لذلك لا تنس تغيير هذه الخاصية للأدوات .

الآن أصبحت جاهزا لتشغيل الخاصية الجديدة في النموذج المعدل

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

Me.IsMirrored = True

وإذا أردت إلغائه اكتب هذا الكود

Me.IsMirrored = False

كلمة أخيرة حتى تصل هذه الخاصية لما تراه الآن أخذت وقتاً بالتأكيد لذا فقط أرجو عند نقلها ذكر المصدر وجزاكم الله خيراً ونفعكم بها .

محمد النحراوي

تم تعديل هذه المشاركة بواسطة محمد النحراوي في 2 ديسمبر 2005 في 05:09

#2

جزاكم الله خيراً

المشكلة ان فيجوال ستوديو 2005 سيأتي بنفس هذه المشكلة و مايكروسوفت لن توفر علينا مجهود الmirroring ابداً..

اقتباس
الـ VB هى الأساس ... بتبرمج بيها بالاحساس

ولا سيمي كولن ولا أقواس ... وتعلمها سهل لكل الناس

راكب فيها موتور نفاث ... دي سريعه جدا وباخلاص

الـ VB هى التراث ... للذكور والايناث :D

الـ VB لغة عريقه ... حتى اسأل Anwarica

من ديوان الشاعر السي شاربي "معتز شمس"
#3

مقال رائع أخي محمد، نشكرك عليه 015

هل ذلك صعب يا Undo على مايكروسوفت؟ ومتى سينتظر المطور العربي حلولاً لمشاكله بصورة سهلة؟، أعتقد بأننا نتحمل المسؤولية لعدمإمطارنا لشركة مايكروسوفت بمطالباتنا كبقية الشعوب.

Learn Japanese :>>> http://www.nouben.com/

#4

السلام عليكم

جزاكم الله خيراً على تعليقاتكم

بالفعل أمر مايكروسوفت محير فهي لا تدعم خاصية ال Mirror ثم تعود وتضع لها حلولاً مشابهه نوعاً لما ذكرته في المقالة ، بعضاً منها مذكور في ال MSDN !! أمرها عجيب __016

#5

أخي النحراوي

هناك مشكله أن الأدوات يتم عكسها يعني الشمال بيجي يمين و اليمين بيجي شمال

#6

السلام عليكم

أخي khabini.com مشكلتك هذه أعتبرها مزية بالنسبة لي :) لأنها تفيدني كثيراً في مسألة البرامج متعددة اللغات ( ربما كان لهذا الأمر مقال آخر )

عموماً يبدو أنك لم تلاحظ تعليق بسيط موجود ضمن الكود وهو :

اقتباس
CP.ExStyle = CP.ExStyle Or WS_EX_LAYOUTRTL ' Or WS_EX_NOINHERITLAYOUT ' لو أضفنا هذا لن ينتقل الميرور للأدوات

وللتوضيح أكثر اقرأ ما ذكرته بالأعلى عند تعريف الثابت :

اقتباس
'أما هذا فوظيفته هي منع تمرير هذه الخاصية إلى الأدوات الموجودة على ذلك النموذج

Const WS_EX_NOINHERITLAYOUT = &H100000

إذاً فكل ما عليك فعله هو أن تعدل السطر

CP.ExStyle = CP.ExStyle Or WS_EX_LAYOUTRTL ' Or WS_EX_NOINHERITLAYOUT

حتى يصير هكذا

CP.ExStyle = CP.ExStyle Or WS_EX_LAYOUTRTL Or WS_EX_NOINHERITLAYOUT

أي تزيل علامة ( ' ) من جوار Or WS_EX_NOINHERITLAYOUT

وهكذا لن تورث صفات النموذج للأدوات الموجودة عليه .

أرجو أن يكون قد اتضح الأمر

وفقك الله تعالى للخير

تم تعديل هذه المشاركة بواسطة محمد النحراوي في 23 ديسمبر 2004 في 14:50

#7

شكرا لك اخي محمد على هذا الشرح ...

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

صراحة لم افهم الكود بشكل جيد و خصوصا الاشياء مثل :

WS_EX_NOINHERITLAYOUT = &H100000

ماهي هذه القيم ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

و شكرا مجددا

يامال الشام ...

#8

السلام عليكم

هذه القيم يا أخي الكريم عبارة عن ثوابت يتم تمريرها إلى الWindow (بالمناسبة Window ليس معناها نموذج Form ، فكل الأدوات والنماذج وغيرها يتعامل معها نظام التشغيل Windows على أنها Windows ) المهم أن نظام التشغيل يعطي خصائص لل Window المحددة بناءاً على القيم المدخلة إليه عبر ExStyle و Style وهذه القيم هي ثوابت محددة ومعرفة من قبل نظام التشغيل نفسه لذلك ستجد هذه القيم ثابتة أياً كانت لغة البرمجة التي تستخدمها .

وحتى لا أطيل عليك سأجيب عن سؤالك الخاص بالثوابت

WS_EX_NOINHERITLAYOUT = &H100000

WS_EX_LAYOUTRTL = &H400000

الأول يمنع توريث صفات الWindow لل Windows الأبناء الموجودة عليه (في حالتنا تلك الدوات الموجودة على النموذج) .

أما الثاني فيفهم منه نظام التشغيل أننا نريد جعل هذا الWindow له خاصية الMirror .

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

جزاكم الله خيراً

تم تعديل هذه المشاركة بواسطة محمد النحراوي في 23 ديسمبر 2004 في 15:12

#9

مشكور على التوضيح اخي مخمد ...

رغم اني لحد الان اواجه العديد من المشاكل في موضوع الوراثة ...

شكرا مجددا

يامال الشام ...

#10

السلام عليكم

شكرا أخي على الشرح و التوضيح

لكني بالفعل عملت كما تقول و لكن النتيجه لا تزال تظهر معي ان الأدوات يتم عكسها تفضل الملف

Mirror.rar

#11

للأسف أنا لست متابعاً تماماً للنقاش في هذه المشاركة الرائعة من أخينا محمد النحرواي، ولكنني فقط أردت أن أقدم لكم رابط مايكروسوفت حول الدعم العربي للغة العربية (قد يكون رابط قديم بالنسبة لبعضكم).... وأرجو أن أردتم خدمات أخرى مثل قهوة أو شاي أن لا تتردوا بالطلب :lol:

http://www.microsoft.com/middleeast/msdn/arabicsupp.aspx#15

Learn Japanese :>>> http://www.nouben.com/

#12

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

اخى khabini.com

يجب ومهم ولابد وضروري أن تجعل خاصية FlatStyle لهذه الأدوات هي System لأنه بدون ذلك ستظهر لك الكلمات معكوسة عكساً تاماً أي ستجد مثلا كلمة "إضافة" ستجدها "ةفاضإ" لذلك لا تنس تغيير هذه الخاصية للأدوات .

{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

br17.gif

برنامج الإتصلات الإدارية والارشيف الالكتروني

برنامج الخبير لنقاط البيع المباشرة

#13

السلام عليكم

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

أخي khabini.com نعم هذه مشكلة ولها حل بسيط آسف لأنني لم أذكره :wacko:

فقط ضع الأدوات داخل جدار حماية مثلاً إما أداة Panel أو GroupBox وبهذه الطريقة لن ترث الأدوات الخاصية حتى الأداة الحاضنة لها لن ترثها مثل الGroup Box

أعتذر مرة اخرى

#15

موضوع مهم جدا وانا شاكر لكل من ساهم فيه

و السؤال لماذا لا نحاول ان نجد حلا لهذا الموضوع

فهناك الكثير من الاداوت التي ليس لها خاصية FlatStyle

فياترى هل من الممكن ربط هذه العملية بخاصية اخرى

او هل يمكننا انشاء خاصية flatstyle للدوات التي ليس لها هذه الخاصة وربطها بهذه العملية وبالتالي نتجاوز المشكلة

__016

#16
اقتباس
المشكلة ان فيجوال ستوديو 2005 سيأتي بنفس هذه المشكلة و مايكروسوفت لن توفر علينا مجهود الmirroring ابداً..

اسحب كلامي بعد حضوري للMDC2005 ..

هناك خاصية جديدة اسمها RightToLeftLayout ستقوم بما تقوم به خاصية IsMirrored في كود محمد النحراوي..

الخاصية ستكون موجودة في جميع الادوات بالمناسبة و بالتالي سنستطيع اخيراً توفير مجهود الmirroring :D :D

اقتباس
الـ VB هى الأساس ... بتبرمج بيها بالاحساس

ولا سيمي كولن ولا أقواس ... وتعلمها سهل لكل الناس

راكب فيها موتور نفاث ... دي سريعه جدا وباخلاص

الـ VB هى التراث ... للذكور والايناث :D

الـ VB لغة عريقه ... حتى اسأل Anwarica

من ديوان الشاعر السي شاربي "معتز شمس"
#17

بشرى طيبة

هل هناك مقالة حول هذ الأمر لنطلع عليها أخي undo ?

#19

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

وين اكتب الكود لو تكرمت

ارفق الكود مع الرد

فضلا لا امراً

لك من جزيل الشكر

#20

السلام عليكم

أخي الكريم

بعد هذا ال region

Windows Form Designer generated code

اكتب الكود المذكور

#21

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

جزاك الله خيرا يا اخ محمد بانك تفيدنا في خبراتك أسأل الله أن يكتب لك الأجر والمثوبة

أنا في الحقيقة جربت ما نفذته سابقا واشتغل معي تمام إلا ان بداخل أداة ال tree كما تلاحظ في الصورة المرفقة لا زالت تعرض من اليسار إلى اليمين فهل من حل جزاك الله خيرا.

post-34456-1110008502_thumb.jpg

#22

وعليكم السلام ورحمة الله

وجزاك الله خيراً وبارك فيك

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

بكلمات أخرى تأكد من أن السطر التالي ليس هو المكتوب بل الكود الذي يليه :

CP.ExStyle = CP.ExStyle Or WS_EX_LAYOUTRTL Or WS_EX_NOINHERITLAYOUT  ' لو أضفنا هذا لم ينتقل الميرور للأدوات

هكذا :

CP.ExStyle = CP.ExStyle Or WS_EX_LAYOUTRTL

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

تم تعديل هذه المشاركة بواسطة محمد النحراوي في 5 مارس 2005 في 19:27

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

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