תוכן המאמר:
הקדמה
אחד החידושים הבולטים
ב-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 (מחשב) עליו אנו מריצים את התוכנית.
באותה הקלות בה התחלנו לנגן קובץ צליל (ללא שום בקר), ניתן לעצור את ניגון
קובץ הצליל בעזרת השורה הבאה:
שימו לב ששתי שורות הקוד הנ"ל לא דורשות מצד המתכנת להשתמש בבקרים
מיוחדים, ב-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 מאפשר לקבל מידע על המשתמשים במערכת עליה רצה התוכנית.
השימוש העיקרי של אובייקט זה, הוא לשם מציאת שם המשתמש המחובר למחשב:
שימוש נפוץ אפשרי נוסף לאובייקט My.User, הוא לשם בדיקה האם למשתמש שמחובר
כעת למחשב יש הרשאות של Administrator או לא
:
| MsgBox(My.User.IsInRole("Administrators")) |
My.Forms
האובייקט My.Forms נותן גישה מהירה לאוסף המכיל את הטפסים שבתוכנית שלנו.
למשל, מתכנתי ויזואל בייסיק 6,יודעים כי כדי להציג טופס ששמו Form2, יש
להשתמש בקוד הפשוט הבא:
לעומת זאת מתכנתי VB .NET 2002/2003, על מנת להשיג את אותה תוצאה נדרשו
לכתוב שתי שורות קוד
:
Dim frm2 As New Form2
frm2.Show()
|
מתכנתי VB 2005 שוב יכולים לעשות זאת בעזרת שורת קוד אחת, בדומה לויזואל
בייסיק 6:
אתם בוודאי שואלים: אמנם זה נחמד ואכן מקצר מעט את העבודה, אבל מה הקשר
לאובייקט
My? התשובה היא שהשורה האחרונה היא למעשה קיצור לשורה הבאה:
וניתן להשתמש בשתי הצורות הנ"ל, לפי איך שנוח לכם.
My.WebServices
האובייקט My.WebServices מאפשר גישה מהירה לשירותי אינטרנט, שלפרוייקט
שלכם
יש Reference אליהם.
למשל בדוגמה הבאה, נראה איך אפשר בשורה אחת לקרוא לשיטה של WebService
הממיר בין מטבעות הנהוגים במדינות שונות:
| MsgBox("1 US Dollar = " & My.WebServices.CurrencyExchangeService.getRate("united states", "israel").ToString & " NIS") |
הערות:
- מידע על ה-WebService בו השתמשנו לשם הדוגמה הזו, ניתן למצוא כאן.
- לשם שימוש ב-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.
מקווה שהחכמתם מהמאמר.
הערות:
- הכתוב במאמר רלבנטי לכל המהדורות של VB 2005.
- אם אין לכם את VB 2005, אתם יכולים להוריד את מהדורת ה-Express שלה
בחינם מכאן
(ההורדה בחינם תקפה עד לתאריך 6/11/2006).