על האתרהוספה למועדפים

מאת יניב דרוקמן
האובייקט My בויזואל בייסיק 2005

תוכן המאמר:

הקדמה
אחד החידושים הבולטים ב-VB 2005 הוא האובייקט My. אובייקט זה מאפשר למצוא במהירות תכונות, שיטות (methods) ופונקציות נפוצות, הקשורות לתוכנית שלך ולמחשב עליו היא רצה , מבלי הצורך לחפש את המחלקה המתאימה ב-NET Framework..
האובייקט My מאפשר לבצע פעולות מסוימות בקוד קצר מאוד (ופעמים רבות אף בשורה קוד אחת) במצב בו ב-VB .NET 2002/2003 היו נדרשות שורות קוד רבות על מנת לבצע את אותן הפעולות.


האובייקט My
כאמור האובייקט My הוא אובייקט חדש ב-VB, המאפשר לגשת במהירות למחלקות חשובות הקשורות למחשב עליו התוכנית שכתבתם רצה.
היתרונות העיקריים של האובייקט My הם:
1. האובייקט My מקצר בצורה משמעותית את מספר שורות הקוד הנדרש לשם ביצוע פעולות שונות.
2. האובייקט מקל על המתכנת, שכעת לא צריך לזכור/לחפש פקודות שונות, או מה המחלקה הרלבנטית מה-NET Framework.
3. האובייקט הופך את הקוד לפשוט וקל יותר לקריאה.
מעתה ועד לסוף המאמר נלמד על שימושים שונים לאובייקט My, תוך סקירת האובייקטים העיקריים הכלולים בו.
אם לא הבנתם עדיין במה מדובר, אחרי שתראו את ההדגמות הבאות, תבינו עד כמה העניין פשוט וקל.


My.Computer
האובייקט My.Computer מאפשר, כמו שניתן ללמוד משמו, לגשת לרכיבים השונים של המחשב עליו רצה התוכנית שלכם.
למשל, שורת הקוד הבאה:
My.Computer.Audio.Play("c:\windows\media\chimes.wav")
מאפשרת לנגן קובץ צליל (Wave), במקרה הזה את הקובץ c:\windows\media\chimes.wav.
כמו שתראו יש גם הרבה היגיון כאן, כי הגיוני שעניינים הקשורים ל-Audio (צליל) במחשב יהיו קשורים ל-Computer (מחשב) עליו אנו מריצים את התוכנית.
באותה הקלות בה התחלנו לנגן קובץ צליל (ללא שום בקר), ניתן לעצור את ניגון קובץ הצליל בעזרת השורה הבאה:

My.Computer.Audio.Stop()
שימו לב ששתי שורות הקוד הנ"ל לא דורשות מצד המתכנת להשתמש בבקרים מיוחדים, ב-DirectX או ב-API, אלא פשוט לגשת לשיטה המתאימה באובייקט My.Computer.Audio.

