‡ المحتويات‡
سوف نتحدث عن القوائم و أِرطة الأداوت فى مكتبات WinForms فى هذا الجزء من الدرس
شريط القوائم من أهم الأجزاء فى أى تطبيق بواجهه رسومية و هى مجموعة من الأوامر على هيئة قوئم و بينما فى التطبيقات النصية فى سطر الأوامر لا بد من معرفة جميع الأوامر التى يوفرها التطبيق حتى تتعامل معه بشكل جيد سوف يتوفر لك فى الواجهه الرسومية الأامر عن طريق قوائم سلسة مما يسهل لك تعلم البرنامج إن كان جديداً بسهولة و سرعة.
فى المثال الأول سوف نقوم بإنشاء قائمة بسيطة.
simplemenu.py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form from System.Windows.Forms import Keys, MenuStrip, ToolStripMenuItem from System.Drawing import Size class IForm(Form): def __init__(self): self.Text = 'Simple Menu' self.Size = Size(250, 200) ms = MenuStrip() ms.Parent = self filem = ToolStripMenuItem("&File") exit = ToolStripMenuItem("&Exit", None, self.OnExit) exit.ShortcutKeys = Keys.Control | Keys.X filem.DropDownItems.Add(exit) ms.Items.Add(filem) self.MainMenuStrip = ms self.CenterToScreen() def OnExit(self, sender, event): self.Close() Application.Run(IForm())
فى المثال هناك شريط ثوائم و بداخلة قائمة واحدة و بداخل هذه القائمة عنصر إذا ضغطنا عليه يتم إغلاق التطبيق.
الحظ أنه يمكننا إغلاق التطبيق بعدة طرق فمثلاً يمكننا ذلك عن طريق الإختصار Ctrl+X أو الضغط على Alt و أزرة F و E.
ms = MenuStrip()MenuStrip تنشأ نظام ثوائم فى النافذة و لقد أضفنا كائن ToolStripMenuItem إلى الـMenuStrip و الذى يمثل أمر منفرد فى بنية القائمة و كل ToolStripMenuItem يمكنه أن يكون أمر فى التطبيق أو قائمة حاوية لأى عنصر متفرع آخر submenu item.
filem = ToolStripMenuItem("&File") هنا تم إنشاء القائمة.
exit = ToolStripMenuItem("&Exit", None, self.OnExit)
و فى هذا السطر تم إنشاء عنصر القائمة exit.
exit.ShortcutKeys = Keys.Control | Keys.Xو هنا قمنا بإضافة إختصار إلى عنصر القائمة exit.
filem.DropDownItems.Add(exit)عنصر القائمة exit تمت إضافته إلى العناصر المنسدلة من كائن القائمة.
ms.Items.Add(filem) هنا أضفنا كائن القائمة إلى menu strip.
self.MainMenuStrip = msهنا تم إدخال الــMenuStrip فى النافذة.
Figure: Simple menu
أى قائمة يمكن أيضاً أن تكون قائمة فرعية و بهذه الطريقة يمكننا تجميع الأوامر المتشابهه فى مجموعتا و كمثال يمكننا وضع الأوامر التى تخفى و تظهر شرائط الأدوات مثل الشريط الشخصى personal bar و شريط العنوان adress bar و شريط المعلومات أو الحالة status bar أو شريط الذهاب إلى صفحة ويب navigation bar داخل قائمة فرعية تسمى أشرطة الأداوت toolbars.
submenu.py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form from System.Windows.Forms import MenuStrip, ToolStripMenuItem from System.Drawing import Size class IForm(Form): def __init__(self): self.Text = 'Simple Menu' self.Size = Size(380, 200) ms = MenuStrip() ms.Parent = self filem = ToolStripMenuItem("&File") exit = ToolStripMenuItem("&Exit", None, self.OnExit) importm = ToolStripMenuItem() importm.Text = "Import" filem.DropDownItems.Add(importm) temp = ToolStripMenuItem() temp.Text = "Import newsfeed list..." importm.DropDownItems.Add(temp) temp = ToolStripMenuItem() temp.Text = "Import bookmarks..." importm.DropDownItems.Add(temp) temp = ToolStripMenuItem() temp.Text = "Import mail..." importm.DropDownItems.Add(temp) filem.DropDownItems.Add(exit) ms.Items.Add(filem) self.MainMenuStrip = ms self.CenterToScreen() def OnExit(self, sender, event): self.Close() Application.Run(IForm())
فى هذا المثال قمنا بإنشاء قائمة فرعية واحدة و تحتوى على ثلاث عناصر قائمة.
importm = ToolStripMenuItem() importm.Text = "Import"
ToolStripMenuItem يمكنها أن تكون قائمة فرعية أو قائمة و لكن هنا سوف تكون فائمة فرعية.
temp = ToolStripMenuItem() temp.Text = "Import newsfeed list..." importm.DropDownItems.Add(temp)
هنا أنئشأنا عنصر قائمة و أضفناه إلى القائمة الفرعية Import.
Figure: Submenu
فى هذا الكود سوف نتعرض إلى كيفية إنشاء عنصر قائمة قابل للتحديد.
checkmenuitem.py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, StatusBar from System.Windows.Forms import Shortcut, MainMenu, MenuItem from System.Drawing import Size class IForm(Form): def __init__(self): self.Text = 'Simple Menu' self.sb = StatusBar() self.sb.Parent = self self.sb.Text = "Ready" mainMenu = MainMenu() filem = mainMenu.MenuItems.Add("&File") filem.MenuItems.Add(MenuItem("E&xit", self.OnExit, Shortcut.CtrlX)) view = mainMenu.MenuItems.Add("&View") self.viewStatusBar = MenuItem("View StatusBar") self.viewStatusBar.Checked = True self.viewStatusBar.Click += self.ToggleStatusBar view.MenuItems.Add(self.viewStatusBar) self.Menu = mainMenu self.Size = Size(250, 200) self.CenterToScreen() def OnExit(self, sender, event): self.Close() def ToggleStatusBar(self, sender, event): check = self.viewStatusBar.Checked if (check): self.sb.Visible = False self.viewStatusBar.Checked = False else: self.sb.Visible = True self.viewStatusBar.Checked = True Application.Run(IForm())
ليدنا قائمتين File و View و القائمة View تحتوى على عنصر قائمة يحدد إظهار أو إخفاء شريط الحالة.
mainMenu = MainMenu()فى هذا المثال استخدمنا الأداة MainMenu و لكى ننشأ قائمة يمكننا استخدام إما MainMenu أو MenuStrip و الأخيرة بها خيارات إضافية.
self.viewStatusBar.Checked = Trueهذه القائمة افتراضياً محددة لأن شريط الحالة ظاهر عند بدأ البرنامج.
check = self.viewStatusBar.Checked if (check): self.sb.Visible = False self.viewStatusBar.Checked = False else: self.sb.Visible = True self.viewStatusBar.Checked = True
هنا نربط بين تحديد شريط القوائم و حالة شريط الحالة من حيث الظهر أو الإخفاء فإذا كان شريط الحالة ظاهر يكون عنصر القائمة محدد و إذا لم يكن يكون عنصر القائمة غير محدد و تعتمد تحديد أو إلغاء تحديد عنصر القائمة على قيمة check.
Figure: Check menu item
سوف نتعرض و نعرف أكثر عن الأداة MenuStrip فسوف ننشأ عنصر قائمة يحتوى على صورة و أيضاً كيفية فصل العناصر بفاصل sperator.
menustrip.py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, MenuStrip from System.Windows.Forms import ToolStripMenuItem, ToolStripSeparator from System.Drawing import Size, Image class IForm(Form): def __init__(self): self.Text = 'MenuStrip' self.Size = Size(250, 200) menuStrip = MenuStrip() titem1 = ToolStripMenuItem("File") menuStrip.Items.Add(titem1) titem2 = ToolStripMenuItem("Tools") menuStrip.Items.Add(titem2) subm1 = ToolStripMenuItem("New") subm1.Image = Image.FromFile("new.png") titem1.DropDownItems.Add(subm1) subm2 = ToolStripMenuItem("Open") subm2.Image = Image.FromFile("open.png") titem1.DropDownItems.Add(subm2) titem1.DropDownItems.Add(ToolStripSeparator()) subm3 = ToolStripMenuItem("Exit") subm3.Image = Image.FromFile("exit.png") titem1.DropDownItems.Add(subm3) subm3.Click += self.OnExit self.Controls.Add(menuStrip) self.MainMenuStrip = menuStrip self.CenterToScreen() def OnExit(self, sender, event): self.Close() Application.Run(IForm())
فى كود المثال لدينا قائمتين File و Tools و فى القائمة File لدينا ثلاثة عناصر تحتوى على صور و لدينا أيضاً فاصل واحدو لايد أن تكون الصور بنوع png موجودة داخل مجلد العمل الذى يحتوى على التطبيق.
subm1 = ToolStripMenuItem("New") subm1.Image = Image.FromFile("new.png") titem1.DropDownItems.Add(subm1)
هنا أنشأنا أول عنصر قائمة و لإضافة صورة غيرنا الخاصية Image إلى الصورة المرادة عن طريق إنشاء صورة من ملف بإٍتخدام الدالة FormFile().
titem1.DropDownItems.Add(ToolStripSeparator())هنا أضفنا فاصل للقائمة File.
Figure: Images and separator
القوائم المنسدلة تجمع جميع الأوامر التى من الممكن أن نستخدمها فى التطبيق أما أشرطة الأدوات فتعطى وصولاً سريعاً لأهم و أكثر الأوامر استخداماً فى التطبيق.الأداة ToolBar تستخدم لعرض الأداة ToolBarButton زر شريط أدواتو من الممكن وضع صورة للزر عن طريق إنشاء ImageList ثخصيصها للخاصية ImageList فى شريط الأدوات و تحديد رقم فهرسة الصورة فى الخاصية ImageIndex لكل زر ToolBarButton.
toolbar.py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") clr.AddReference("System") from System.Windows.Forms import Application, Form from System.Windows.Forms import ToolBar, ToolBarButton, ImageList from System.Drawing import Size, Icon class IForm(Form): def __init__(self): self.Text = 'Simple ToolBar' self.Size = Size(250, 200) toolBar = ToolBar() toolBarIcons = ImageList() save = ToolBarButton() exit = ToolBarButton() save.ImageIndex = 0 save.Tag = "Save" exit.ImageIndex = 1 exit.Tag = "Exit" toolBar.ImageList = toolBarIcons toolBar.ShowToolTips = True toolBar.Buttons.AddRange((save, exit)) toolBar.ButtonClick += self.OnClicked toolBarIcons.ImageSize = Size(16, 16) toolBarIcons.Images.Add(Icon("new.ico")) toolBarIcons.Images.Add(Icon("exit.ico")) self.Controls.Add(toolBar) self.CenterToScreen() def OnClicked(self, sender, event): if event.Button.Tag == "Exit": self.Close() Application.Run(IForm())
فى مثالنا عرضنا زرين على شريط الأدوات.
toolBar = ToolBar()هنا أنشأنا الأداة ToolBar.
toolBarIcons = ImageList()هنا أنشأنا قائمة الصور image list.
save = ToolBarButton() exit = ToolBarButton()
هناك زرين أشرطة أداوت.
save.ImageIndex = 0حددنا أى أيكونة سوف تستخدم من قائمة الصور للزر save.
toolBar.Buttons.AddRange((save, exit))الأدوات ToolBarButton تم إضافتها إلى شريط الأدوات.
toolBarIcons.Images.Add(Icon("new.ico")) toolBarIcons.Images.Add(Icon("exit.ico"))
تمت إضافة الأيكونات إلى قائمة الصور.
if event.Button.Tag == "Exit": self.Close()
إذا كان وسم الزر يساوى "Exit” فسوف يغلق التطبيق.
Figure: ToolBar
هذا الجزء من الدرس يتحدث عن أشرطة الأداوت و القوائم.
‡ المحتويات‡