في VB، يتم تعريف نموذج MDI (MultipleDocumentInterface، برنامج متعدد النوافذ) على النحو التالي: "يعمل نموذج MDI كنافذة خلفية لبرنامج ويحتوي على نموذج مع تعيين سمة MDIChild على True." في برنامج VB، يمكن أن يكون هناك نموذج أصل MDI واحد على الأكثر، كما يمكن أن يكون هناك نماذج فرعية متعددة لـ MDI؛ تتمثل طريقة إنشاء نموذج أصل MDI في تحديد "NewMDIForm" في القائمة "ملف" في VB.
عند تشغيل برنامج MDI، إذا كانت النافذة الفرعية تحتوي على قائمة، فعند تنشيط النافذة الفرعية، ستحل قائمة النافذة الفرعية تلقائيًا محل قائمة النافذة الأصلية عند تصغير النافذة الفرعية، وستظهر النافذة الفرعية في MDI أيقونة النافذة الأم
إن ظهور الواجهة الرسومية العالمية لنظام Windows يمكّن مستخدمي الكمبيوتر من استخدام برامج Windows المختلفة بسهولة دون الحاجة إلى تعلم خاص؛ وليس ذلك فحسب، بل يعد أيضًا معيارًا يجب على مصممي البرامج اتباعه عند تصميم واجهة برامج Windows، مما يقلل العبء بشكل كبير مصممي البرامج، مما يسمح لهم بالتركيز على حل المشكلات وتنفيذها.
لقد أدى ظهور Visual Basic إلى تبسيط تصميم واجهات برامج Windows، ولا يلزم سوى كمية صغيرة جدًا من التعليمات البرمجية لتنفيذ واجهة تطبيقات Windows القياسية. ومع ذلك، إذا كنت لا تفهم مبادئ تصميم واجهة برنامج Windows، أو لم تكن على دراية بمهارات برمجة الواجهة تحت VB، فسيكون من الصعب تصميم وتنفيذ واجهة تتوافق مع المعايير العامة وتكون فريدة من نوعها. مبادئ تصميم الواجهة تصميم الواجهة له مبادئ عامة، من أهمها:
يجب أن تكون الواجهة متسقة. مبدأ الاتساق هو الأسهل في تصميم الواجهة، وهو الأسهل في التعديل والتجنب. على سبيل المثال، يجب استخدام نفس المصطلحات في القوائم ومربعات الحوار الخاصة بالمساعدة يجب أن يكون لها نفس النمط.
يجب أن تكون هناك اختصارات للعمليات المشتركة. يتم استخدام العمليات المشتركة بشكل متكرر ويجب تقليل طول تسلسل العمليات. على سبيل المثال، قم بتعيين مفاتيح الاختصار لعمليات الملفات الشائعة مثل الفتح والحفظ والحفظ باسم. لن يؤدي توفير اختصارات للعمليات المشتركة إلى تحسين كفاءة عمل المستخدم فحسب، بل سيجعل الواجهة أيضًا بسيطة وفعالة في التنفيذ الوظيفي.
توفير معالجة بسيطة للأخطاء. يجب أن يتمتع النظام بقدرات معالجة الأخطاء. يجب أن يكون النظام قادرًا على اكتشاف الأخطاء عند حدوثها وتوفير إمكانات بسيطة ومفهومة لمعالجة الأخطاء. لا تتغير حالة النظام بعد حدوث خطأ، أو يحتاج النظام إلى توفير إرشادات لاستعادة الخطأ.
تقديم ردود فعل المعلومات. يجب أن تكون هناك تعليقات معلوماتية للعمليات المهمة للمشغل. ليست هناك حاجة للتعليقات على العمليات البسيطة شائعة الاستخدام، ولكن بالنسبة للعمليات الحاسمة وقليلة الاستخدام، يجب أن يوفر النظام تعليقات معلوماتية.
العملية قابلة للعكس. يجب أن تكون العملية قابلة للعكس. وهذا مفيد للمشغلين الذين ليس لديهم معرفة متخصصة. يمكن أن يكون الإجراء القابل للعكس عبارة عن عملية واحدة أو سلسلة عمليات مستقلة نسبيًا.
مساعدة مصممة بشكل جيد عبر الإنترنت. على الرغم من أن المساعدة عبر الإنترنت ليست ضرورية للمستخدمين المهرة، إلا أنها تلعب دورًا مهمًا للغاية بالنسبة لمعظم المستخدمين غير المهرة.
مبادئ تصميم القائمة والبرمجة
يحتوي تصميم القائمة على المبادئ العامة التالية:
تنظيم القوائم حسب وظائف النظام.
اختر شجرة قائمة واسعة وضحلة بدلاً من شجرة قائمة ضيقة وعميقة.
قم بتجميع خيارات القائمة حسب معناها وفرزها وفقًا لقواعد معينة. يجب أن تكون عناوين خيارات القائمة قصيرة وواضحة، ويفضل أن تبدأ بكلمة رئيسية.
يجب تعيين مفاتيح الاختصار للخيارات المستخدمة بشكل متكرر. من خلال الجمع بين المبادئ المذكورة أعلاه، تحتوي برمجة القائمة على التقنيات والتقنيات التالية:
تجميع خيارات القائمة
في VB، يتم تجميع خيارات القائمة عن طريق تقسيم شريط القائمة بخطوط أفقية. أضف عنصر قائمة بسمة تسمية توضيحية "" في موضع معين في القائمة، وسيظهر كخط أفقي في القائمة. في كثير من الحالات، يمكن تقسيم قائمة الوظائف نفسها إلى عدة مجموعات وفقًا لوظائف خيارات القائمة، وفي هذه الحالة، يمكن استخدام الخطوط الأفقية المقسمة لتجميع عناصر القائمة.
إعدادات مفاتيح الاختصار للخيارات الشائعة
افتح نافذة تصميم القائمة (MenuDesignWindow). يجب أن تكون هناك قائمة مفاتيح اختصار (Shortcut) مقابلة لكل خيار من خيارات القائمة. تجدر الإشارة إلى أنه لا يمكن تعريف مفاتيح الاختصار للقوائم ذات القوائم الفرعية أو قوائم المستوى الأعلى بهذه الطريقة. وفقًا لمبادئ تصميم واجهة Windows، يكون مفتاح الاختصار للقائمة العلوية على شكل مفتاح الحرف Alt. وسيتم وصف طريقة تنفيذها لاحقا.
بالنسبة لبعض عناصر قائمة الوظائف شائعة الاستخدام، توجد مفاتيح اختصار تقليدية. على سبيل المثال، استخدم CTRL O لفتح ملف، وCRTL S لحفظ ملف، وCTRL P للطباعة، وما إلى ذلك.
بعد تحديد مفتاح اختصار لخيار القائمة، يظهر تمثيل نصي لمفتاح الاختصار خلف الخيار الموجود في القائمة.
تمكين وتعطيل خيارات القائمة المرئية والمخفية للتعبير عن بعض الوظائف الخاصة لخيارات القائمة، يمكن استخدام سمات التمكين والتعطيل والمرئية والمخفية لخيارات القائمة. عندما لا يمكن تحقيق الوظيفة التي يمثلها خيار ما لسبب ما، فيجب منع اختيار الخيار. يتم تمكين خيارات القائمة وتعطيلها عن طريق تغيير السمة Enabled الخاصة بالخيار. على سبيل المثال، بافتراض أن خيار القائمة يسمى nmuName، يمكن تنفيذ تعطيل هذا الخيار على النحو التالي:
mnuName.Enabled=False
وبنفس الطريقة، يمكنك إخفاء خيار باستخدام
mnuName.Visible=False
ولتحقيق ذلك، استخدم لجعل الخيار المخفي مرئيًا مرة أخرى
mnuName.Visible=True
ينجز.
غالبًا ما يتم استخدام إخفاء عناصر القائمة واستعادتها في تنفيذ القوائم الديناميكية.
التحميل الديناميكي لعناصر القائمة
التحميل الديناميكي لعناصر القائمة يعني أن عدد عناصر القائمة غير ثابت ويمكن تحميله ديناميكيًا عند الحاجة. أبسط مثال هو قائمة الملفات المفتوحة مؤخرًا في قائمة "ملف". قبل فتح ملف لأول مرة، تكون القائمة فارغة ولا تظهر في قائمة الملفات؛ بعد فتح الملف، لم تعد القائمة فارغة، ويظهر عنصر القائمة الذي يمثل الملف المفتوح في قائمة الملفات.
في المثال أعلاه، يتم استخدام السمة المنخفضة (الفهرس)، وسمة العنوان (التسمية التوضيحية)، والسمة المرئية (مرئية) لعنصر القائمة وطريقة التحميل (LoadMethod) لعنصر القائمة بشكل شامل.
عملية التنفيذ المحددة هي كما يلي:
أضف عنصر قائمة إلى قائمة الملف بعنوان عشوائي، وافترض أن سمة اسم عنصر القائمة هي open_files_list؛
قم بتغيير السمة المرئية لعنصر القائمة open_files_list بحيث open_files_list.Visible=False
قم بتغيير السمة المنخفضة لعنصر القائمة open_files_list بحيث
open_files_files_list.Index=0
التحكم في التحميل الديناميكي لعنصر القائمة open_files_list في البرنامج.
لنفترض أنك تريد عرض اسم الملف للملف الثاني الذي تم فتحه، ويتم تخزين اسم الملف في مصفوفة اسم الملف open_file_name. الكود التالي ينفذ هذه الوظيفة:
تحميل_ملفات_قائمة(1)
open_files_lise(1).التسمية = "&2" open_file_name(1)
open_files_list(1).مرئي=صحيح
تجدر الإشارة إلى أنه لا يمكن استخدام أسلوب التحميل لعناصر القائمة التي يكون رمزها المنخفض 0. نظرًا لأنه تم تحميل عنصر القائمة في الذاكرة عند تنفيذ البرنامج، فإن الحرف "&" في سمة العنوان لعنصر القائمة له معنى خاص، وتتمثل وظيفته في عرض سلسلة السمة في نفس الوقت، لا يتم عرض "&" نفسه، ولكن يتم عرض الحرف الذي يلي "&" مباشرة مع تسطير، ويصبح الحرف مفتاح تشغيل سريع.
إذا لم تعد هناك حاجة إلى عنصر القائمة الذي لم يكن فهرسه 0، فمن أجل تقليل احتلال موارد الذاكرة، يمكنك استخدام طريقة Unload لإلغاء تحميله من الذاكرة بالمثل، ولا يمكنك استخدام Unload لإلغاء تحميل عنصر القائمة الذي يحتوي فهرسه هو 0.
تنفيذ القائمة المنبثقة (PopupMenuMethod)
القائمة المصممة في نافذة تصميم القائمة (MenuDesignWindow) في VB هي قائمة منسدلة. القائمة المنسدلة هي قائمة يمكن للمستخدم سحبها بعد إجراء تحديد في شريط القوائم العلوي في أي وقت، أما القائمة المنبثقة فهي قائمة تظهر بعد النقر فوق زر الفأرة في منطقة معينة من واجهة البرنامج. في بعض الحالات، يمكن للقوائم المنبثقة أن تجعل وظائف النظام أكثر إيجازًا وكفاءة، مما يجعلها أسهل في الاستخدام.
تظهر القائمة المنبثقة لبرنامج Widnows بشكل عام عندما يقوم المستخدم بالنقر فوق زر الماوس الموجود على سطح مكتب البرنامج. تُستخدم القوائم المنبثقة في الغالب لتنفيذ وظائف إضافية أو محسنة للنظام. يمكن أن تتغير محتويات القائمة المنبثقة اعتمادًا على مكان النقر فوق زر الماوس. نظرًا لأن القائمة المنبثقة ستغطي جزءًا من الشاشة، فيجب اختصار النص الموجود في القائمة قدر الإمكان.
في VB، يتطلب تنفيذ القوائم المنبثقة استخدام تقنية تصميم القائمة المنسدلة وطريقة PopupMenu. الطريقة المحددة هي:
قم بتصميم القائمة المنبثقة للنموذج المقابل في نافذة تصميم القائمة (MenuDesignWindow). تجدر الإشارة إلى أن القائمة التي سيتم عرضها يجب أن تحتوي على قائمة فرعية واحدة على الأقل؛ لذلك لا يمكن أن تحتوي هذه القائمة على مفاتيح اختصار، ويجب أن تكون السمة المحددة خطأ. ثم قم بتغيير الخاصية مرئي في القائمة المنبثقة إلى خطأ.
أضف التعليمة البرمجية التالية إلى Form_Click للنموذج مع القائمة المنبثقة المصممة (بافتراض أن خاصية الاسم في القائمة المنبثقة هي mnuExample):
SubForm_Click()
PopupMenumnuExample
EndSub
إذا كنت تطلب أنه لا يمكن تنشيط القائمة إلا عن طريق الضغط على زر الفأرة الأيسر أو الأيمن، فيجب عليك إضافة الكود التالي إلى Form_MouseDown:
SubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
IfButton=2thenButton=2 يعني زر الفأرة الأيمن
PopupMenumnuExample
EndIf
بناء الجملة الكامل لـ PopupMenu هو:
[Form.]PopupMenumenuname[flags[,x[,y]]]
يمكن أن يؤدي تغيير قيمة العلامات إلى التحكم في مظهر القائمة المنبثقة. الأعلام لها مجموعتان من القيم. يتم استخدام المجموعة الأولى من القيم للتحكم في وضع عرض القائمة، بما في ذلك POPUPMENU_LEFTALIGNPOPUPMENU_CENTERALIGN وPOPUPMENU_RIGHTALIGN، والتي تمثل على التوالي وضع العرض مع x كالحد الأيسر، وx كالمركز وx كالحد الأيمن. واستخدام x كحد أيسر هو الأسلوب الافتراضي؛ حيث يتم استخدام مجموعة أخرى من القيم للتحكم في طريقة تحديد عناصر القائمة، بما في ذلك POPUPMENU_LEFTBUTTON وPOPUPMENU_RIGHTBUTTON، والتي تشير على التوالي إلى تحديد النقر بزر الماوس الأيسر واختيار النقر بزر الماوس الأيمن/الأيسر، و اختيار النقر بزر الماوس الأيسر هو الطريقة الافتراضية. يتم الحصول على قيمة الأعلام عن طريق ORing مجموعتي القيم أعلاه. على سبيل المثال، إذا كان مطلوبًا محاذاة شاشة العرض إلى اليسار وتم تحديد الزر الأيسر، فيجب أن تكون:
الأعلام=POPUPMENU_LEFTALIGNORPOPUPMENU_LEFTBUTTON
يتم استخدام x وy لتحديد موضع القائمة المنبثقة، والوضع الافتراضي هو موضع نقطة الماوس.
خصائص أخرى لعناصر القائمة
استخدم مفتاح الحرف ALT لتنشيط قائمة المستوى الأعلى، أو استخدم مفتاح الحرف لتنشيط عنصر القائمة بعد تنشيط القائمة. يجب أن تتعلم استخدام &. & يُستخدم في سمة العنوان (التسمية التوضيحية) لعنصر القائمة. استخدامه ووظيفته هما نفس تلك الموجودة في برامج Windows المجمعة بلغة C.
في بعض الأحيان تريد أن تكون المسافة بين قوائم المستوى الأعلى أكبر، أو أن تظهر قائمة المستوى الأعلى في الطرف الأيمن من شريط القائمة. في هذه الحالة، تحتاج إلى استخدام قائمة تكون سمة عنوانها عبارة عن مسافة. إذا كان عنوان القائمة يتكون من مسافات متعددة، فستشغل القائمة المساحة المقابلة لعدد المسافات في شريط القائمة، وسيتم أيضًا نقل القوائم الموجودة خلفها إلى الخلف بشكل تسلسلي إذا كانت الخاصية مرئية لهذه القائمة باطل، كأنه غير موجود.
مبادئ وأمثلة تصميم النوافذ
فيما يلي مثال على تقنية النوافذ العائمة. من أجل جذب انتباه المستخدم، أو لضمان عدم تغطية النوافذ التي تحتوي على معلومات مهمة بواسطة نوافذ أخرى، يتم استخدام تقنية النافذة العائمة لإنشاء نافذة "TopMost". الطريقة المحددة هي:
(1) أضف العبارة التالية إلى برنامج VB:
DeclareFunctionSetWindowPosLib"user"(Byvalh,Byvalhb,Byvalx,Byvaly,By
valcx,Byvalcy,Byvalf)AsInteger
GlobalConstSWP_NOMOVE=2
GlobalConstSWP_NOSIZE=1
GlobalConstHWND_TOPMOST=1
GlobalConstHWND_NOTOPMOST=2
GlobalConstFLAGS=SWP_NOMOVEأوSWP_NOSIZE
(2) افترض أنك تريد تعيين النموذج frmExample ليكون النافذة الموجودة دائمًا في المقدمة، فقط قم بتعيين النموذج في Form_Load للنموذج frmExample.
أضف الكود التالي إلى العملية:
فشل خافت
Success=SetWindowPos(frmExample.hWnd,HWND_TOPMOST,0,0,0,0,FLAGS)
إذا كنت تريد إلغاء الميزة الموجودة دائمًا في المقدمة، فيمكنك تنفيذ الكود التالي:
Success=SetWindowPos(frmExample.hWnd,HWND_NOTOPMOST,0,0,0,0,FLAGS)
النجاح لا يساوي 0، مما يعني أنه تم تنفيذ SetWindowPos بنجاح.
في برنامج MDI، تكون إحدى النوافذ هي النافذة الأصلية لجميع النوافذ الأخرى، وتكمل كل نافذة فرعية وظيفة مستقلة نسبيًا، تمامًا مثل مجموعة من الأدوات المستقلة المتعددة. وفي هذا الصدد، يعد MSWord وFileManager لـ Windows أفضل الأمثلة. ->