בדומה אובייקט My.Computer מכיל התכונות והשיטות הבאות:
השיטה/התכונה
מה היא עושה?
דוגמה
Audio
מאפשרת לנגן קבצי קול במחשב עליו רצה התוכנית.
My.Computer.Audio.Play("C:\WINDOWS\Media\notify.wav", AudioPlayMode.BackgroundLoop)
שורה זו תגרום לניגון הקובץ C:\WINDOWS\Media\notify.wav בלולאה.
Clipboard
מספקת גישה ללוח הגזירים (ה-Clipboard).
MsgBox(My.Computer.Clipboard.GetText())
שורה זו תגרום להצגת הטקסט השמור בלוח הגזירים (במידה ושמור טקסט בלוח הגזירים).
Clock
מאפשרת גישה למידע על זמנים ושעות במחשב עליו רצה התוכנית.
MsgBox(My.Computer.Clock.LocalTime.ToLongDateString)
שורה זו תגרום להצגת התאריך הנוכחי המקומי ב"פורמט ארוך".
FileSystem
מאפשרת לבצע מגוון של פעולות על קבצים וספריות.
My.Computer.FileSystem.WriteAllText("c:\My_Object_Sample.txt", "Hello VB 2005", False)
הקוד הבא יצור קובץ טקסט חדש בשם c:\My_Object_Sample.txt ויכתוב בו את הטקסט "Hello VB 2005" וכל זאת בשורת קוד אחת בלבד!
או למשל, הקוד הבא:
My.Computer.FileSystem.CopyDirectory("c:\Makor", "d:\Yaad", False)
יעתיק את הספריה c:\Makor וכל מה שהיא כוללת לספריה d:\Yaad (הארגומנט False אומר שאם כבר קיימת ספרייה בשם d:\Yaad - אז התוכנית לא "תדרוס" (תכתוב עליה) אותה).
או למשל, הקוד הבא:
MsgBox(My.Computer.FileSystem.FileExists("c:\My_Object_Sample.txt"))
מאפשר לנו לבדוק האם הקובץ c:\My_Object_Sample.txt קיים.
לדעתי, האובייקט My.Computer.FileSystem הוא אחד החלקים החזקים באובייקט My.Computer, שמאפשרים למתכנת לבצע משימות שבעבר היו מורכבות בשורות קוד ספורות ולעיתים אף בשורת קוד אחת בלבד.
Info
מספקת מידע על המחשב עליו רצה התוכנית.
MsgBox(My.Computer.Info.OSFullName)
שורה זו תציג את שמה המלא של מערכת ההפעלה עליה רצה התוכנית.
או למשל, השורה:
MsgBox(Format(My.Computer.Info.TotalPhysicalMemory / 1024 / 1024, "###,### MB"))
תציג את כמות הזיכרון הפיזי המותקן במחשב עליו רצה התוכנית.
Keyboard
מספקת מידע על מצבם של מקשים שונים במקלדת.
MsgBox(My.Computer.Keyboard.NumLock)
שורה זו תציג האם מקש ה-Num Lock לחוץ (True) או לא לחוץ (False).
Mouse
מספקת מידע על החומרה של העכבר.
MsgBox(My.Computer.Mouse.WheelExists)
שורה זו תציג האם לעכבר יש גלגלת (True) או אין (False).
Name
מספקת את שם המחשב (המקומי) עליו רצה התוכנית.
MsgBox(My.Computer.Name)
שורה זו תציג את שם המחשב עליו רצה התוכנית.
Network
מספקת גישה למידע על הרשת אליה מחובר המחשב עליו רצה התוכנית.
My.Computer.Network.DownloadFile("http://www.dr-vb.co.il/images/birthday5.png", "c:\birthday5.png")
שורה זו תוריד את קובץ התמונה birthday5.png מהאתר ותשמור אותו במחשב כקובץ c:\birthday5.png.
Ports
מספקת גישה ליציאה הסריאלית (Serial Port) במחשב עליו רצה התוכנית.
MsgBox(My.Computer.Ports.SerialPortNames(0))
שורה זו תציג את שם היציאה הסריאלית הראשונה במחשב עליו רצה התוכנית.
Registry
מספקת גישה פשוטה ל-Registry של Windows.
MsgBox(My.Computer.Registry.GetValue( _
         "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VBExpress\8.0\", "InstallDir", ""))
שורה זו (המחולקת מטעמי נוחות הקריאה לשתי שורות) תציג את הערך הרשום מהמפתח ומהערך המועברים כארגומנטים (במקרה זה את הספריה בה מותקנת Visual Basic 2005 Express Edition במידה והיא מותקנת על המחשב).
Screen
מספקת גישה למידע אודות הצד והתקן התצוגה (כרטיס המסך).
MsgBox(My.Computer.Screen.WorkingArea.Width)
שורה זו תציג את רוחב שטח העבודה הזמין במסך.
הערה: בגרסאות Beta מוקדמות של VB 2005 הייתה גישה גם להדפסה באמצעות האובייקט My.Computer.Printers, אך אפשרות זו בוטלה ואיננה קיימת בגרסה הסופית וחבל.


My.Application
האובייקט My.Applictaion מכיל מידע על התוכנית שלנו.
למשל, שורת הקוד
הבאה:
MsgBox(My.Application.Info.Copyright)
תציג את מידע זכויות היוצרים על התוכנית שלנו.
או למשל, הקוד הבא:
My.Application.ChangeCulture("he-IL")
MsgBox(Now)
My.Application.ChangeCulture("en-US")
MsgBox(Now)
יציג בתחילה את השעה והתאריך על פי הפורמט הנהוג בישראל (he-IL) ואחר כך על פי הפורמט הנהוג בארצות הברית (en-US) (הערה: בשני המקרים יוצג התאריך הלועזי, אך על פי הפורמט השונה הנהוג בכל אחת מהמדינות).

דוגמאות לשימושים נוספים:
השימוש
דוגמה
גישה למשתני סביבה
MsgBox(My.Application.GetEnvironmentVariable("WINDIR"))
שורה זו תחזיר את הערך של משתנה הסביבה WINDIR, כלומר היא תחזיר את שם הספריה בה מותקנת Windows.
הערה: לחילופין ניתן להשתמש בפונקציה Environ במקום ב-My.Application.GetEnvironmentVariable, למשל:
MsgBox(Environ("WINDIR"))
מציאת הארגומנטים שהועברו לתוכנית בשורת הפקודה
For Each strCommandLineArg As String In My.Application.CommandLineArgs
        MsgBox(strCommandLineArg)
Next
לולאה זו תציג (בתיבת הודעה) את כל אחד מהארגומנטים שהועברו לתוכנית בשורת הפקודה.
מציאת התרבות (Culture) של התוכנית
MsgBox(My.Application.Culture.ToString)
שורה זו תציג את שם התרבות (Culture) של התוכנית שלכם (למשל: he-IL לתרבות עברית-ישראל).
מניעת "קפיאת" התוכנית בביצוע פעולות או חישובים ממושכים
For i As Double = 1 To 1000000000000
        My.Application.DoEvents()
Next
קוד זה יריץ לולאה מ-1 עד 1,000,000,000,000 מבלי "לתקוע" את התוכנית.
DeEvents - גורם לכל ההודעות בתור ההודעות להיות מבוצעות (מבלי שיחכו לסיום ביצועו של הליך).
מציאת גרסת התוכנית
MsgBox(My.Application.Info.Version.ToString)
מציאת שם הספריה ממנה מופעלת התוכנית
MsgBox(My.Application.Info.DirectoryPath)
הדבר מקביל ל-App.Path מויזואל בייסיק 6.
מציאת כמות הזיכרון הפיזי הממופה להליך של התוכנית
MsgBox(My.Application.Info.WorkingSet / 1024 & "KB")


My.User
האובייקט My.User מאפשר לקבל מידע על המשתמשים במערכת עליה רצה התוכנית.
השימוש העיקרי של אובייקט זה, הוא לשם מציאת שם המשתמש המחובר למחשב
:
MsgBox(My.User.Name)
שימוש נפוץ אפשרי נוסף לאובייקט My.User, הוא לשם בדיקה האם למשתמש שמחובר כעת למחשב יש הרשאות של Administrator או לא:
MsgBox(My.User.IsInRole("Administrators"))


My.Forms
האובייקט My.Forms נותן גישה מהירה לאוסף המכיל את הטפסים שבתוכנית שלנו.
למשל, מתכנתי ויזואל בייסיק 6,יודעים כי כדי להציג טופס ששמו Form2, יש להשתמש בקוד הפשוט הבא:

Form2.Show
לעומת זאת מתכנתי VB .NET 2002/2003, על מנת להשיג את אותה תוצאה נדרשו לכתוב שתי שורות קוד:
Dim frm2 As New Form2
frm2.Show()
מתכנתי VB 2005 שוב יכולים לעשות זאת בעזרת שורת קוד אחת, בדומה לויזואל בייסיק 6:
Form2.Show()
אתם בוודאי שואלים: אמנם זה נחמד ואכן מקצר מעט את העבודה, אבל מה הקשר לאובייקט My? התשובה היא שהשורה האחרונה היא למעשה קיצור לשורה הבאה:
My.Forms.Form2.Show()
וניתן להשתמש בשתי הצורות הנ"ל, לפי איך שנוח לכם.


My.WebServices
האובייקט My.WebServices מאפשר גישה מהירה לשירותי אינטרנט, שלפרוייקט שלכם יש Reference אליהם.
למשל בדוגמה הבאה, נראה איך אפשר בשורה אחת לקרוא לשיטה של WebService הממיר בין מטבעות הנהוגים במדינות שונות
:
MsgBox("1 US Dollar = " & My.WebServices.CurrencyExchangeService.getRate("united states", "israel").ToString & " NIS")
הערות:
  1. מידע על ה-WebService בו השתמשנו לשם הדוגמה הזו, ניתן למצוא כאן.
  2. לשם שימוש ב-WebService הנ"ל, יש קודם להוסיף לו WebReference דרך התפריט Project ובחירה ב-Add Web Reference.
    אחר כך יש לכתוב את השורה הבאה כ-URL:
    http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl

    וללחוץ על הכפתור Add Reference.


מציאת תכונות בקלות בעזרת ההשלמה האוטומטית
אמנם אובייקט ה-My מכיל בתוכו אובייקטים רבים ובהם שיטות, תכונות (properties) ופונקציות רבות, אך קל למצוא אותם בעזרת ההשלמה האוטומטית המשולבת בעורך הקוד של VB 2005 (תכונת ההשלמה האוטומטית אינה חדשה, והופיעה עוד בויזואל בייסיק 5).
כדי להדגים איך ניתן למצוא שיטה אותה אנו מחפשים, נחפש פונקציה שמחזירה לנו את המיקום של ספריית המסמכים (My Documents) של המשתמש הנוכחי.
נתחיל לכתוב את הקוד:
ההשלמה האוטומטית מציגה את האפשרויות השונות
כמו שתראו, מנגנון ההשלמה האוטומטית יציג לנו את האפשרויות העומדות בפנינו.
מכיוון שאנו רוצים למצוא את שם ספריית המסמכים, דבר הקשור במחשב של המשתמש בתוכנה, נבחר באובייקט Computer (הבחירה יכולה להיעשות על ידי לחיצה כפולה עם העכבר על שם הפריט המתאים מהרשימה, או על ידי מעבר לשם הפריט (על ידי התחלת כתיבת שם הפריט או מעבר לפריט בעזרת מקשי החצים) ולחיצה על מקש ה-Tab).
המשך הבחירה מתפריט ההשלמה האוטומטית
במה נבחר כעת? מכיוון ששמות ספריות, מן הסתם, קשורות למערכת הקבצים - נבחר ב-FileSystem (דבר הנראה כאפשרות המתאימה ביותר).
כעת נחפש תכונה ששמה יעיד כי היא קשורה לספריות מיוחדות על מחשב המשתמש. נראה כי קיימת תכונה בשם SpecialDirectories, אז נבחר בה ונראה האם היא מתאימה לנו:
חיפוש אחר תכונה מתאימה הקשורה למשימתנו
נראה כי התכונה SpecialDirectories כוללת תכונת משנה בשם MyDocuments, שהגיוני כי בה מוצב שם ספריית המסמכים של המשתמש, ולכן נבחר בתכונה זו:
מציאת תכונה שנראית מתאימה
כדי לבדוק האם צדקנו, נציג את התכונה שמצאנו בתיבת הודעה (message box), כך:
MsgBox(My.Computer.FileSystem.SpecialDirectories.MyDocuments)
נריץ את התוכנית, למשל על ידי לחיצה על המקש F5 (או בחירה ב-Start Debugging מהתפריט Debug) ונראה כי אכן צדקנו.

באופן דומה ניתן למצוא תכונות, פונקציות ושיטות אחרות לביצוע פעולות אחרות, כאשר עוזרים לנו למצוא אותן:
1. ההשלמה האוטומטית בעורך הקוד בויזואל בייסיק.
2. ההיגיון שלנו (בתור מתכנתים).
3. אם ההשלמה האוטומטית וההיגיון לא עזרו, ניתן תמיד להיעזר בעזרה של VB (גם מהדורת ה-Express כוללת עזרה די נרחבת במסגרת MSDN Express Library).


סיכום
ראינו כיצד האובייקט My מסייע לנו להיות יעלים יותר, על ידי ביצוע פעולות בפחות שורות קוד ובפחות זמן, יחסית ל-Visual Basic .NET 2002/2003.
מאמר זה אינו מכסה את כל השימושים האפשריים לאובייקט My, שמן הסתם, תכירו את חלקם תוך כדי תכנות עם VB 2005.
מקווה שהחכמתם מהמאמר.


הערות:
  1. הכתוב במאמר רלבנטי לכל המהדורות של VB 2005.
  2. אם אין לכם את VB 2005, אתם יכולים להוריד את מהדורת ה-Express שלה בחינם מכאן (ההורדה בחינם תקפה עד לתאריך 6/11/2006).

[לחזרה לרשימת המאמרים]

©2000-2012 כל הזכויות שמורות
מומלץ לצפיה עם אינטרנט אקספלורר 5.5 ומעלה עם גודל כתב בינוני (Medium) או עם Mozilla 1.0 ומעלה עם גודל כתב 100%.
על האתר | מדיניות פרטיות | תנאי שימוש