Visual Basic 6
לתוכניתנים
מאת אילן אמויאל
כתובת אימיילilan.amoyal@gmail.com :
אתר אינטרנטwww.kita.co.il :
© כל הזכויות שמורות למחבר
כתיבה עריכה :אילן אמויאל
כתובת אימיילilan.amoyal@gmail.com :
אתר אינטרנטwww.kita.co.il :
© כל הזכויות שמורות למחבר
אין להעתיק או לשדר בכל אמצעי שהוא ספר זה או קטעים ממנו בכל צורה ובכל אמצעי אלקטרוני
או מכני ,לרבות צילום והקלטה ,אמצעי אחסון והפצת מידע ללא צורך באישור מאת המחבר.
מותר להפיץ את הספר חינם וללא ביצוע כל שינוי בתוכנו ,אך שלא למטרות מסחריות
תוכן העניינים
11
הקדמה
אודות שפת 11 ............................................................................................................................... VISUAL BASIC
תוכן הספר 11 ......................................................................................................................................................
ידע מוקדם 11 ......................................................................................................................................................
קו התכניות 11 .....................................................................................................................................................
אי ננטילת אחריות11 ............................................................................................................................................
זכויות יוצרים וקניין רוחני 11 ................................................................................................................................
סוף דבר 11 ..........................................................................................................................................................
11
שיעור :1סקירה
אודות 13 .......................................................................................................................................VISUAL BASIC
יתרונות הפיתוח בVisual Basic-
חסרונות הפיתוח בVisual Basic-
13
13
הכרת סביבת הפיתוח המשולבת (11 .................................................. )INTEGRATED DEVELOPMENT ENVIRONMENT
תיבת הדו-שיח New Project
שורת התפריטים
סרגל הכלים הסטנדרטי של Visual Basic
חלון הProject Explorer-
חלון הProperties-
חלון הForm Layout-
ה( Toolbox-ארגז הכלים)
ה( Code Editor-עורך הקוד)
שיעור :2טפסים ותפריטים
11
11
11
11
11
11
11
11
11
פרוייקט 11 ..........................................................................................................................................................
11
11
12
יצירת פרוייקט חדש
הרצת פרוייקט
שמירת פרוייקט
ה FORM-הסטנדרטי12 .........................................................................................................................................
12
( Propertiesמאפיינים)( Methods ,שיטות) ,ו( Events-אירועים)
11
Propertiesשל Form
11
Methodsשל Form
11
Eventsשל Form
פונקציות ראשונות 11 ...........................................................................................................................................
הפונקציה Print
הפונקציה MsgBox
דוגמה :1התוכנית HelloWorld
11
11
11
הוספת הערות לקוד 11 ..........................................................................................................................................
11
המשך דוגמה 1
( MDI FORMטופס 11 ................................................................................................................................. )MDI
Propertiesשל MDI Form
Methodsשל MDI Form
-3אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
11
11
תוכן העניינים
( MENUSתפריטים) 11 ..........................................................................................................................................
Propertiesשל Menu
Eventsשל Menu
11
11
עבודה עם צבעים 11 ..............................................................................................................................................
הפונקציה QBColor
הפונקציה RGB
אוסף הקבועים ColorConstants
אוסף הקבועים SystemColorConstants
דוגמה – 1התוכנית Colors
11
11
11
11
11
תרגילים31 ..........................................................................................................................................................
שיעור :1הפקדים הסטנדרטיים I
13
( LABELתווית) 31 .................................................................................................................................................
31
31
Propertiesשל Label
Eventsשל Label
( TEXTBOXתיבת טקסט) 31 ..................................................................................................................................
31
Propertiesשל TextBox
31
Eventsשל TextBox
( COMMANDBUTTONלחצן פקודה) 31 ....................................................................................................................
31
Propertiesשל CommandButton
( HSCROLLBARפס גלילה אופקי) ו( VSCROLLBAR-פס גלילה אנכי) 31 ........................................................................
31
Propertiesשל פסי גלילה
31
Eventsשל פסי גלילה
פונקציות לעבודה עם מחרוזות 31 ...........................................................................................................................
31
31
31
31
31
31
31
31
31
31
הפונקציה Len
הפונקציה Val
הפונקציה Str
הפונקציה UCase
הפונקציה LCase
הפונקציות LTrim ,TrimוRtrim-
הפונקציות Left ,MidוRight-
האופרטור &
הקבוע vbCrLf
הפונקציה Asc
התנאי 31 ...............................................................................................................................IF...THEN...END IF
תרגילים12 ..........................................................................................................................................................
שיעור :4מרכיבי השפה I
41
( VARIABLESמשתנים) ו( CONSTANTS-קבועים) 13 ...................................................................................................
13
11
11
סוגי משתנים
הצהרה על משתנים
הצהרה על קבועים
( CONTROL STRUCTURESמבני בקרה) 11 ...............................................................................................................
11
המבנה If...Then...Else
11
המבנה While...Wend
-1אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
11
11
11
המבנה Do...Loop
המבנה For...Next
המבנה Select Case
הפונקציות INPUTBOX ,BEEPו12 ................................................................................................................... IIF-
12
הפונקציה Beep
12
הפונקציה InputBox
12
הפונקציה IIf
תרגילים11 ..........................................................................................................................................................
שיעור :3הפקדים הסטנדרטיים II
31
( CHECKBOXתיבת סימון) 13 ................................................................................................................................
13
13
Propertiesשל CheckBox
Eventsשל CheckBox
( OPTIONBUTTONלחצן אפשרות) 13 ......................................................................................................................
13
Propertiesשל OptionButton
( FRAMEמסגרת) 11 ..............................................................................................................................................
11
Propertiesשל Frame
11
Methodsשל Property
11
דוגמה :1התוכנית CopyText
( LISTBOXתיבת רשימה) 11 ...................................................................................................................................
11
Propertiesשל ListBox
11
Methodsשל ListBox
11
Eventsשל ListBox
( COMBOBOXתיבה משולבת) 11 ............................................................................................................................
11
Propertiesשל ComboBox
( LINEקו) ו( SHAPE-צורה) 11 ................................................................................................................................
11
Propertiesשל LineוShape-
( TIMERפקד שעון) 11 ............................................................................................................................................
11
Propertiesשל Timer
11
Eventsשל Timer
11
דוגמה StudentCourses – 1
תרגילים11 ..........................................................................................................................................................
שיעור :6מרכיבי השפה II
63
המילה 11 ................................................................................................................................................... WITH
( ARRAYSמערכים) 11 ............................................................................................................................................
11
11
11
11
( One-Dimensional Arraysמערכים חד ממדיים)
( Multi-Dimensional Arraysמערכים רב ממדיים)
( Dynamic Arraysמערכים דינמיים)
בדיקת גודל מערך בזמן ריצה באמצעות LBoundוUBound-
( CONTROL ARRAYמערכי פקדים) 11 .....................................................................................................................
11
תרגיל – 1התוכנית CommandBoard
פרוצדורות ב12 ............................................................................................................................. VISUAL BASIC-
11
רוטינות ופונקציות שלב I
11
קריאות לרוטינות ופרוצדורות
-1אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
תוכן העניינים
11
רוטינות ופרוצדורות שלב II
מודולי קוד סטנדרטיים 11 ........................................................................................................................... *.BAS
הפעלת פונקציות מחלון ה11 ................................................................................................................IMMEDIATE
11
תרגיל – 1הפעלת קוד מחלון הImmediate-
( ENUMERATIONSאוספי קבועים) 11 ......................................................................................................................
11
דוגמאות
( USER-DEFINED TYPESסוגי נתונים מוגדרים על ידי המשתמש) 11 ...........................................................................
11
דוגמאות
שיעור :7הרצה וניפוי שגיאות
11
חלונות תצוגה שונים לאבחון 11 .............................................................................................................................
שלושת המצבים של תוכנית 11 ...............................................................................................................................
התפריט ( RUNהרצה) 11 .......................................................................................................................................
11
11
11
11
11
( Startהתחל)
( Start With Full Compileהתחל לאחר קימפול מלא)
( Breakעבור ל)Break Mode-
( Endסיים)
( Restartהתחל מחדש)
התפריט ( DEBUGניפוי שגיאות) 11 .........................................................................................................................
11
( Step Intoצעד לתוך)
11
( Step Overצעד מעבר)
11
( Step Outצא החוצה)
11
( Run To Cursorהרץ עד הסמן)
13
( Add Watchהוספת תצפית)
13
( Edit Watchערוך תצפית)
13
( Quick Watchתצפית מהירה)
11
( Toggle Breakpointהפוך מצב של נקודת עצירה)
11
( Clear All Breakpointsהסר את כל נקודות העצירה)
11
( Set Next Statementקבע את המשפט הבא לביצוע)
11
( Show Next Statementהצג את המשפט הבא לביצוע)
האובייקט 11 ........................................................................................................................................... DEBUG
טיפול בשגיאות בקוד התוכנית 11 ...........................................................................................................................
האובייקט Err
On Error...
On Error GoTo line
On Error Resume Next
On Error GoTo 0
המשפט Resume
הפונקציה Error
11
11
11
11
11
11
11
שיעור :1מבוא לתכנות מבוסס רכיבים 11 COMPONENTWARE DEVELOPMENT
תכנות פרוצדורלי לעומת תכנות מונחה עצמים 11 .....................................................................................................
11
11
Procedural Programming
Object Oriented Programming
( EVENT ORIENTED PROGRAMMINGתכנות מונחה אירועים) 11 ...............................................................................
-1אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
11 ............................................................................................................ )COM( COMPONENT OBJECT MODEL
התמיכה של VISUAL BASICב OOP-ו11 ...................................................................................................... COM-
שיעור :1תכנות מונחה עצמים בVISUAL BASIC-
17
( CLASSESמחלקות) 11 .........................................................................................................................................
11
11
11
11
11
11
122
121
121
112
112
111
111
111
Propertiesשל Class Module
Eventsשל Class Module
הגדרת משתנים בClass-
הוספת פרוצדורות לClass-
הצהרה על אובייקטים מסוג המחלקה
( Reference Countingספירת התייחסויות)
תרגיל – 1התוכנית ClassDemo
תרגיל – 1התוכנית RectDemo
תרגיל – 3התוכנית EventDemo
מימוש Interface
אבחון תכונות אובייקט בזמן ריצה
תרגיל – 1התוכנית ImplementsDemo
Early Bindingלעומת Late Binding
תרגיל – 1התוכנית Analyzer
הגדרת תכונות של פרוצדורות ב111...................................................................................................... INTREFCAE-
111
צפייה בתכונות באמצעות Object Browser
111
תרגיל – 1צפייה באובייקטים באמצעות הObject Browser-
111
צפייה באמצעות היישום OLE VIEW
111
תרגיל OLE View – 1לבעלי לב חזק בלבד
111
הגדרת תכונות
( COLLECTIONSאוספים) 112.................................................................................................................................
112
תחביר
111
הלולאה For each ..In .. Next
111
תרגיל – 1התוכנית ShapeColl1
111
מחלקות Collectionמותאמות אישית
111
תרגיל – 1התוכנית ShapeColl2
שיעור ACTIVEX DLL :11
113
מושגים 131..........................................................................................................................................................
יצירת 131..................................................................................................................................... ACTIVEX DLL
יצירת אובייקטים
הצגת ממשק משתמש
ניהול קבוצת פרוייקטים במקביל
תרגיל – 1ספריית הרכיבים SecurityLib
( Instancingיצירת מופעים)
תרגיל – 1שינוי המאפיין Instancingבמחלקה CLogin
הגדרת כתובות בסיס לרכיבי DLL
תרגיל – 3שינוי כתובת הבסיס לספרייה SecurityLib
טיפול בשגיאות ברכיב
תרגיל :1ספריית הרכיבים DynamicArray
-1אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
131
131
131
131
111
111
111
113
113
111
תוכן העניינים
שיעור :11כתיבת STORED PROCEDURESבSQL SERVER-
141
111.................................................................................................................................. STORED PROCEDURES
111
112
תהליך הביצוע של משפט SQLהנשלח על ידי לקוח
תהליך הביצוע של בקשה להפעלת Stored Procedureמתוך תוכנית לקוח
כתיבת STORED PROCEDURESב112................................................................................................ SQL SERVER-
112
פרוצדורה פשוטה ללא פרמטרים
111
פרוצדורה המקבלת פרמטרים
111
הגדרת ערך ברירת מחדל לפרמטרים
111
החזרת ערך מפרוצדורה באמצעות משתנה
113
שימוש במשתנים מקומיים
113
יציאה מפרוצדורה באמצעות RETURN
שיעור ACTIVEX DATA OBJECTS :12
133
סקירה של טכנולוגיות הגישה לנתונים 111...............................................................................................................
111
111
111
111
111
111
111
111
111
111
111
)Open Database Connectivity( ODBC
)Data Access Object( DAO
)Data Control( DC
)Remote Data Object( RDO
)Remote Data Control( RDC
ODBCDirect
OLE DB
)ActiveX Data Objects( ADO
MSDASQL
)ADO Data Control( ADODC
תרגיל NwindDSN– 1
111.................................................................................................................... )ACTIVEX DATA OBJECTS( ADO
111
Data Link
111
תרגיל NWind.udl :1
112
תרגיל Pubs.udl :3
111
תרגיל NWindDSN.udl :1
111
האובייקט Connection
111
תרגיל – 1התוכנית SimpleConnection
111
-Eventים של אובייקט Connection
111
תרגיל – 1התוכנית ConnectWithEvents
האובייקט 111...................................................................................................................................RECORDSET
111
תרגיל – 1התוכנית DisplayEmployees
111
המאפיין CursorType
111
תנועה בRecordset-
( CURSORSסמנים) 111..........................................................................................................................................
111
המאפיין LockType
111
מאפיינים נוספים
111
תרגיל – 1התוכנית NevigateRecords
111................................................................................................................................... ADO DATA CONTROL
113
Propertiesשל ADODC
-1אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
Methodsשל ADODC
Eventsשל ADODC
113
111
עיצוב הנתונים 111................................................................................................................................................
StdDataFormats Objects
הערות לגבי Data Bound Controls
שיעור COM+ :11
111
111
113
תרגיל COM+Demo :1
111
יצירת רכיבים המותאמים לפעולה תחת 111................................................................................................. COM+
המאפיין MTSTransactionMode
האובייקט ObjectContext
תרגיל MTSSample.dll :1
תרגיל :3הוספת MTSSampleDLL.dllלCOM+-
תרגיל :1בחינת פעולת MTSSample.dllתחת COM+
תרגיל :1הוספת Rolesלאפליקצית COM+
תרגיל :1בדיקת הרשאות מתוך רכיב
תרגיל :1העברת ConstructStringלרכיב
תרגיל :1קליטת ConstructStringמרכיב
-1אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
111
111
111
111
111
111
111
111
111
הקדמה
(הקדמה זו שוכתבה בשנת )2112
אודות שפת
VISUAL BASIC
Visual Basic 6היא שפה וטכנולוגיה ותיקה מאוד בשוק מערכות המידע ,אשר עדיין נמצאת בשימוש בעיקר במערכות
שנכתבו לפני הפצת טכנולוגית dot.NETלשוק ע"י ידי מייקרוסופט ,בסביבות שנת .1221על מערכות מידע אלה יש להוסיף
מערכות תוכנה שונות שמאפשרות להרחיב את פעולתן על ידי כתיבת הרחבות באמצעות ,Visual Basic for Applications
למשל ,תוכנות Microsoft Officeהשונות ,Autocad ,ועוד.
אמנם ,מאז יציאתה לשוק של טכנולוגית dot.NETעל ידי מייקרוסופט ,ירד קרנה של Visual Basic 6לשם פיתוח מערכות
מידע חדשות ,אך עדיין יש צורך במפתחים לצורך תחזוקת מערכות קיימות או לשם פיתוח הרחבות למערכות המאפשרות
זאת על ידי .Visul Basic for Applicationsלכן ,כמתכנת תוכל להיעזר בספר זה כמשאב למידה בשעת הצורך ,ואם הנך
מתכנת מתחיל המתעניין בשפה ובטכנולגית ,Visual Basic 6אין ספק שתוכל להפיק תועלת רבה מספר זה.
תוכן הספר
ספר זה נועד להדריך את המתכנת ברזי שפת ,Visul Basic 6והטכנולוגיות הנלוות אליה תוך שימוש יעיל בשפה וביכולות
פיתוח מוכווני עצמים עד כמה שהם נתמכים ב.Visual Basic 6-
בספר עצמו השתדלתי ,עד כמה שניתן ,להיות תמציתי ותכליתי ,ולתת דוגמאות ברורות אשר מתמקדות בנושא הנלמד ולא
מתפזרות סביב .בכתיבת הדוגמאות השתדלתי שלא להלאות את הקורא בפרטים ,אלא להנחות אותו שלב שלב בצעדים
שעליו להשלים על מנת לסיים את כתיבת הדוגמה .את ההסבר על אופן הפעולה של תוכניות הדוגמה הבאתי מיד לאחר כל
דוגמה.
בספר זה עשיתי שימוש יעיל בקורסים אותם העברתי בשעתו בחברות טכנולוגיה ,בעיקר לפני יציאתה לשוק של טכנולוגיית
.dot.NETהספר לא הושלם עד תומו (ובעיקר שני הפרקים אחרונים שבספר) ,אך את עיקר החומר אפשר לקבל מן הפרקים
שנכתבו ובוודאי שגם מחיפוש מידע באינטרנט.
נושאים נוספים אותם רציתי למצות בספר זה אך לא עשיתי זאת הם:
- XML סקירה ושימוש באמצעות Visual Basic
Deployment and Maintanance
גישה ל Win32 API-מתוך קוד VB
סקירה של ASP
ניתוח ועיצוב תוכנה
יצירת ממשקים באמצעות IDL
חשוב לשים לב כי חלק מהנושאים הללו חשובים ביותר לכל מתכנת Visual Basicמקצועי (בעיקר השלושה הראשונים
שפרטתי) ,ולכן אם אתה מוצא את עצמך לומד מספר זה ,אני ממליץ לך לחפש חומר אודות הנושאים שלא מיציתי בספר
באמצעות רשת האינטרנט.
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
הקדמה
ידע מוקדם
ספר זה מניח כי אתה מתכנת בעל ידע בסיסי בתכנות ,בעל יכולת לייצג מספרים בבסיסים בינארי ,אוקטאלי והקצאדצימלי,
ובעל נסיון בכתיבת קוד בשפה כלשהי.
קו התכניות
קובץ ה Zip-המכיל את הספר הזה ,מכיל גם ספרייה בשם Codeהכולל את קוד המקור של התכניות המובאות כדוגמאות
בפרקי הספר .כמו כן ,ספרייה זו כוללת הצעות פתרון לתרגילים המובאים בסופי חלק מהפרקים.
אי ננטילת אחריות
המחבר אינו מתחייב על שלמות המידע שבספר או הפרקים שבו ומידת דיוקם.
הקריאה מספר זה והסתמכות על הכתוב בו בכל סוג של יישום היא על אחריותך בלבד .אין המחבר יהיה אחראי בכל צורה
שהיא לכל סוג של נזק שעלול להיגרם כתוצאה משימוש בהוראות והנחיות הכתובות בספר זה.
אם בכל זאת החלטת לעשות שימוש בספר זה ,שים לב כי עליך לקבל תנאי זה ללא כל סייג וכל נזק אם חלילה ייגרם ,הנו על
אחריותך בלבד.
זכויות יוצרים וקניין רוחני
מחבר הספר שומר לעצמו את זכויות היוצרים של ספר זה.
עם זאת כבר אמרו חזל "אין אדם יוצא מן העולם וחצי תאוותו בידו" .אם כן ,החליט המחבר לאפשר הפצה חופשית
וחינמית של הספר ללא כל צורך בהרשאה מהמחבר .וזאת תחת התנאים הבאים:
אין להעתיק או לשדר בכל אמצעי שהוא ספר זה או קטעים ממנו בכל צורה ובכל אמצעי אלקטרוני
או מכני ,לרבות צילום והקלטה ,אמצעי אחסון והפצת מידע ללא צורך באישור מאת המחבר.
מותר להפיץ את הספר חינם בשלמותו בלבד ,ללא הכנסת כל שינוי ,גריעת תוכן וכיוצה בזה.
הפצת הספר לא תיעשה בשום אופן למטרות מסחריות.
בספר זה ,ייתכן ומוזכרים מידי פעם סמלים מסחריים של גופים מסחריים שונים .יש לציין כי זכויות היוצרים ו/או הקניין
הרוחני של המוצרים הללו ,כולל שמותיהם וסמליהם בכל מקום בו הם מוזכרים שמורה לבעליהם החוקיים בלבד.
סוף דבר
אני מקווה שספר זה אכן יהיה לך לעזר וישמש אותך היטב בעת הצורך .כפי ששימש בעבר את הלומדים ממנו.
בברכה,
אילן אמויאל
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1סקירה
בשיעור זה:
תכיר את יתרונות הפיתוח שבVisual Basic-
תכיר רכיבים בסיסיים בסביבת הפיתוח המשולבת של Visual Basic
אודות
VISUAL BASIC
Visual Basicהיא סביבת פיתוח מבית היוצר של Microsoft
Visual Basicכוללת מרכיבי שפה ( )Basicומרכיבים גרפיים המאפשרים פיתוח אפליקציות משולב.
יתרונות הפיתוח ב Visual Basic -
קלות פיתוח
חזותיות
מהירות פיתוח
כלי Debugהנם חלק אינטגרלי מסביבת הפיתוח
ניתן להפעיל את כלי ה Debug-בשילוב עם סביבות פיתוח אחרות
ניתן להכניס תוספות ( )Add-Insלסביבת הפיתוח
ניתן לנהל מספר פרוייקטים במקביל ,תחת קבוצה ( )Groupאחת
קיימת תמיכה לשימוש ויצריה של רכיבי ActiveX
חסרו נות הפיתוח ב Visual Basic -
פיתוח ב Visual Basic-פירושו פיתוח אפליקציות לסביבת Microsoft Windowsבלבד
תוכניות הנכתבות ב Visual Basic-מהירות פחות מתוכניות הנכתבות בשפת ,Cואינן מתאימות ליישומים
הדורשים ביצועים מהירים כמו Real Time
תוכנית הנמצאת בשלבי פיתוח ומורצת מתוך Visual Basicרצה כ Thread-בתוך Visual Basicולא כProcess-
נפרד .המשמעות היא שקריסה של ריצת התוכנית גורמת לקריסת ( Visual Basicהכוונה לקריסה קריטית ולא
לשגיאה רגילה)
פיתוח יישומים מרובי Threadsהיא משימה לא קלה בVisual Basic-
- 13אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1סקירה
הכרת סביבת הפיתוח המשולבת (
)ENVIRONMENT
INTEGRATED DEVELOPMENT
סביבת הפיתוח של Visual Basicכוללת רכיבים רבים ,נכיר את חלקם ,חלק אחר שלהם נכיר בהמשך הקורס.
תיבת הדו -שיח New Project
תיבה זו נפתחת אוטומטית בעת הפעלת ,Visual Basicאו בעת בחירת הפריט Newמהתפריט File
תיבה זו מאפשרת לבחור פרוייקט חדש מסוגים שונים
תיבה זו כוללת ( Templatesתבניות) ו( Wizards-אשפים) המאפשרים קיצור משך הפיתוח
שורת התפריטים
שורת התפריטים של Visual Basicכוללת מספר רב של פריטים ,נציג את החשובים שבהם:
התפריט Fileמאפשר יצירת פרוייקטים חדשים ,שמירת פרוייקט פתוח ,סגירת פרוייקט ,קומפילציה (הידור) של
תוכנית ,ועוד.
התפריט Editמאפשר פעולות עריכה שונות כגון ,העתקה ,גזירה ,הדבקה ,חיפוש והחלפה אוטומטיים ,השלמה
אוטומטית של מילים שמורות ושמות פונקציות ,ועוד.
התפריט Viewשולט בעיקר על אופן התצוגה של Visual Basicועל רכיבי ה IDE-המוצגים.
התפריט Projectכולל אפשרויות להוספת רכיבים לפרוייקט ,והסרה של רכיבים ,שליטה על סוג הפרוייקט
ומאפייניו ,ועוד.
התפריט Formatמאפשר לעצב את הפקדים על הטופס.
התפריט Debugמאפשר להריץ ולנפות שגיאות מהתוכנית.
התפריט Runמאפשר הרצה ,השהייה והפסקה של התוכנית.
התפריט Toolsמאפשר הוספת שלדי פונקציות ,מתודות ומאפיינים לרכיבי קוד בפרוייקט ,הוספת תפריטים
לפרוייקט ,כמו גם אפשרויות מתקדמות להגדרת אופן ההתנהגות של .Visual Basic
התפריט Add-Insמאפשר לצרף תוספות של יצרן צד שלישי לממשק .Visual Basic
התפריט Windowמאפשר שליטה על אופן פריסת החלונות בחלון ה.IDE-
התפריט Helpמאפשר קבלת עזרה.
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
סרגל הכלים הסטנדרטי של Visual Basic
סרגל הכלים הסטנדרטי כולל את אפשרויות התפריט השימושיות ביותר
ניתן להוסיף סרגלי כלים נוספים לתצוגה ע"י בחירה מתאימה מתוך התפריט ,Viewאו ע"י לחיצה ימנית על
איזור סרגלי הכלים ובחירה בתפריטים המתאימים.
להלן הסבר כללי על פריטי סרגלי הכלים ,שחלק לא קטן מהם אתה מכיר:
הפריט
מוסיף פרוייקט נוסף
הפריט
מוסיף רכיבים לפרוייקט
הפריט
מוסיף תפריטים לתוכנית
הפריטים
הפריטים
הפריטים
הפריטים
הפריט
מציג מסתיר את הProject Explorer-
הפריט
מציג/מסתיר את הProperties Window -
הפריט
מציג/מסתיר את הForm Layout Window-
הפריט
מציג/מסתיר את הToolbox-
מאפשרים פתיחה ושמירה של פרוייקט
מאפשרים גזירה ,הדבקה ,העתקה ,חיפוש והחלפה של טקסט
מאפשרים ביטול והפעלה מחדש
מאפשרים הפעלה ,השהייה והפסקה של התוכנית
חלון ה Project Explorer -
בחלון זה רואים את רכיבי הפרוייקט
כאשר מנהלים מספר פרוייקטים במקביל ,רואים אותם ב Project Explorer-תחת Groupאחד
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1סקירה
חלון ה Properties -
חלון ה Properties-מציג את מאפייני הרכיב או האובייקט הנבחר.
האובייקט הנבחר יכול להיות ( Formטופס)( Control ,פקד) ,הפרוייקט עצמו ,או קבוצת רכיבים.
ניתן לצפות במאפיינים בסדר אלפביתי או מסודרים לפי קטגוריות.
חלון ה Form Layout -
ב Form Layout-ניתן לראות ולקבוע כיצד ייפרסו הטפסים על המסך בעת פתיחתם
ניתן לקבוע את אופו פריסת הטפסים מחלון זה או מתוך חלון מאפייני הטופס
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
ה ( Toolbox -ארג ז הכל ים)
( PictureBoxתיבת תמונה)
( TextBoxתיבת טקסט)
( CommandButtonלחצן פקודה)
( OptionBoxלחצן אפשרות)
מצביע לבחירת אובייקט
( Labelתווית)
( Frameמסגרת)
( CheckBoxתיבת סימון)
( ListBoxתיבת רשימה)
( ComboBoxתיבה משולשבת)
( VscrollBarפס גלילה אנכי)
( HscrollBarפס גלילה אופקי)
( DriveListBoxתיבת רשימת הכוננים)
( FileListBoxתיבת רש ימת קבצים)
( Lineקו)
( Dataפקד )Data
( Timerשעון)
( DirListBoxתיבת רשימת ספריות)
( Shapeצורה)
( Imageפקד דמות /תמונה)
( OLEפקד קיצור והטבעה)
ה ToolBox-של Visual Basicמציג במצב התחלתי את הפקדים הסטנדרטיים של Visual Basic
ניתן להוסיף פקדים נוספים לToolBox-
ניתן לארגן את הפקדים השונים לפי קבוצות
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1סקירה
ה ( Code Editor -עורך הקוד)
– Procedureרשימת פרוצדורות ()Events
– Objectרשימת אובייקטים
- Codeאזור הקוד
במרכז המסך ממוקם חלון הקוד – כאן רושמים את שורות הקוד השונות
התיבה המשולבת ( )ComboBoxמשמאל מציגה את רשימת האובייקטים הזמינים לעריכת קוד
התיבה המשולבת ( )ComboBoxמימין מציגה את רשימת האירועים הזמינים עבור האובייקט
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור : 2טפסים ותפריטים
בשיעור זה:
תבין מהו פרוייקט בVisual Basic-
תכיר את הפרוייקט מהסוג Standard EXE
תכיר את מבנה החלון בסביבת Microsoft Windows
תבין את המושגים Methods ,PropertiesוEvents-
תכיר את המושגים Design TimeוRun Time-
תכיר את שני סוגי ה( Forms-טפסים) העיקריים ב :Visual Basic-טופס רגיל וטופס MDI
תלמד לעבוד עם ( Menusתפריטים)
תכיר את הפונקציות PrintוMsgBox-
תלמד להוסיף הערות לקוד
תלמד כיצד ניתן לשלוט על מיקום ופריסת הטפסים ביחס למסך ,ביחס לחלון אב ,וביחס לחלון MDI
תכיר את סוגי הקבצים המאחסנים את נתוני הפרוייקט ואת נתוני הForms-
פרוייקט
פרוייקט ב Visual Basic-הוא אוסף קבצים המאוגדים כקבוצה אחת לשם יצירת תוכנית מסוג כלשהו
ב Visual Basic-ניתן ליצור פרוייקטים מסוגים שונים ולנהל מספר פרוייקטים
פרוייקט ב Visual Basic-מאוחסן בקובץ שהסיומת שלו היא .*.vbpקובץ זה הוא קובץ טקסט המכיל מידע מגוון
אודות הפרוייקט
לעתים יש צורך לערוך ידנית את קובץ הפרוייקט .למשל ,כשמידע מסויים בקובץ שגוי וגורם לבעיות בטעינת
הפרוייקט
יצירת פרוייקט חדש
בעת הפעלת Visual Basicנפתח באופן אוטומטי חלון New Project
מתוך חלון ה New Project-ניתן לבחור את סוג הפרוייקט שרוצים לפתח
לשם יצירת פרוייקט חלונות סטנדרטי יש לבחור את Standard EXE
ניתן להפעיל את חלון ה New Project-גם מתוך התפריט File
הפרוייקט ורכיביו מוצגים בחלון הProject Explorer-
לאחר סימון הפרוייקט ב Project Explorer-ניתן לקבוע את שמו בProperties Window-
ניתן לקבוע את שם הפרוייקט ומאפיינים נוספים של הפרוייקט ע"י בחירת [Project name] Properties...מתוך
התפריט ,Projectכאשר ] [Project Nameהוא שם הפרוייקט שבפיתוח ,נכיר את המאפיינים השונים של
הפרוייקט במהלך הקורס
הרצת פרוייקט
ניתן להריץ את התוכנית שבפיתוח ע"י לחיצה על הכפתור Startאו ע"י לחיצה על המקש F5
השלב שבו מפתחים את הפרוייקט ,נקרא Design Time
השלב שבו הפרוייקט נמצא במצב ריצה נקרא Run Time
כדי להפסיק (באופן לא מסודר) את ריצת התוכנית שבפיתוח יש ללחוץ על הלחצן Stop
לחיצה על Stopעוצרת באופן מידי את התוכנית תוך דילוג על אירועי הסיום המובנים בתוכנית
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Start
Stop
שיעור :2טפסים ותפריטים
שמירת פרוייקט
Visual Basicשומרת את הפרוייקט במספר קבצי טקסט
הנתונים אודות הפרוייקט עצמו ומאפייניו מאוחסנים בקובץ שהסיומת שלו היא *.vbp
במקרה הצורך ,ניתן לערוך קובץ זה באמצעות הNotepad-
ה FORM-הסטנדרטי
בעת יצירת פרוייקט מסוג Standard EXEנוסף Formרגיל לפרוייקט
ניתן להוסיף Formsנוספים ע"י בחירת Add Formמהתפריט Project
טפסים נשמרים בקבצים בעלי הסיומת *.frm
קובץ זה הוא קובץ טקסט הכולל את הקוד השייך לטופס (קוד זה מוצג בעת טעינת הטופס ב ,)Visual Basic-כמו
גם ,נתונים נוספים הממוקמים בראש הקובץ ,כגון מאפיינים (שגם הם מוצגים בחלון המאפיינים)
אם קיים צורך ,ניתן לערוך קובץ זה ידנית מתוך הNotepad-
מרכיבי Form
Maximize/Restore Button
( לחצן הגדלה /שחזור)
Minimize Button
( לחצן הקטנה)
( Title Barשורת כותרת)
( Captionכותרת)
( Iconסמל החלון)
וה Control Menu-
( תפריט הבקרה)
Close Button
( לחצן סגירה)
Form Grid
( רשת עיצוב –מוצגת
בזמן הפיתוח בלבד)
( Client Areaאזור הלקוח)
Window Area Border
( גבול אז ור החלון)
( Propertiesמאפיינים)( Methods ,שיטות) ,ו ( Events -אירועים)
( Propertyמאפיין) של אובייקט הוא ערך מסוג מסוים הקובע פן מסוים בהתנהגות האובייקט .למשל ,המאפיין
Captionשל Formקובע את הטקסט המופיע בפס הכותרת של הטופס.
( Methodשיטה) של אובייקט היא שגרה המופעלת מתוך האובייקט ומשפיע על אופן תפקודו .למשל ,המתודה
Moveשל טופס משנה את מיקומו על המסך.
( Eventאירוע) של אובייקט הוא שגרה המופעלת בעת התרחשות מסוימת הקשורה באותו אובייקט .למשל,
האירוע Loadשל Formמופעל עם טעינת הטופס.
לרוב האובייקטים (כולל טפסים ופקדים) קיימים Methods ,PropertiesוEvents-
הכרה של Methods ,Propertiesו Events-של Formאו ,Controlחוסכת לימוד חוזר שלהם עבור אובייקטים
שמכירים לאחר מכן ,כיוון שאופן ההתנהגות הוא בדרך שלל זהה.
- 12אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
שים לב:
בסעיפים הבאים אפרט את חלק ניכר מהמאפיינים ,השיטות והאירועים של טופס .לעתים קרובות
המאפיינים ,השיטות והאירועים הללו זהים בין אובייקטים שונים ,ולכן לא אסביר אותם מחדש כאשר
אסביר לך אודות אובייקטים נוספים ,כגון טופס CommandButton ,MDIוכו' ,אלא אם יש הבדל באופן
פעולתם העקרוני.
Propertiesשל Form
:Nameהשם המוקצה לאובייקט ה ,Form-באמצעות שם זה פונים למאפייני ה Form-או למתודות שלו
:BackColorקובע את צבע הרקע של הForm-
:BorderStyleקובע את סגנון הגבול של הטופס
:Captionקובע את הטקסט המוצג בפס הכוותרת
:ControlBoxקובע האם יוצגו תפריטי הבקרה
:Enabledקובע האם ה Form-יהיה פעיל או לא ( Enabledאו Form .)Disabledפעיל יכול להגיב לאירועים
המתרחשים ,כגון לחיצת עכבר וכו'
:FillColorצבע המילוי עבור צורות המצוירות באמצעות שגרות גרפיות על גבי הForm-
:FillStyleסגנון המילוי (קיימים שמונה סגנונות מילוי שונים - Solid :מלא - Transparent ,שקוף,
- HorizontalLineקווקו אנכי ,ועוד)...
:Fontסגנון הגופן עבור פעולות גרפיות הכותבות טקסט על גבי הForm-
:ForeColorקובע את צבע הקידמה ,כלומר ,את הצבע באמצעותו יצוירו גבולות הצורות הגרפיות והטקסט
:Heightגובה הForm-
:Iconסמל הטופס
:KeyPreviewקובע האם ה Form-יקלוט את אירועי הפקדים שבתוכו לפני שהם מגיבים להם
:Leftמיקום נקודת הקצה השמאלית של הForm-
:MaxButtonקובע האם כפתור ההגדלה שבתפריט הבקרה יהיה פעיל או לא
:MDIChildקובע האם הטופס יהיה טופס בן של טופס ה MDI-בתוכנית
:MinButtonקובע האם כפתור המזעור בתפריט הבקרה יהיה פעיל
:Moveableקובע האם ה Form-יהיה נייד במהלך ריצת התוכנית
:NegotiateMenusקובע האם ה Form-ישתף תפריטים של האובייקטים שבתוכו בשורת התפריטים שלו
:Pictureהוספת תמונה לרקע של הטופס
:RightToLeftקובע את כיוון הצגת הטקסט
:ScaleHeightגובה אזור הלקוח ב Form-לפי יחידות המדידה המצוינת בScaleMode-
:ScaleLeftערך קצהו השמאלי של אזור הלקוח בForm-
:ScaleModeיחידות המדידה לפיהן נמדד אזור הלקוח (ה( Client Area-ניתן ליצור יחידות מדידה מותאמות
אישית – ואז לקבוע באופן חופשי את הערכים ScaleHeight ,ScaleTop ,ScaleLeftו –)ScaleWidth
:ScaleTopערך קצהו העליון של אזור הלקוח בForm-
:ScaleWidthרוחב אזור הלקוח של ה Form-לפי יחידות המדידה שנקבעה בScaleMode-
:ShowInTaskbarקובע האם יוצג סמל התוכנית בשורת המשימות
:StartUpPositionקובע את מיקום ה Form-ביחס למסך או לחלון האב
:Topמיקום נקודת הקצה העליונה של הForm-
:Visibleקובע האם ה Form-יהיה נראה ( )Visibleאו לא
:Widthרוחב הForm-
:WindowStateקובע את מצבו ההתחלתי של ה( Form-מוגדל/מוקטן/נורמלי)
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :2טפסים ותפריטים
Methodsשל Form
:Clsמנקה ציורים וטקסט שנוספו ל Form-בזמן הריצה
:Hideמסתיר את הטופס אך לא פורק ( )Unloadingאותו
:Moveמשנה את מיקומו ו/או את גודלו של הForm-
:PopupMenuמציג תפריט מוקפץ
:Refreshמרענן את תוכן ה Form-כך שיצטייר מחדש
:SetFocusמעביר את ה( Focus-מיקוד) לForm-
Eventsשל Form
:Activateמתרחש כשה Form-הופך להיות פעיל
:Clickמתרחש כשלחצן העכבר נלחץ ומשוחרר על גבי הForm-
:DblClickמתרחש בעת לחיצה כפולה על הטופס
:Deactivateמתרחש כשה Form-הופך ללא פעיל
:GotFocusמתרחש כאשר ה Form-מקבל את ה( Focus-מיקוד)
:Initializeמתרחש בעת אתחול הForm-
:KeyDownמתרחש בעת לחיצת מקש
:KeyPressמתרחש לאחר לחיצה ושחרור של מקש
:KeyUpמתרחש לאחר שחרור מקש
:Loadמתרחש בעת טעינת הForm-
:LostFocusמתרחש בעת איבוד ה( Focus-מיקוד)
:MouseDownמתרחש בעת לחיצה על אחד הלחצנים בעכבר
:MouseMoveמתרחש בעת תזוזת עכבר
:MouseUpמתרחש בעת שחרור אחד הלחצנים בעכבר
:Paintמתרחש בעת ציור תוכן הטופס מחדש
:QueryUnloadמתרחש לפני פירוק ( )Unloadingשל הטופס
:Resizeמתרחש בעת שינוי גודל הForm-
:Terminateמתרחש בעת סיום פעולת הטופס
:Unloadמתרחש בעת פריקת הטופס
האירועים GotFocus ,Deactivate ,Activate ,Unload ,Load ,Terminate ,Initializeו LostFocus-וQueryUnload-
האירוע Initializeמתרחש בעת יצירת האובייקט בזכרון (תמיד מתרחש לפני ,)Loadלאחר InitializeהForm-
קיים כאובייקט אך עדיין לא כחלון
האירוע Terminateמתרחש בעת שחרור האובייקט מהזכרון (מתרחש תמיד אחרי ,Unloadאך אינו מתרחש אם
התוכנית הסתיימה בצורה לא נורמלית)
האירוע Loadמתרחש בעת טעינת האובייקט מהזכרון והפיכתו לחלון – כלומר בשלב זה ,לחלון יש ידית (,)hWnd
והפקדים שבו נוצרו ונטענו
האירוע Unloadמתרחש בעת פריקת החלון וכל הפקדים שבו ,עם זאת ,ה Form-עדיין קיים כאובייקט בזכרון
האירוע QueryUnloadמתרחש לפני פריקת ( )Unloadingשל הForm-
Activateמתרחש בעת מעבר ל Form-מטופס אחר באותה התוכנית
Deactivateמתרחש בעת מעבר ל Form-אחר באותה התוכנית
GetFocusו SetFocus-מתרחשים בעת קבלה ושחרור של המוקד ,בהתאמה
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
ארבעת המצבים ש Form-יכול להימצא בהם
קיימים ארבעה מצבים שבהם יכול להימצא :Form
:Created but not loaded הForm -נוצר כאובייקט בזכרון אך לא הוטען עדיין כחלון
:Loaded but not shown ה Form-הוטען כחלון אך לא הוצג
:Shown ה Form-הוצג
:Memory and resources completely reclaimed הזכרון והמשאבים שהוקצו עבור ה Form-שוחררו
במלואם
הגרף הבא מתאר את סדר התרחשות האירועים הנ"ל בתגובה לפעילויות מסוימות של המשתמש או פונקציות
שהמתכנת מפעיל.
Initialize Load Activate GotFocus LostFocus Deactivate QueryUnload Unload Terminate
יצירת Formחדש באמצעות
המשפט Set...= New ...
שחרור Formבאמצעות
המשפט Set...= Nothing
1
1
בעת הפעלת הש גרה Load
אירוע 1יתרחש אם הטופס אי נו
בזיכר ון ,אירוע ים 3ו 4-יתרחשו אם
המאפיי ן Visibleשווה ל True-
4
בעת הפעלת הש גרה Show
אירוע 1יתרחש א ם הטופס אינ ו
בזיכר ון ,אירוע 2יתרחש אם
הטופס לא הוטע ן קודם
4
בעת מעבר ל Form-אחר
באותה התוכנית ,או הפעלת
SetFocusעל Formאחר באותה
התוכנ ית
2
בעת מעבר ל Form-מ Form-אחר
או ע" י הפעלת SetFocusעל
ה Form-
בעת הפעלת הפ ונקציה Unload
אירוע 3יתרחש רק אם אין
טפסים נוס פים והתוכנית
3
מסתיימת,או אם הטופס
משוחרר בצ ורה מפורשת ע"י
המשפט Set ... = Nothing
3
2
1
1
2
2
3
2
1
1
1
האירועים ClickוDblClick-
האירוע Clickבאובייקט מתרחש לאחר הורדת לחצן עכבר ( )MouseDownושחרור אותו לחצן ( )MouseUpעל
גבי אותו אובייקט
האירוע DblClickבאובייקט מתרחש לאחר הורדת לחצן עכבר שבאה בעקבות האירוע Clickתוך פרק זמן הקצר
או שווה לזה שמוגדר בלוח הבקרה ( )Control Panelשל המערכת
- 13אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :2טפסים ותפריטים
פונקציות ראשונות
בסעיף זה נכיר שתי פונקציות ראשונות להצגת הודעה Print :וMsgBox-
הפו נקציה Print
הפונקציה Printמדפיסה טקסט על גבי הטופס
לדוגמה:
שורת קוד זו מדפיסה את המחרוזת ! Hello, worldעל גבי הForm-
”!Print “Hello, world
הפו נקציה MsgBox
הפונקציה MsgBoxמציגה תיבת הודעה למשתמש
לדוגמה:
שורת קוד זו מציגה תיבת הודעה עם הכיתוב !Hello, world
”!MsgBox “Hello, world
דוגמה : 1התוכנית HelloWorld
בדוגמה זו ניצור תוכנית המדפיסה את המחרוזת ! Hello, worldעל גבי הטופס ובאמצעות תיבת הודעה
בהדרגה נוסיף פריטים לתוכנית זו ,תוך כדי למידה של נושאים נוספים
שים לב:
פעולות שחוזרות על עצמן ,כגון יצירת פרוייקט ,מתן שם לפרוייקט וכו' ,אפרט פעם אחת בדוגמה
הראשונה שבה נדרשת פעולה זו .אם בדוגמאות מתקדמות שכחת כיצד לבצע פעולה זו ,חזור לדוגמאות
הראשונות כדי לרענן את זיכרונך.
.1צור תוכנית מסוג :Standard EXE
הפעל את ( Visual Basicאם Visual Basicכבר פתוחה בחר באפשרות New Projectמתוך התפריט )File
בחר בפרוייקט ,Standard EXEולאחר מכן לחץ על OK
.1הקצה שם לפרוייקט:
בחר באפשרות Project1 Properties...מתוך התפריט Project
בשדה Project Nameרשום ( HelloWorldזהו שם הפרוייקט שבחרתי לפרוייקט זה ,כמובן שתוכל לבחור
בשם אחר אם רצונך בכך)
.3הקצה מאפיינים ל:Form-
לחץ על ה Form-במקום כלשהו
מאפייני ה Form-צריכים להופיע בחלון המאפיינים (אם אינך רואה את חלון המאפיינים ,בחר באפשרות
Properties Windowבתפריט ,Viewאו לחץ על )F4
הגדר את המאפיינים הבאים:
מאפיין
Name
Caption
ערך
FrmHello
Hello World Program
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
.1שמור את הפרוייקט:
בחר באפשרות Save Projectמתוך התפריט File
הקפד ליצור ספרייה נפרדת עבור כל פרוייקט
שים לב ש Visual Basic-מציעה שמות התואמים את
שמות הפרוייקט והטופס כפי שהקצת להם בתוכנית
.1הוסף קוד:
לחץ לחיצה כפולה על הטופס או על
הלחצן View Codeבחלון הProject Explorer-
בחלון ה( Code Editor-עורך הקוד) בחר בClick-
מתוך רשימת הפרוצדורות הזמינות והקלד את הקוד הבא:
View Code
()Private Sub Form_Click
!"Print "Hello, world
End Sub
.1הרץ את התוכנית ובדוק אותה:
לחץ על F5
לחץ לחיצת עבר על ה Form-המוצג ,אתה צריך לראות את ההודעה Printמוצגת על הטופס
כל לחיצה נוספת תוסיף שורה נוספת של ההודעה על הטופס
מזער את החלון והגדל אותו בחזרה – ההודעות נעלמו
לחץ לחיצה נוספת על הטופס ,שוב תיכתב ההודעה ! Hello, worldמיד לאחר השורה האחרונה שבה היא
נרשמה קודם
עצור את ריצת התוכנית ע"י סגירת החלון
.1הנחה את הטופס לזכור את תוכנו כתמונת מפת סיביות:
שנה את המאפיין AutoRedrawשל frmHelloלערך True
הרץ ובדוק את התוכנית שוב ,שים לב שהפעם לאחר מזעור והגדלה של ה Form-תוכנו נשמר
סיים את ריצת התוכנית
.1הפעלת תיבת הודעה בתגובה ללחיצת מקש:
בחלון הקוד בחר ב KeyPress -מתוך רשימת הפרוצדורות הזמינות ,והקלד את הקוד הבא:
)Private Sub Form_KeyPress(KeyAscii As Integer
!"MsgBox "Hello, world
End Sub
.1הרץ את התוכנית ובדוק אותה:
לאחר הרצת התוכנית לחץ על מקש כלשהו (מבין מקשי האותיות והמספרים)
צריכה להופיע תיבת הודעה עם המסר !Hello, world
.12שמור את התוכנית:
שמור את התוכנית ע"י בחירת Save Projectמתוך תפריט File
בהמשך נשוב למספר שינויים בתוכנית זו
אם תרצה תוכל לסגור את התוכנית ע"י בחירת Remove Projectמתוך התפריט Fileאו ע"י סגירת Visual
Basic
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :2טפסים ותפריטים
הוספת הערות לקוד
מומלץ להוסיף הערות כדי לשפר את הבנת הקוד
הערות ב Visual Basic-ניתן להוסיף לאחר הסימן ' (גרש בודד)
המשך דוגמה 1
.11פתח את התוכנית :HelloWorld
מצא את התוכנית בספרייה שבה שמרת אותה
הקלק על הקובץ – HelloWold.vbpהתוכנית תיפתח אוטומטית באמצעות Visual Basic
.11הוסף הערות לקוד:
הוסף את ההערות הבאות לקוד (ההערות נצבעות אוטומטית בצבע ירוק)
()Private Sub Form_Click
Print "Hello, world!" 'Print the message on the form
End Sub
)Private Sub Form_KeyPress(KeyAscii As Integer
MsgBox "Hello, world!" 'Display a message box to the user
End Sub
.13מקם את ה Form-במרכז המסך:
קבע את המאפיין StartUpPositionשל frmHelloלערך 2-CenterScreen
.11קבע את גבול החלון כקבוע:
שנה את המאפיין BorderStyleשל frmHelloלערך 2-FixedSingle
.11הרץ ובדוק את התוכנית:
כאשר תריץ את התוכנית ,תשים לב כי החלון מוקם במרכז המסך
נסה לשנות את גודל ה – Form-שים לב שזה בלתי אפשרי
( MDI FORMטופס )MDI
MDIהם ראשי התיבות של – Multiple Document Interfaceממשק מרובה מסמכים
לפרוייקט ניתן להוסיף MDI Formאחד לכל היותר
MDI Formהוא Formשיכול להכיל בתוכו מספר -Formים
במקרה כזה ה MDI Form-ייקרא חלון האב של החלונות הכפופים לו
כדי להפוך Formלטופס השייך לחלון ה MDI-יש לנות את המאפיין MDI Childשל אותו FormלTrue-
Propertiesשל MDI Form
רוב ה Properties-ה Methods-וה Events-של MDI Formזהים לאלה שבבסעיף ה Form-הסטנדרטי
:AutoShowChildrenקובע האם חלונות בנים ( )MDI Childrenיוצגו באופן אוטומטי בזמן הטעינה
Methodsשל MDI Form
:Arrangeמסדר את החלונות הבנים הפתוחים בתוך הMDI Form-
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
( MENUSתפריטים)
ניתן להוסיף תפריטים לטפסים ע"י בחירת Menu Editor...מתפריט Tools
תפריט הוא כמו אובייקט רגיל ב ,Visual Basic-ניתן לגשת אל מאפייניו באמצעות שמו
ניתן להוסיף & לפני אות מסוימת בכותרת תפריט על מנת להפוך אותו למקש מהיר ()Accelerator
כדי ליצור קו מפריד בתפריט ,יש ליצור פריט שה Caption-שלו הוא – (הסימן מינוס)
Propertiesשל Menu
:Checkedקובע האם יוצג הסימן Vליד פריט התפריט
:NegotiatePositionקובע את האופן שבו יסודרו התפריטים על גבי החלון המכיל יחד עם תפריטים
מאובייקטים שונים
:Shortcutקובע מקשי קיצור עבור פריט התפריט
:Tagמאפשר להצמיד מידע נוסף (מחרוזתי) לאובייקט התפריט
:WindowListקובע אובייקט התפריט ינהל רשימת חלונות (מסוג )MDI Childהפתוחים בתוך MDI Form
:Parentייחוס לחלון האב של התפריט
Eventsשל Menu
:Clickמתרחש בעת לחיצה על התפריט
עבודה עם צבעים
בסעיף זה נכיר מספר פונקציות וקבועים המחזירים ערכים המייצגים צבע.
הפו נקציה QBColor
פונקציה זו יודעת ליצור ערך המייצג צבע עבור 11צבעים שונים מוגדרים מראש
פונקציה זו מקבלת אחד מהערכים 0-15ומחזירה ערך המייצג צבע
לדוגמה:
)Form1.BackColor = QBColor(8
בשורת קוד זו ,נקבע צבע הרקע של Form1לצבע ( Garyאפור)
הפו נקציה RGB
הפונקציה RGBיוצרת צבע מותאם אישית
הפונקציה מקבלת שלושה ערכים ,כל ערך מייצג את רמת מרכיב הצבע – אדום ,ירוק או כחול – בצבע התוצאה
כל מרכיב יכול לנוע החל מהערך 0עד לערך 255
יש להפעיל את הפונקציה באופן הבא:
)RGB(red_value, green_value, blue_value
דוגמה:
בשורת קוד זו נקבע צבע הקדמה (צבע הטקס והגבולות של צורות המצויירים ע"י פונקציות גרפיות) לצבע כחול
טיפים:
oאם רמת כל צבעים מוגדרת כ 0-נוצר צבע שחור
oאם רמת כל צבעים מוגדרת כ 255-נוצר צבע לבן
oאם רמת כל צבעים מוגדרת לערך זהה נוצר גוון אפור
oככל שהערכים גבוהים יותר הצבע בהיר יותר
)Form1.ForeColor = RGB(0, 0, 255
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :2טפסים ותפריטים
אוסף הקבועים ColorConstants
אוסף קבועים זה מכיל שמונה צבעים מוגדרים מראש
אוסף הקבועים SystemColorConstants
אוסף של 25קבועים שונים המגדירים צבעים כפי הוגדרו ע"י המשתמש בלוח הבקרה ( )Control Panelשל
המערכת (למעשה קיימים 27אך שניים מהם זהים)
דוגמה – 2התוכנית Colors
.1
.1
.3
.1
.1
.1
בדוגמה זו ניצור תוכנית MDIעם שלושה חלונות ,ונבצע משחקי צבעים וגרפיקה פשוטים על הטפסים .כמו כן,
נוסיף תפריטים לתוכנית
צור תוכנית מסוג Standard EXE
הוסף Formsלפרוייקט:
בחר ב Add Form-מתוך התפריט Project
מתוך תיבת הדו-שיח Add Formבחר ב( Form-הפריט הראשון ברשימה)
חזור על פעולה זו כך שתוסיף טופס שלישי לתוכנית
הוסף MDIFormלפרוייקט:
בחר ב Add MDI Form-מהתפריט Project
מתיבת הדו-שיח Add MDI Formבחר בMDI Form-
הקצה שמות לפרוייקט ולטפסים:
שנה את שמו של הפרוייקט לColors-
שנה את שמות הטפסים לשמות frmRGB ,frmQBColorsוfrmSystemColors-
שנה את שם טופס ה MDI-לmdiColors-
שמור את הפרוייקט
הגדר את המאפיינים הבאים:
אובייקט
FrmQBColors
frmRGB
FrmSystemColors
מאפיין
Caption
MDIChild
Caption
MDIChild
Caption
MDIChild
ערך
QBColors
True
RGB
True
System Colors
True
.1שנה את ה:Startup Object-
פתח את Colors Properties...מתוך התפריט Project
שנה את האובייקט בשדה Startup Object:כך שיהיה MDIColors
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
:mdiColors הוסף תפריט לטופס.1
מתוך תפריטMenu Editor- בח ר ב
Tools
&Open רשוםCaption בשדה
mnuOpen רשוםName ובשדה
Next לחץ על
השדות התרוקנו להזנת הפריט הבא
רשוםCaption בשדה
רשוםName ובשדה,QBColos Form
mnuOpenQBColorsForm
השתמש בחץ המופנה כלפי ימין כדי
להזיח את הפריט הזה מקום אחד
כך שיופיע כתת פריט של,ימינה
mnuOpen
הסימן – (מינוס) יוצר הפרדה: שים לב
בתפריטים
הוסף את הפריטים המופעים ברשימה
הבאה כך שהחלון ייראה כמו זה
)שמופיע כאן (בסוגריים רשומים השמות
Caption
Name
&Open mnuOpen
&QBColors Form
&RGB Form
&System Colors Form
E&xit
mnuOpenQBColorsForm
mnuOpenRGBForm
mnuOpenSystemColorsForm
mnuOpenSeparator
mnuOpenExit
: באופן דומה הוסף את התפריטים הבאים.1
:frmQBColors לטופס
Caption
Name
&Colors
mnuColors
&Red mnuColorsRed
&Green mnuColorsGreen
&Blue mnuColorsBlue
mnuColorsSeparator1
B&lack mnuColorsBlack
&White mnuColorsWhite
mnuColorsSeparator2
&Quit mnuColorsQuit
- 11 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
טפסים ותפריטים:2 שיעור
:frmRGB לטופס
:frmSystemColors לטופס
Caption
Name
&Colors
mnuColors
&Red mnuColorsRed
&Green mnuColorsGreen
&Blue mnuColorsBlue
mnuColorsSeparator1
&Cyan mnuColorsCyan
&Magenta
mnuColorsMagenta
&Yellow
mnuColorsYellow
mnuColorsSeparator2
&Quit mnuColorsQuit
Caption
Name
&Colors
mnuColors
&Button Face mnuColorsButtonFace
&Tool Tip
mnuColorsToolTip
&Desktop
mnuColorsDesktop
mnuColorsSeparator
&Quit mnuColorsQuit
: הוסף קוד.12
:mdiColors לטופס
Private Sub mnuOpenExit_Click)(
Unload Me
End Sub
Private Sub mnuOpenQBColorsForm_Click)(
' Loads and displays frmQBColors
Load frmQBColors
frmQBColors.Show
End Sub
Private Sub mnuOpenRGBForm_Click)(
' Loads and displays frmRGB
Load frmRGB
frmRGB.Show
End Sub
Private Sub mnuOpenSystemColorsForm_Click)(
' Loads and displays frmSystemColors
Load frmSystemColors
frmSystemColors.Show
End Sub
- 32 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
Private Sub mnuWindowArrangeIcons_Click)(
Arrange vbArrangeIcons
End Sub
Private Sub mnuWindowCascade_Click)(
Arrange vbCascade
End Sub
Private Sub mnuWindowTileHorizontally_Click)(
Arrange vbTileHorizontal
End Sub
Private Sub mnuWindowTileVertically_Click)(
Arrange vbTileVertical
End Sub
:frmQBColors לטופס
Private Sub mnuColorsBlack_Click)(
BackColor = QBColor(0) ' Black
End Sub
Private Sub mnuColorsBlue_Click)(
BackColor = QBColor(1) ' Blue
End Sub
Private Sub mnuColorsGreen_Click)(
BackColor = QBColor(2) ' Green
End Sub
Private Sub mnuColorsQuit_Click)(
Unload Me
End Sub
Private Sub mnuColorsRed_Click)(
BackColor = QBColor(4) 'Red
End Sub
Private Sub mnuColorsWhite_Click)(
BackColor = QBColor(15) 'white
End Sub
- 31 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
טפסים ותפריטים:2 שיעור
:frmRGB לטופס
Private Sub mnuColorMagenta_Click)(
BackColor = RGB(255, 0, 255) 'Magenta
End Sub
Private Sub mnuColorsBlue_Click)(
BackColor = RGB(0, 0, 255) ' Blue
End Sub
Private Sub mnuColorsCyan_Click)(
BackColor = RGB(0, 255, 255) ' Cyan
End Sub
Private Sub mnuColorsGreen_Click)(
BackColor = RGB(0, 255, 0) ' Green
End Sub
Private Sub mnuColorsQuit_Click)(
Unload Me
End Sub
Private Sub mnuColorsRed_Click)(
BackColor = RGB(255, 0, 0) ' Red
End Sub
Private Sub mnuColorsYellow_Click)(
BackColor = RGB(255, 255, 0) ' Yellow
End Sub
- 31 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
:frmSystemColors לטופס
Private Sub mnuColorsButtonFace_Click)(
BackColor = SystemColorConstants.vbButtonFace
End Sub
Private Sub mnuColorsDesktop_Click)(
BackColor = SystemColorConstants.vbDesktop
End Sub
Private Sub mnuColorsQuit_Click)(
Unload Me
End Sub
Private Sub mnuColorsToolTip_Click)(
BackColor = SystemColorConstants.vbInfoBackground ' ToolTip background
End Sub
הרץ ובדוק את התוכנית.11
- 33 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :2טפסים ותפריטים
תרגילים
.1כתוב תוכנית בשם SimpleColorsובה שלושה .Formsקבע צבע רקע שונה לכל Formוטען את ה Form-השני
בעת לחיצה על ה Formהראשון ,ואת ה Form-השלישי בעת לחיצה כפולה על ה Formהשני.
בעת לחיצת מקש על ה Form-השלישי ייסגרו של ה Forms-ותסתיים התוכנית.
.1כתוב תוכנית בשם TraceEventsובה שלושה Form2 ,Form1 :FormsוForm3-
ב Form1-הוסף תפריט המאפשר את טעינת Form2ו ,Form3-ניקוי ה( Form-בצע ניקוי באמצעות השגרה )Cls
וכן ,אפשרות יציאה מהתוכנית (הסוגרת את כל ה .)Forms-כמו כן ,בטל את לחצן הסגירה ב Form1-כך שניתן
יהיה לסגור את התוכנית רק באמצעות האופציה המתאימה בתפריט ,ולבסוף ,הגדר את AutoRedrawבForm1-
כ True-ע"מ שתוכן החלון יישמר לאחר הסתרה של חלק ממנו.
בכל אחד מה Forms-האחרים ( Form2ו ,)Form3-הוסף שורות קוד המדפיסות על גבי Form1את האירוע
שהתרחש עבור כל אחד מהאירועים הבאים,GotFocus ,Unload ,QueryUnload ,Load ,Initialize :
Activate ,LostFocusו .Deactivate-כך לדוגמה ,באירוע Activateשב Form3-תרשום:
()Private Sub Form_Activate
"Form1.Print "Form3: Activate
End Sub
תוכל להיעזר בחלון ה Form Layout-כדי להגדיר בקלות את מיקומי הטפסים על גבי המסך בעת הרצת התוכנית.
לאחר הפעלת התוכנית ,עקוב אחר סדר התרחשות ה Events-ב Form2-ו Form3-כפי שהם מודפסים על –.Form1
.3כתוב תוכנית בשם ArrangeFormsעם MDIFormושלושה Formsרגילים המוגדרים כ.MDIChild-
הוסף ל MDIForm-תפריט לטעינת הטפסים הללו ,וכן תפריט בשם Windowהמאפשר לפרוס את החלונות שבו
באופנים שונים ,Cascade ,Tile Vertically ,Tile Horizontally :ו( Arrange Icons-השתמש בשגרה Arrange
של MDIFormלשם כך) .כמו כן הגדר את האפשרות WindowListעבור התפריט Windowכ True-על מנת
שרשימת ה Forms-הפתוחים תוצג בתפריט זה( .אל תשכח לשנות את ה Startup Object-ל MDIForm-בהגדרות
הפרוייקט).
- 31אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור : 1הפקדים הסטנדרטיים I
בשיעור זה:
תכיר את ה Controlsהבאים:
( Label oתווית)
( TextBox oתיבת טקסט)
( CommandButton oלחצן פקודה)
( HScrollBar oפס גלילה אופקי)
( VScrollBar oפס גלילה אנכי)
תכיר את הפונקציות הבאות לעבודה עם מחרוזות,Mid ,Left ,Right ,Trim ,LTrim ,RTrim ,Str ,Val ,Len :
וAsc-
תלמד לשרשר מחרוזות ולהוסיף מעברי שורה
תכיר את התנאי If... Then... End If
הערה
בדרך כלל ,אני לא חוזר על Methods ,Propertiesו events-שהזכרתי בטפסים שפעולתם זהה לאופן
הפעולה ב Controls-שבפרק זה .בכל Controlאני מציין את ה Methods ,Properties-ו Events-שלא
צוינו קודם.
( LABELתווית)
Labelנועד בעיקר להצגת טקסט ,בד"כ בצמוד לפקדים אחרים
Propertiesשל Label
:Alignmentקובע את סוג יישור הטקסט בתוך הLabel-
:Appearanceקובע את אופן התצוגה של ה( Label-אפקטים תלת ממדיים או ללא אפקטים תלת ממדיים)
:AutoSizeקובע האם גודל ה Label-ישתנה באופן אוטומטי בהתאם לתוכן
:BackStyleקובע את סגנון הרקע ( – Transparentשקוף ,או – Opaqueאטום ,לא שקוף)
:Captionטקסט התוכן המוצג בLabel-
:Containerקובע את ה Container Controlשל ה Control Container( Labelהוא Controlמכולה ,כלומר
Controlהמסוגל להכיל בתוכו פקדים אחרים .מהפקדים הסטנדרטיים PicutreBox ,ו Frame-הם ה Control
Containersהיחידים)
:Indexמספרו הסידורי של ה Label-אם הוא שייך למערך של Labels
:RightToLeftקובע את כיוון קריאת הטקסט
:TabIndexקובע את מיקומו הסידורי של ה Label-בסדר מעבר הטאב
:Tagמאפשר להצמיד מידע נוסף לLabel-
:ToolTipTextטקסט עזרה המוצג כאשר סמן העכבר ממוקם מעל הLabel-
:UseMnemonicקובע האם להתייחס לתו & כתו המאפשר הגדרת מאיץ מקלדת או להציגו כמו שהוא
:WordWrapקובע האם לאשר גלישת טקסט הארוך מרוחב הLabel-
Eventsשל Label
:Changeמתרחש כאשר משתנה תוכן הLabel-
- 31אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1הפקדים הסטנדרטיים I
( TEXTBOXתיבת טקסט)
השימוש הנפוץ ב TextBox-הוא לקבלת קלט מהמשתמש
Propertiesשל TextBox
:HideSelectionקובע האם טקסט מסומן יישאר מואר כאשר הפוקוס עובר ל Control-אחר
:Lockedקובע האם ה TextBox-יכול לקבל פעולות עריכה
:MaxLengthקובע את המספר המקסימלי של תווים בניתן להזין ל 0( TextBox-מציין אי הגבלה)
:MultiLineקובע אם ה TextBox-יכול להיות מרובה שורות
:PasswordCharקובע איזה תו יחליף את התו המוקלד (בתצוגה בלבד) במקרה שה TextBox-משמש לקבלת
סיסמה
:ScrollBarsקובע אילו פסי גלילה יופיעו בTextBox-
:TabStopקובע אם סדר מעבר הטאב יפעל גם על הTextBox-
:Textמכיל את הטקסט הנמצא בTextBox-
Eventsשל TextBox
:Changeמתרחש בכל פעם שהטקסט שונה (לאחר שהשינוי הוצג ב)TextBox-
:KeyPressמתרחש בעת לחיצה על מקש ( ASCIIאות או מספר) לפני הצגת התו ב.TextBox-
( COMMANDBUTTONלחצן פקודה)
שימושו הנפוץ של CommandButtonהוא לאפשר למשתמש פעולה מסוימת המשויכת ל.CommandButton-
לפיכך ,בדרך כלל ,מגיבים לאירוע ClickבCommanButton-
Propertiesשל CommandButton
:Cancelקובע אם ה CommandButtonידמה לחיצה עליו בתגובה ללחיצה על המקש Escape
:Defaultקובע אם ה CommandButton-ידמה לחיצה עליו בתגובה ללחיצה על המקש )Return( Enter
:DisablePictureקובע איזה תמונה תוצג על גבי ה CommandButton-כאשר הוא במצד ,Disableכלומר ,כאשר
המאפיין Enabledשווה ל( False-יש לוודא שהמאפיין Styleשל ה CommandButtonיהיה )Graphical
:DownPictureקובע איזו תמונה תוצג על גבי הלחצן בזמן לחיצה עליו (שוב ,ה Style-של הCommandButton-
צריך להיות Trueבכדי שמאפיין זה יפעל)
:Enabledקובע האם הלחצן יאופשר או לא (זהו אחד המאפיינים השימושיים ביותר של )CommandButton
:MaskColorמאפשר להגדיר איזה צבע בתמונה יהיה שקוף (יש להגדיר גם UseMaskColorכ True-כדי
שמאפיין זה יפעל)
:Picuteקובע איזו תמונה תוצג על גבי הלחצן במצב רגיל.
:Styleקובע את סגנון הלחצן – Standard .מציג רק טקסט ו – Graphical-משתמש גם בתמונות המוגדרות.
:UseMaskColorקובע האם ה CommandButton-ישתמש בצבע המוגדר במאפיין MaskColorכצבע שקוף.
( HSCROLLBARפס גלילה אופקי) ו( VSCROLLBAR-פס גלילה אנכי)
פסי גלילה מאפשרים גלילת טקסט ,תמונות וכו' ,וזהו בדרך כלל שימושם העיקרי
- 31אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
Propertiesשל פסי גל ילה
:LargeChangeקובע את גודל הקפיצה כאשר לחצן העכבר לוחץ במקום כלשהו בין ה Bar-לבין אחד החצים ,או
כאשר נלחץ אחד מהמקשים PageUpאו PageDown
:Maxמגדיר את הערך המקסימלי (הקצה הימני בפס אופקי או הקצה התחתון בפס אנכי) של פס הגלילה
:Minמגדיר את הערך המינימלי של פס הגלילה (אם Minגדול מ Max-פס הגלילה משנה את כיוון התקדמותו
מימין לשמאל בפס אופקי ,ומלמטה כלפי מעלה בפס אנכי)
:SmallChangeמגדיר את גודל הצעד הקטן עבור התקדמות הBar-
Eventsשל פסי גלילה
:Changeמתרחש בעת שינוי בערכו של פס הגלילה.
:Scrollמתרחש בעת גרירת ה Bar-שעל פס הגלילה באמצעות העכבר.
פונקציות לעבודה עם מחרוזות
בסעיף זה תכיר מספר פונקציות לעבודה עם מחרוזות
הפו נקציה Len
הפונקציה Lenמאפשרת למצוא את אורכה של מחרוזת
לדוגמה:
בשורת קוד זו ,הפונקציה Lenאת המספר 13שהוא אורך המחרוזת !Hello,world
)”!Len(“Hello ,world
הפו נקציה Val
הפונקציה Valמחזירה את הערך הנומרי של מחרוזת
לדוגמה:
בשורת קוד זו ,מוחזר הערך 12ע"י הפונקציה Val
)”Val(“12abc
הפו נקציה Str
הפונקציה Strיוצרת מחרוזת הזהה לערך נומרי המועבר לה
לדוגמה:
פונקציה זו יוצרת את המחרוזת “”12.45
)Str(12.45
הפו נקציה UCase
הפונקציה UCaseמקבלת מחרוזת ומחזירה את אותה המחרוזת לאחר הפיכת האותיות הקטנות במחרוזת
לאותיות גדולות
לדוגמה:
)"something 4 u...
שורת קוד זו מחזירה את המחרוזת ""I HAVE SOMTHING 4 U...
- 31אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
UCase("I have
שיעור :1הפקדים הסטנדרטיים I
הפו נקציה LCase
הפונקציה LCaseמקבלת מחרוזת ומחזירה את אותה המחרוזת לאחר הפיכת האותיות הגדולות במחרוזת
לאותיות קטנות
לדוגמה:
)"?LCase("HOW R u 2 dayyYy...
שורת קוד זו מחזירה את המחרוזת "?"how r u 2 dayyyy...
הפו נקצ יות LTri m , Trimו Rtrim -
הפונקציה RTrimמעתיקה מחרוזת חדשה ממחרוזת נתונה ,תוך הסרת כל הרווחים הנמצאים בקצה הימני של
המחרוזת.
הפונקציה LTrimמעתיקה מחרוזת חדשה ממחרוזת נתונה ,תוך הסרת כל הרווחים הנמצאים בקצה השמאלי של
המחרוזת.
הפונקציה Trimמעתיקה מחרוזת חדשה ממחרוזת נתונה ,תוך הסרת כל הרווחים שבקצות המחרוזת.
דוגמה:
)“
פונקציה זו תחזיר את המחרוזת “
How r u
How r u
Hello
“( LTrim
“Hello
הפו נקצ יות Left , Midו Right -
הפונקציה Leftיוצרת תת מחרוזת שמאלית באורך נתון ממחרוזת נתונה
הפונקציה Rightיוצרת תת מחרוזת ימנית באורך נתון ממחרוזת נתונה
הפונקציה Midיוצרת תת מחרוזת המתחילה במיקום נתון ,ובאורך נתון מתוך מחרוזת נתונה.
דוגמאות:
(Right("Hello ,world!",6
שורת קוד זו מחזירה את המחרוזת !world
שורת קוד זו מחזירה את המחרוזת Hell
שורת קוד זו מחזירה את המחרוזת wor
(Left("Hello ,world!",4
(Mid("Hello ,world!",8,3
האופרטור &
האופרטור & מאפשר לשרשר מחרוזות
דוגמאות:
שור זו הופכת למחרוזת “”Ilan Amoyal
בשורת קוד זו ,לתוך ה txtOut-מוזנת המחרוזת המשורשרת מ txtInput1-וtxtInput2-
”“Ilan” & “ “ & “Amoyal
txtOut.Text = txtInput1.Text & txtInput2.Text
הקבוע vbCrLf
הקבוע vbCrLfמייצג את תו מעבר השורה
דוגמה:
”!Text1.Text = Text1.Text & vbCrLf & “Hello, world
שורת קוד זו מוסיפה מעבר שורה ל Text1-ומיד לאחר מכן משרשרת את המחרוזת “”!Hello, world
- 31אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
הפו נקציה Asc
מחזירה את ערכו ה ASCII-של התו במחרוזת נתונה
דוגמאות:
)”Asc(“a
בשורת קוד זו ,הפונקציה Ascמחזירה את הערך ,97שזהו ערכו של התו “ ”aלפי טבלת הASCII-
)"Asc("Goal
בשורת קוד זו הפונקציה Ascמחזריה את ,71שזהו ערכו ה ASCIIשל התו ( Gהתו הראשון במחרוזת)
התנאי
IF...THEN...END IF
תחביר התנאי הוא כדלקמן:
התנאי ( )conditionיכול להיות מורכב מהקשרים Andו/או Or
If condition Then
do_somthing
End If
- 31אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1הפקדים הסטנדרטיים I
תרגילים
.1כתוב תוכנית בשם Focusesובה ארבעה .CommandButtonsליצה על ה CommandButton-הראשון יעביר את
ה Focus-ל CommandButton-השני .לחיצה על השני תעביר את ה Focus-לשילישי ,לחיצה על השלישי תעביר את
ה Focus-לרביעי ,ולחיצה על הרביעי תעביר את ה ,Focus-חזרה ,ל CommandButtonהראשון.
כל CommandButtonבעת קבלת ה ,Focus-ידפיס על גבי ה Form-את שמו (( )Nameלאחר ניקוי התוכן הקודם
של ה ,)Form-וכמו כן ,יעדכן את כותרת ( )Captionהחלון כך שתהיה זהה לכותרתו (.)Caption
.1כתוב תוכנית בשם ThreeColorsובה שלושה CommandButtonsעם הכיתובים Green ,Redו .Blue-לחיצה על
אחד הפקדים תשנה את צבע הרקע של ה ,Form-ותעדכן את כותרת ה Form-בהתאם.
.3כתוב תוכנית בשם Concatenateונח בה שלושה פקדי TextBoxו CommandButton-אחד.
סמוך ל TextBox-הראשון מקם Labelעם הכיתוב “ .”Input1סמוך ל TextBox-השני מקם Labelעם הכיתוב
“ ”Input2וליד השלישי מקם Labelעם הכיתוב “ .”Outputכמו כן ,נעל את ה TextBox-השלישי מפני עריכה.
לחיצה על ה CommanButton-תשרשר את שתי המחרוזות שבשני פקדי ה.TextBoxes-
.1כתוב תוכנית זהה לקודמת בשם Concatenate2עם השינויים הבאים:
ה CommandButton-יהיה .Default
יוכנס מעבר שורה בין שתי המחרוזות המשורשרות.
לאחר השרשור ,ימחקו תכני תיבות הקלט וה Focus-יוחזר לתיבת הקלט הראשונה.
.1כתוב תוכנית בשם .TextBoxCopyעל ה Form -הנח שני פקדי TextBoxהאחד לקלט ( )Inputוהשני
לפלט ( .)Outputהתוכנית צריכה להעתיק את המחרוזת המוזנת כקלט ב TextBox-הראשון אל ה TextBox-של
הפלט .כל העתקה תיכנס לשורה חדשה בפלט מבלי למחוק את השורות הקודמות.
בתוכנית זו הוסף שלושה .CommandButtonsאחד להעתקה (זה יהיה פקד ה ,)Default-שני לניקוי תיבת הפלט,
ושלישי לסגירת התוכנית (זה יהיה פקד ה.)Escape-
לאחר העתקת הטקסט ,יש להחזיר את ה Focus-לתיבת הקלט תוך סימון הטקסט הרשום בה.
.1כתוב תוכנית בשם ,DigitTextBoxשתכלול TextBoxשיאפשר קלט של ספרות ,מקש ,Backspaceומקש Enter
למעבר שורה .בנוסף הנח שני ,CommandButtonsהאחד לניקוי ה TextBox-והשני ליציאה (שיהיה מקש ה-
Escapeבתוכנית).
.1כתוב תוכנית בשם :SlideColors
ב Form-הנח שלושה ScrollBarsוהגדר את הטווח שלהם מ 2-עד .111כמו כן ,הנח Labelעל הטופס.
בעת שינוי ערכו של אחד מה ScrollBars-יש לעדכן את צבע הרקע של ה Label-באמצעות הפונקציה ,RGBכך
שה ScrollBar-הראשון יהווה את המרכיב Redבפונקציה ,ה ScrollBar-השני יהווה את מרכיב הGreen-
בפונקציה ,וה ScrollBar-השלישי יהווה את מרכיב ה Blue-בפונקציה.
צור ממשק נוח למשתמש תוך שימוש ב Labels-לפי הצורך.
- 12אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
.1צור תוכנית זהה לתוכנית הקודמת בשם SlideColors2תוך הוספת השיפורים הבאים:
דאג לכך שבזמן שהתוכנית עולה ,צבע ה Label-יהיה תואם לערכים שבScrollBars-
בסמוך לכל ScrollBarתוצב תיבת טקסט שתשקף את הערך שבScrollBar-
צבע הרקע של כל TextBoxיהיה צבע המרכי שאותו הוא מייצג.
כמו כן ,נעל את תיבות טקסט אלו
ה LargeChange-של ה ScrollBar-יהיה 10
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור : 4מרכיבי השפה I
בשיעור זה:
תלמד להצהיר על משתנים ועל קבועים ותכיר את סוגם
תבין את ההבדל בין משתנה מקומי בפרוצדורה או פונקציה לבין משתנה משותף במודול
תבין את ההבדלים בין Public Dimו Private-בהקשר של הצהרות משתנים
תכיר את מבני הבקרה הקיימים בVisual Basic-
תכיר את הפונקציות Beep ,InputBoxוIIf-
( VARIABLESמשתנים) ו( CONSTANTS-קבועים)
בסעיף זה נסקור את:
סוגי המשתנים בVisual Basic-
אופן ההצהרה על משתנים
אזורי הצהרה שונים במודול
הסתרה או חשיפה של משתנים באמצעות המילים Privateאו ( Publicהרשאות גישה)
סוג י משתנים
ב Visual Basic-קיימים סוגי משתנים לאחסון מספרים שלמים ,מספרים ממשיים (עם נקודה צפה) וכן מחרוזות
וטיפוסים נוספים.
למספר סוגים ישנם תווים מיוחדים להצהרה משתנים ( ,)Type-declaration characterתווים אלו הנם שריד של
הגרסאות המוקדמות של .Visual Basicלסוגי הנתונים החדשים (למשל Byteו )Boolean-מעצבי Visual Basic
לא הקצו תווים מיוחדים (כנראה כיוון שזה רעיון גרוע מלכתחילה) ,בכל אופן עדיף להשתמש בהצהרה ברורה ולא
בתווי הצהרה
הסוג Variantהוא סוג כללי המאפשר להכיל בתוכו את כל סוגי המשתנים (מלבד מחרוזות בגודל קבוע)
הסוג Variantמאפשר טיפול גמיש מאוד בנתונים ,וכן פעילות אוטומציה בין יישומים שונים
בטבלה הבאה מפורטים סוגי המשתנים השימושיים ביותר:
סוג
גודל אחסון בזכרון
תחום ערכים
תו הצהרה
Byte
Boolean
Integer
Long
בית אחד
2בתים
2בתים
4 bytes
Single
(מספר ממשי ברמת
דיוק בודדת)
4בתים
0עד 255
Trueאו False
-32,768עד 32,767
-2,147,483,648
עד
1,111,113,111
בתחום השלילי:
-3.402823E38
עד
E-451.121111בתחום החיובי:
1.401298E-45
עד
E383.121113
אין
אין
( %אחוז)
&
(אמפרסנד)
- 13אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
! (סימן
קריאה)
שיעור :4מרכיבי השפה I
סוג
גודל אחסון בזכרון
תחום ערכים
תו הצהרה
Double
(מספר ממשי ברמת
דיוק כפולה)
8בתים
Date
8בתים
Object
( Stringבגודל
משתנה)
( Stringבגודל קבוע)
4בתים
10בתים +אורך
המחרוזת
כאורך המחרוזת
בתחום השלילי:
-1.79769313486231E308
עד
E-3241.11211111111111בתחום החיובי:
E-3241.11211111111111
עד
E3081.11111313111131
1לינואר שנת 100
עד
ה 31-לדצמבר שנת 1111
הפנייה כלשהי לאובייקט
0עד 2מיליארד (בערך)
( #סולמית)
אין
( $דולר)
1עד ( 65,400בערך)
( $דולר)
( Variantעם
מספרים)
( Variantעם תווים)
16בתים
11בתים +אורך
המחרוזת
אין
כל ערך מספרי עד מקסימום לתחום
המספרים מסוג Double
אורך זהה כשל מחרוזת בגודל משתנה
הצהרה על משתנים
ניתן להצהיר על משתנים במקומות שונים בתוכנית:
oברמת המודול (חלק ה)General-
oבתוך פרוצדורה או פונקציה
תחביר ההצהרה על משתנים הוא:
Dimזוהי המילה המורה ל Visual Basic-להקצות מקום אחסון למשתנה
בתוך פרוצדורה או פונקציה חייבים להשתמש במילה Dim
ברמת המודול ניתן להשתמש במילים Publicאו Privateבמקום :Dim
( Public oציבורי) :מאפשר גישה למשתנה לקטעי קוד הנמצאים במודולים אחרים
( Private oפרטי) :מאפשר גישה למשתנה אך ורק לפרוצדורות והפונקציות הרשומות בתוך אותו מודול בו
הוצהר המשתנה
oאם משתמשים ב ,Dim-ההחלטה אם המשתנה יהיה Privateאו Publicבמודול תלויה בסוג שלו .למשל,
עבור ( Formשהוא למעשה )Class Moduleברירת המחדל היא Private
:varnameזהו שם המשתנה
:Typeזהו סוג המשתנה ,אם לא מצוין הסוג המשתנה יהיה מסוג ( Variantאלא אם נעשה שימוש בDefType-
במודול – נושא זה לא נדון בקורס)
ניתן להצהיר על Stringsבאורך קבוע באמצעות שימוש בסימן *
]Dim varname [As type
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
דוגמאות
- nGradeמשתנה Integer
- strFirstNameמשתנה String
- m_strLNameמשתנה Stringבאורך קבוע של 20תווים
- lBillGatesSalaryמשתנה מסוג Long
– nStageמשתנה מסוג Integer
Dim nGrade As Integer
Private strFirstName As String
Private m_strLName As String * 20
Public lBillGatesSalary As Long
Dim nStage%
הצהרה על קבועים
ניתן להצהיר על קבועים במקומות שונים בתוכנית:
oברמת המודול (חלק ה)General-
oבתוך פרוצדורה או פונקציה
תחביר ההצהרה על קבועים הוא:
[Private | Public] Const constname [As type] = expression
המילה Constמשמשת להצהרת קבועים
קבועים על פי ברירת המחדל הם מסוג Privateאלא אם נרשם Publicבמפורש
ב Class Module-לסוגיו השונים ( Formהוא דוגמה ל)Class Module-לא ניתן להצהיר על קבועים כPublic-
( Class Modulesנלמד בהמשך הקורס)
ניתן להצהיר על Constsגם בתוך פונקציות ופרוצדורות ,אך הם אינם קיימים מחוץ לפונקציות או פרוצדורות
אלה
דוגמאות
קבוע Doubleהמאותחל לערך 17
קבוע Stringהמאותחל לערך “"Sales
קבוע Longהמאותחל לערך 4405
cdTaxPercentage As Double = 17#
"Private Const cstrDepartment = "Sales
Public const clErrNumber as Long = 4405
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :4מרכיבי השפה I
( CONTROL STRUCTURESמבני בקרה)
בסעיף זה נכיר את מבני הבקרה השונים הקיימים ב Visual Basic-בכלל זה נכיר את צוות רישום התנאי השונות ,מבני
לולאה ומבנה רב ברירות ()Case
המבנה If...Then...Else
צורה ראשונה
]If condition Then [statements] [Else elsestatements
conditionהוא התנאי
statementsהן המשפטים שיתבצעו אם התנאי מתקיים (אם יש מספר משפטים ,יש להפריד בניהם באמצעות
נקודה-פסיק)
:elsestatementsאלו הם המשפטים שיתבצעו אם התנאי לא מתקיים (אם יש מספר משפטים ,יש להפריד בניהם
באמצעות נקודתיים)
דוגמה :1
"If nGrade > 90 Then MsgBox "Very good!" Else MsgBox "OK
דוגמה :1
"If nAge >= 18 And nAge <= 21 Then Print "Army": Print "You are Great
צורה שניה
If condition Then
][statements
condition-n Then
[ElseIf
[else if statements]...
[Else
]][else statements
End If
בצורה זו ניתן ליצור מספר הסתעפויות אפשריות
ניתן לרשום בלוק משפטים לביצוע עבור כל תנאי
אין חובה לכלול את חלקי ה ElseIf-או ה Else-אך יש להקפיד לרשום End Ifבסוף המבנה
דוגמה:
If nAge < 13 Then
"Print "Child
ElseIf nAge < 18 Then
"Print "Teenager
ElseIf nAge < 22 Then
"Print "Soldier
Else
"Print "Big-Boy
End If
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
המ בנה While...Wend
תחביר המבנה הוא:
conditionהוא התנאי הנבדק
statementsהם המשפטים המבוצעים אם התנאי הוא True
טיפ :עדיף להשתמש בלולאה Do...Loopכיוון שהיא גמישה יותר
דוגמה:
While condition
][statements
Wend
Dim nCounter As Integer
nCounter = 1
While nCounter < 10
)Print "Now counter is equal to " & str(nCounter
Wend
המבנה Do...Loop
צורה ראשונה
]Do [{While | Until} condition
[[statements
[[Exit Do
[[statements
Loop
conditionהוא התנאי הנבדק
Whileמשמעותו – "כל עוד התנאי מתקיים"
Untilמשמעותו – "עד אשר יתקיים התנאי"
המשפטים יבוצעו אם התנאי בכללותו יתקיים (כולל ה While-או ה)Until-
בצורה זו התנאי נבדק לפני הכניסה ללולאה ,כך שאפשר שהלולאה לא תתבצע כלל
ניתן לצאת בכל שלב מהלולאה ע"י ( Exit Doמה שלא ניתן לעשות בWhile...Wend-
צורה שניה
Do
][statements
][Exit Do
][statements
]Loop [{While | Until} condition
השוני היחידי בין צורת רישום זו לקודמת ,הוא בכך שגוף הלולאה במקרה זה מתבצע פעם אחת לפחות (כיוון
שהתנאי נבדק רק בסיום הלולאה)
דוגמה:
Dim strBoard As String
Dim nColomns As Integer, nRows As Integer
Const cnMaxColomns As Integer = 10, cnMaxRows As Integer = 10
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :4מרכיבי השפה I
nRows = 1
Do While nRows <= cnMaxRows
nColomns = 1
Do While nColomns <= cnMaxColomns
)" \strBoard = strBoard & Format(nRows * nColomns, "000
nColomns = nColomns + 1
Loop
strBoard = strBoard & vbCrLf
nRows = nRows + 1
Loop
MsgBox strBoard
קטע קוד זה יוצר מחרוזת הכוללת רווחים ומעברי שורות ,ואשר מאחסנת בתוכה את לוח הכפל
שים לב לשימוש בפונקציה ( Formatתוכל לקבל עזרה אודות פונקציה זו במערכת העזרה של )Visual Basic
קטע קוד זה משתמש בשתי לולאות Do...Loopמקוננות לשם ביצוע המשימה
בסוף פירמוט המחרוזת ,מוצגת המחרוזת ע"י הפונקציה MsgBox
המבנה For...Next
תחביר המבנה:
הלולאה Forמאפשרת ביצוע נוח של בלוק פקודות מספר קבוע של פעמים
counter = startזוהי פעולת האתחול של מונה הלולאה
endהוא הערך הסופי של מונה הלולאה
stepזהו ערך הקפיצה של מונה הלולאה לאחר כל איטרציה (ניתן לקבוע ערך שלילי ל Step-כך שמונה הלולאה
יקבל ערכים הולכים וקטנים)
דוגמה:
]For counter = start To end [Step step
][statements
][Exit For
][statements
]Next [counter
Dim i As Integer
For i = 1 To 5
)Print "The number is: " & str(i
Next
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
המבנ ה Select Case
המבנה Select...Caseהוא מבנה רב ברירות המאפשר בחירת בלוק לביצוע ,ע"פ בדיקת ערכו של משתנה מסוים
תחביר:
Select Case testexpression
[Case expressionlist-n
[statements-n]] ...
[Case Else
]][elsestatements
End Select
textexpressionהוא המשתנה שערכו נבחן
expressionlistזוהי רשימת ערכים ,שאם המשתנה הנבחן שווה לאחד מהערכים שברשימה ,אותו בלוק השייך ל-
Caseזה יתבצע
– elsestatementsיתבע בכל מקרה אחר ,כלומר אם לא נמצא ערך מתאים ברשימות הערכים השונות
ניתן להשתמש בביטוי val1 To val2כדי ליצור טווח ערכים
ניתן להשתמש בביטוי Is comparisonכדי להפעיל בדיקת ערך בתוך Select
דוגמה:
Dim nAge As Integer
))"nAge = Val(InputBox("Enter an age
Select Case nAge
Case 1
"MsgBox "One year old
Case 2
"MsgBox "Two years old
Case 3, 4, 5, 6
"!MsgBox "Well, growing
Case 7 To 13
"!MsgBox "Not a child anymore
Case 14, 15, Is < 19
"?MsgBox "A stupid teenager
Case Else
"!MsgBox "Well, very big
End Select
בקטע קוד זה מוצג Messageשונה על-פי המספר שהזין המשתמש.
תיאור הפונקציה InputBoxמובא בסעיף הבא
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :4מרכיבי השפה I
הפונקציות ,BEEP
INPUTBOXוIIF-
הפו נקציה Beep
הפונקציה Beepמשמיעה צפצוף מרמקול המחשב
תחביר:
Beep
הפו נקציה InputBox
הפונקציה InputBoxמציגה הודעה למשתמש ,ומאפשרת לו להזין נתונים בתיבה מתאימה
תחביר הפקודה:
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile,
)]context
Promptהוא ההודעה למשתמש
Titleהוא כותרת ההודעה
defaultהוא המחרוזת שתוצג עם הפעלת הInputBox-
xposו ypos-מגדירים את מיקום ה InputBox-במסך
helpfileו context-מאפשרים הפעלת מערכת עזרה בתגובה ללחיצה על F1
הפונקציה מחזירה Stringכך שיהיה צורך בהמרות במקרה של בקשרה להזנת מספר מצד המשתמש
דוגמה:
)"strGender = InputBox("Enter your gender", "Gender", "Male
בהפעלת שורת קוד זו Visual Basic ,מציגה את החלון הבא:
הפו נקציה IIf
פונקציה זו מאפשר בדיקת תנאי ,והחזרת ערך אחד מתוך שניים נתונים בהתאם לבדיקה
פונקציה זו דומה בפעולתה לאופרטו ? בשפת C
תחביר:
)IIf(expr, truepart, falsepart
exprהוא הביטוי המוערך
truepartיתבצע ,והערך שלו יוחזר ע"י הפונקציה אם התוצאה של exprהיא True
falsepartיתבצע ,והערך שלו יוחזר ע"י הפונקציה אם התוצאה של exprהיא False
הפונקציה מפעילה בכל מקרה את הפקודות הרשומות ב truepart-ובelsepart-
- 12אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
דוגמה:
קטע קוד זה מציג InputBoxלמשתמש וקולט ממשנו מספר
הפונקציה IIfמכניסה למחרוזת strAgeאת הערך המתאים לפי בדיקת התנאי nAge = 5
לבסוף מוצגת הודעה למשתמש
Dim nAge As Integer, strAge As String
)"nAge = InputBox("Enter an age", "Age
)"strAge = IIf(nAge = 5, "The age is five", "The age is not five
MsgBox strAge
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :4מרכיבי השפה I
תרגילים
.1צור תוכנית בשם ControlStructuresהמציגה למשתמש בקשה להזנת מספר בין 0ל 2-באמצעות הפונקציה
,InputBoxובהתאם למספר שהוזן יוצג MsgBoxלמשתמש.
מקם על ה Form-שלושה CommandButtonsוכתוב את הנדרש בשלוש צורות:
תוך שימוש ב ,If...Then...Else-בתגובה ל Click-על ה CommandButton-הראשון
א.
תוך שימוש ב Select...Case-בתגובה ל Click-על ה CommandButton-השני
ב.
תוך שימוש בפונקציה IIfבתגובה ל Click-על ה CommandButton-השלישי
ג.
.1כתוב תוכנית בשם .PrintSequenceמקם על טופס TextBoxאחד ו .CommandButton-בעת לחיצה על
ה CommandButton-יש להציג על Labelשיונח על הטופס את רצף המספרים המתחיל ב 0-עד המספר שהוזן ע"י
המשתמש לתוך ה.TextBox-
.3כתוב תוכנית בשם .MultipleBoardלחיצה על CommandButtonשימוקם על הטופס ,ידפיס על גבי Label
שימוקם בטופס את לוח הכפל במימדים 10X10בתוספת כותרות.
.1כתוב תוכנית בשם ProcessInputsהקולטת מהמשתמש מספים בעזרת InputBoxעד אשר המשתמש מזין 0או
מחרוזת ריקה .התוכנית תציג על גבי הטופס את סכום המספרים ,מכפלתם (אין לכפול כמובן ב 0-האחרון) ,ואת
ממוצע המספרים.
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור : 3הפקדים הסטנדרטיים II
בשיעור זה:
תכיר את ה Controls-הבאים:
( CheckBox oתיבת סימון)
( OptionButton oתיבת אפשרות)
( Frame oמסגרת)
( ListBox oתיבת רשימה)
( ComboBox oתיבה משולבת)
( Line oקו)
( Shape oצורה)
( Timer oשעון)
תכיר שיטה לניהול ממשק המשתמש באמצעות Timer
( CHECKBOXתיבת סימון)
CheckBoxשימושי כאשר יש צורך בבחירת אחת שתי אפשרויות "כן" או "לא"" ,אמת" או "שקר"" ,מלא" או
"ריק" וכו'
ישנה אפשרות שלישית הנקראת ,Grayedהיא משמשת בעיקר לתיאור מצב לא מוגדר או חלקי (תוכל לעיין למשל
התוכנית ההוספה וההסרה של פריטי Windowsמתוך ה ,Control Panel-שם Grayedמסמל בחירה חלקית של
התת קבוצה)
המעבר בין שני המצבים הראשונים הוא אוטומטי .כדי להפוך את התיבה ל Grayed-יש לנהל זאת מתוך הקוד
Propertiesשל CheckBox
DownPicture ,DisablePictureו :Picture-מגדירים תמונות למצבים שונים של ה CheckBox-במקרה שה-
Styleשל ה CheckBox-מוגדר כGraphical-
:Valueמכיל את אחד משלושה ערכים שבאוסף הקבועים vbUnchecked ,vbChecked – CheckBoxConstants
וvbGrayed-
Eventsשל CheckBox
:Clickמתרחש בעת לחיצת עכבר או מקש הרווח ,המשנה את ערך הCheckBox-
( OPTIONBUTTONלחצן אפשרות)
תוכל להשתמש ב OptionButton-במסגרת קבוצת אפשרויות שרק אחת מהן יכולה להיות מסומנת בזמן נתון
Propertiesשל OptionButton
:Valueמכיל את ערך ה OptionButton-שהוא Trueאו False
- 13אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :3הפקדים הסטנדרטיים II
( FRAMEמסגרת)
באמצעות Frameתוכל לקבץ מספר Controlsתחת קבוצה אחת
Frameהוא פקד מסוג Container
שתי תכונות עיקריות מאפיינות :Containers
oאם משנים את מיקומו של ה Frame-כל ה Child Controls-שבתוכו זזים יחד איתו
oכאשר ה Frame-נמצא במצב Disabledכל ה Child Controls-שבו גם הם Disabled
Propertiesשל Frame
:Enabledהוא המאפיין היותר חשוב של ה ,Frame-אם ערכו שווה ל False-כל ה Controls-שבו הופכים ללא
זמינים
Methodsשל Property
:Moveהוא Methodחשוב ב ,Frame-כיוון ששימוש נכון בו יכול לאפשר מיקום מהיר של קבוצת Controls
דוגמה : 1התוכנית CopyText
בתוכנית זו תיצור טופס עם שני .TextBoxesלחיצה על CommandButtonיעתיק את תוכני הTextBoxes-
לתיבה שלישית .ליד כל תיבת טקסט יופיע CheckBoxשיקבע האם יש להעתיק את אותו הטקס לפלט .בנוסף,
יוצבו על התיבה שני OptionButtonsהבוררים בין רווח ( )Spaceלבין מעבר שורה ( )New lineכמפריד בין תיבות
הטקסט.
בתוכנית זו נבצע אתחול של ערכי ה Controls-השונים בשלב ה Load-של הטופס.
.1צור פרוייקט חדש מסוג ,Standard EXEושמור אותו:
הקצה לפרוייקט את השם CopyTextולטופס frmCopyText
שמור את הפרוייקט
.1הוסף Controlsלטופס:
הוסף את ה Controlsהבאים ומקם אותם ע"פ הציור שלפניך:
oשני lblInput1:LabelsוlblInput2-
oשני chkIncludeText1 :CheckBoxesוchkIncludeText2-
oשני optSeparateBySpace :OptionButtonsוoptSeparateByNewLine-
CommandButon oאחדcmdCopyTexts :
oשלושה txtInput2 ,txtInput1 :TextBoxesוtxtOutput-
מקם את ה Controls-כך שהטופס ייראה כמו בציור הבא
הקצה להם שמות כפי שמוצג בציור הבא
קבע את סדר מעבר הטאב כך שיהיה לפי סדר המספרים המוקפים במלבן בציור הבא
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
0
4
1
2
5
3
6
7
8
9
: הגדר את המאפיינים הבאים.3
ערך
1-Fixed Single
CenterScreen–2
True
מאפיין
BorderStyle
StartUpPosition
Default
אובייקט
frmCopyText
cmdCopyTexts
: הוסף קוד לטופס.1
Load בתגובה לאירוע, השוניםControls- קוד זה מאתחל את הטקסט בכותרת הטופס ועל גבי ה
Controls- קוד זה מאתחל את ערכי ה, בנוסף
Private Sub Form_Load()
' Initialize the form caption
frmCopyText.Caption = "Copy Text"
' Initialize the labels caption
lblInput1.Caption = "Input &1"
lblInput2.Caption = "Input &2"
' Clear the text boxes
txtInput1.Text = ""
txtInput2.Text = ""
txtOutput.Text = ""
' Initialize the check boxes
chkIncludeText1.Caption = "Copy to output"
chkIncludeText1.Value = vbChecked
chkIncludeText2.Caption = "Copy to output"
chkIncludeText2.Value = vbChecked
- 11 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
II הפקדים הסטנדרטיים:3 שיעור
' Initialize the option buttons
optSeparateByNewLine.Caption = "Separate by a &new-line"
optSeparateBySpace.Caption = "Separate by a &space"
optSeparateBySpace = True
' Initialize the command button
cmdCopyTexts.Caption = "&Copy texts to output"
End Sub
: הוסף קוד לטופס.1
cmdCopyTexts הקוד הבא פועל בתגובה ללחיצה על הלחצן
Private Sub cmdCopyTexts_Click()
' Copy first input text only if chkInputText1 is checked
If chkIncludeText1.Value = vbChecked Then
txtOutput.Text = txtOutput.Text & txtInput1.Text
End If
' Copy space or new-line only if txtOutput is not empty
If txtOutput.Text <> "" Then
' Determines which option button is checked and copy new-line
' or space accordingly
If optSeparateByNewLine.Value = True Then
txtOutput.Text = txtOutput.Text & vbCrLf
Else
txtOutput.Text = txtOutput.Text & " "
End If
End If
' Copy second text only if chkInputText2 is checked
If chkIncludeText2.Value = vbChecked Then
txtOutput.Text = txtOutput.Text & txtInput2.Text
End If
' Prepare the output text box to the next copy
If txtOutput.Text <> "" Then
txtOutput.Text = txtOutput.Text & vbCrLf
End If
' Bring the focus back to input1
txtInput1.SelStart = 0
txtInput1.SelLength = Len(txtInput1.Text)
txtInput1.SetFocus
End Sub
הרץ את התוכנית ובדוק את פעולתה.1
- 11 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
( LISTBOXתיבת רשימה)
תיבת רשימה מאפשרת להציג למשתמש רשימת מחרוזות
המשתמש יכול לגלול את רשימת הערכים כלפי מטה או מעלה
האינדקסים של פריט ה ListBoxנעים בין 0ל( n 1 -כשאר nהוא מספר הפריטים ברשימה)
Propertiesש ל ListBox
:Columnsקובע אם ה ListBoxיציג את התוכן בטור אחד ( ) Columns 0או במספר טורים ( ) Colums 1עם
פס גלילה אופקי
:IntegralHeightקובע אם ה ListBox-יתאים את גובהו כך שמחרוזות יוצגו בשלמות
:ItemDateמערך שלמים מסוג Longהמאפשר לצרף מידע נוסף לפריטי ה ListBox-כך שלכל מחרוזת ניתן יהיה
להצמיד ערך מספרי לשימוש פנימי כלשהו של התוכנית
:Listמערך מחרוזות המכיל בתוכו את תוכן הListBox
:ListCountמחזיר את מספר הפריטים בListBox
:ListIndexמחזיר את האינדקס של הפריט הנבחר ( -במקרה של ListBoxללא ,MultiSelectאו את הפריט
שנמצא בפוקוס (בין אם הוא נבחר או לא) כאשר MultiSelectשווה ל 1או 1
:MultiSelectקובע האם יהיה ניתן לבחור מספר פריטים ברשימה במקביל
:NewIndexמחזיר את האינדקס של הפריט האחרון שנוסף לרשימה
:SelCountמחזיר את מספר הפריטים הנבחרים ברשימה
:Selectedמאפיין זה מקבל כפרמטר אינדקס של פריט ,ומחזיר ערך בוליאני הקובע האם הפריט נבחר או לא.
מאפיין זה שימושי במקרה של .MultiSelectכמו כן ,ניתן לקבוע בעזרת מאפיין זה האם פריט ייבחר או לא.
:Sortedקובע אם האלמנטים ברשימה ימוינו באופן אוטומטי
:Styleקובע את סגנון ה( ListBox-רגיל או עם )CheckBoxes
:TopMostמאפשר לקבוע איזה פריט יוצג בראש הרשימה
Methodsשל ListBox
:AddItemמאפר להוסיף פריטים לרשימה בזמן ריצה
:Clearמנקה את התוכן של הListBox-
:Refreshמרענן את תצוגת הListBox
:RemoveItemמסיר פריט מהרשימה
Eventsשל ListBox
:ItemCheckמתרחש כאשר המשתמש מסמן Vב CheckBox-המוצמד לפריט רשימה (רלוונטי כאשר המאפיין
Styleשווה ל)checkbox
:Scrollמתרחש כאשר המשתמש גולל את הרשימה או כאשר המתכנת גולל את הרשימה ע"י שימוש במאפיין
TopIndex
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :3הפקדים הסטנדרטיים II
( COMBOBOXתיבה משולבת)
ComboBoxהוא שילוב של TextBoxוListBox-
כל ה( Propertiesמלבד ,)Styleה Methodsוה Eventsשך ComboBox Controlזהים לאלו של TextBox
וה ListBoxוהתנהגותם זהה גם כן.
Styleהוא המאפיין היחיד ששונה בComboBox-
Propertiesשל ComboBox
:Styleקובע את סגנון ה:ComboBox
:Dropdown Combo oכולל TextBoxורשימה נפתחת .המשתמש יכול לבחור ערך מהרשימה או
להקליד את הערך בעצמו
:Simple Combo oכולל TextBoxורשימה לא נפתחת .המשתמש יכול לבחור את הרשימה בעצמו או
להקליד את הערך
:Dropdown List oכולל רשימה נפתחת בלבד .המשתמש יכול לבחור ערך מהרשימה בלבד.
( LINEקו) ו( SHAPE-צורה)
Lineו Shape-הם פקדים המאפשרים להוסיף קווים שונים וצורות לטופס ללא שימוש בפונקציות גרפיקה לשם
כך
ל Line-ול Shapeאין Events
Propertiesשל Lineו Shape -
Width ,Top ,Leftו( Height-ב :)Shapeמגדירים את גודל ומיקום המלבן החוסם את הצורה
( Y2 ,Y1 ,X2 ,X1ב :)Line-מגדירים את נקודות הקצה של הישר
חשוב לשים לב למאפייני הצבע והרקע של Lineו Shape-כי מעבר לשימוש גרפי בצורות אלו ,אין להם שימושים
רבים
( TIMERפקד שעון)
Timerמשמש לשיגור אירוע כל זמן נתון.
Timerהוא מסוג הפקדים שלא נראים ב( Run Time-זמן ריצה)
Propertiesשל Timer
:Enabledקובע האם השעון פעיל וכתוצאה מכך משגר אירוע כל זמן נתון
:Intervalקובע את המרווח במילי שניות בין שיגור אירוע אחד לשני
Eventsשל Timer
:Timerמתרחש כל Intervalמילי שניות (בתנאי שה Timer-נמצא במצב )Enabled
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
דוגמ ה StudentCourses – 2
בתוכנית זו נאפשר למשתמש לשבץ תלמידים לקורסים ,ולהוסיף את השיבוצים לListBox-
המשתמש יוכל גם להסיר שורות שהכניס או את כולן תוך שימוש ב CommandButton-שיוצב לשם כך
בתוכנית זו נשתמש ב Timer-שינהל את ממשק
.1צור פרוייקט חדש מסוג ,Standard EXEושמור אותו:
הקצה לפרוייקט את השם StudentCoursesולטופס frmStudentCourses
שמור את הפרוייקט
.1הוסף Controlsלטופס:
הוסף את ה Controlsהבאים ומקם אותם ע"פ הציור שלפניך:
oשלושה lblCourse ,lblStudents :LabelsוlblStudentToCourse-
oשני cboStudents :ComboBoxesוcboCourses-
oשלושה cmdQuit ,cmdAdd :CommandButtonsוcmdDelete-
ListBox oאחדlstStudentToCourse :
CheckBox oאחדchkDeleteAll :
Timer oאחדtmrUUUpdate :
oשלושה txtInput2 ,txtInput1 :TextBoxesוtxtOutput-
מקם את ה Controls-כך שהטופס ייראה כמו בציור
הקצה להם שמות כפי שמוצג בציור
קבע את סדר מעבר הטאב כך שיהיה לפי סדר המספרים המוקפים במלבן בציור
תוכל להשתמש בקווים כדי להפריד חלקים בטופס באופן וויזואלי
0
5
6
1
2
3
4
7
8
9
.3הגדר את המאפיינים הבאים:
אובייקט
frmStudentCourses
lblStudents
cboStudents
lblCourses
cboCourses
lblStudentToCourses
lstStudentToCourse
מאפיין
BorderStyle
StartUpPosition
Autosize
Style
Autosize
Style
Autosize
Sort
ערך
1-Fixed Single
2 - CenterScreen
True
1 - Dropdown combo
True
2 - Dropdown List
True
True
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
II הפקדים הסטנדרטיים:3 שיעור
1 - Checkbox
True
True
20
Style
Default
Cancel
Interval
cmdAdd
cmdQuit
tmrUIUpdate
:הוסף קוד לטופס
: הקוד הבא מצהיר על משתנים וקבועים
בדיקת משתנה זה.ListBox- נועד לספור את מספר הפריטים שיש להסיר מהm_nCheckCounter המשתנה
ListBox- בתוך הCheck בתגובה לסימון או ביטול סימון שלchkDeleteAll מקילה על שינוי מראה הלחצן
. מתעדכן בהתאםlstStudentToCourse- כל הסימונים בתוך הchkDeleteAll- במקרה של שינוי הסימון ב
כדי לאפשרm_nCheckedSource בתוכנית זו נעשה שימוש במשתנה הגלובלי,כיוון שנוצרת תגובה מעגלית
לבדוק האם מקור השינוי היה פעולת משתמש או פעולתlstStudentToCourse-בקוד התגובה לסימון שורה ב
. שאז אין לבצע מאומה,השמה מתוך הקוד
הקבועים הופכים את התוכנית לקריאה יותר
Dim m_nCheckCount As Integer
Dim m_nCheckedSource As Integer
Const CHECK_SOURCE_USER As Integer = 0
Const CHECK_SOURCE_CODE As Integer = 1
: הוסף קוד לטופס.1
: הקוד הבא מאתחל את הפקדים השונים ואת המשתנים
Private Sub Form_Load()
' Initializing lblStudets
lblstudents.Caption = "&Students"
' Initializing cboStudents
cboStudents.Clear
cboStudents.AddItem "John Degweed"
cboStudents.AddItem "Erick E"
cboStudents.AddItem "Michel de Hey"
cboStudents.AddItem "Paul Okenfold"
cboStudents.AddItem "Dimmitri"
cboStudents.AddItem "Tiesto"
cboStudents.AddItem "Josh Wink"
cboStudents.AddItem "Terry Francis"
cboStudents.AddItem "Ferry Corsten"
' Initializing lblCourses
lblCourses.Caption = "&Courses"
' Initializing cboCourses
cboCourses.Clear
cboCourses.AddItem "Advanced DJ Techniqs"
cboCourses.AddItem "Using guitar loops in the Mix"
cboCourses.AddItem "Synthisizer - Advance Topics"
cboCourses.AddItem "Synthisizer - Fundamentals"
cboCourses.AddItem "Extarcting Loops"
' Initializing cmdAdd
cmdAdd.Caption = "&Add to list"
- 12 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
' Initializing cmdQuit
cmdQuit.Caption = "&Quit"
' Initializing lblStudentsToCourses
lblStudentToCourse.Caption = "Student to course"
' Initializing lstStudentToCourse
lstStudentToCourse.Clear
' Initializing chkDeleteAll
chkDeleteAll.Caption = "Delete &all rows"
' Initializing cmdDelete
cmdDelete.Caption = "&Delete"
' Other initializations
m_nCheckCount = 0
m_nCheckedSource = CHECK_SOURCE_USER
End Sub
: הוסף קוד לטופס.1
cmdQuit או לחיצה עלcmdAdd להלן קוד השגרות לתגובה בעת לחיצה על
להזנת ערך חדשcboStudent- הפוקוס מוחזר ל, לאחר הוספת השורה לרשימה
Private Sub cmdAdd_Click()
Dim strRow As String
strRow = cboStudents.Text & ": " & cboCourses.Text
lstStudentToCourse.AddItem strRow
cboStudents.SelStart = 0
cboStudents.SelLength = Len(cboStudents.Text)
cboStudents.SetFocus
End Sub
Private Sub cmdQuit_Click()
Unload Me
End Sub
: הוסף קוד לטופס.1
cmdDelete הקוד הבא מופעל בתגובה ללחיצה על
היא מבצעת איטרציה על פריטי, אחרתClear- אם יש להסיר את כל הפריטים מהרשימה השגרה משתמשת ב
הרשימה בכדי לבדוק אלו מהם מסומנים למחיקה
chkDeleteAll ומבטלת את הסימון שלידm_nCheckCount השגרה מאפסת את המונה, בסיום
Private Sub cmdDelete_Click()
Dim i As Integer
' Check whether to remove all items
If chkDeleteAll.Value = vbChecked Then
lstStudentToCourse.Clear ' Use Clear to emove all items
Else
' Remove only the checked items
i = 0
Do While i <= (lstStudentToCourse.ListCount - 1)
If lstStudentToCourse.Selected(i) = True Then
- 11 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
II הפקדים הסטנדרטיים:3 שיעור
lstStudentToCourse.RemoveItem (i)
Else
i = i + 1
End If
Loop
End If
' Reset the "Delete all" - CheckBox and the
' Checked-Items counter (m_nCheckCount)
chkDeleteAll.Value = vbUnchecked
m_nCheckCount = 0
End Sub
: הוסף קוד לטופס.1
lstStudentToCourse הקוד הבא בתגובה לסימון שורה ברשימה
אזי מתבצע דילוג על שאר הקוד כדי למנוע תגובה,chkDeleteAll אם האירוע התרחש בגלל לחיצה על
מעגלית
m_nCheckCount בהתאם לכך הוא מעדכן את. הקוד בודק אם נוסף סימון או הוסר
chkDeleteAll- ובהתאם לערך זה מותאם הסימון בm_nCheckCount לאחר מכן נבדק ערכו של
Private Sub lstStudentToCourse_ItemCheck(Item As Integer)
Dim nCheckedCount As Integer, i As Integer
' Process this code only if the Checked or Unchecked operation
' was invoked by the user and not the code inside chkDeleteAll
If m_nCheckedSource = CHECK_SOURCE_USER Then
m_nCheckCount = m_nCheckCount + _
IIf(lstStudentToCourse.Selected(Item), 1, -1)
If m_nCheckCount = 0 Then
chkDeleteAll.Value = vbUnchecked
ElseIf m_nCheckCount = lstStudentToCourse.ListCount Then
chkDeleteAll.Value = vbChecked
Else
chkDeleteAll.Value = vbGrayed
End If
End If
End Sub
: הוסף קוד לטופס.1
מילי שניות12 מופעל כל, קטע הקוד הבא
בקוד זה נבדק מצב מרכיבים שונים בטופס ובהתאם לכך מעודכן ממשק המשתמש
cboCourses- וcboStudents- מאופשר רק אם קיים טקסט בcmdAdd הלחצן
lstStudentToCourse- מאופשר רק אם ישנם פריטים בchkDeleteAll
2- גדול מm_nCheckCount מאפשר רק אםcmdDeleteAll הלחצן
Private Sub tmrUIUpdate_Timer()
' Enable the "Add to list" command only if there is text in
' cboStudents as well as in cboCourses
cmdAdd.Enabled = cboCourses.Text <> "" And cboStudents.Text <> ""
- 11 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
' Enable the "Delete All" - CheckBox
only if there are
' items in the list
chkDeleteAll.Enabled = lstStudentToCourse.ListCount > 0
' Enable cmdDelete only if the number of the checked items
' is greater than 0
cmdDelete.Enabled = m_nCheckCount > 0
End Sub
: הפעל את התוכנית ובדוק את פעולה.1
בתגובה לשינוי תכני הרשימות השונותUser Interface- שים לב לעדכון ה
מאופשר רק אם יש סימון כלשהו ברשימהDelete- שים לב ש
- 13 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :3הפקדים הסטנדרטיים II
תרגילים
.1כתוב תוכנית בשם .DayAndColorמקם על טופס Frameובתוכו שבעה OptionButtonsעם הכותרות ,Sunday
Mondayוכו' .כמו כן מקם על הטופס שלושה CheckBoxesעם הכותרות Green ,Redו .Blue-במקום ריק
בטופס מקם .Labelבעת בחירת אחד הימים ב OptionButtons-יש לשנות את הטקסט הכתוב ב .Label-בעת
לחצה על CheckBoxשל צבע ,יש להוסיף המרכיב שלו לצבע הטופס או להסיר מרכיב זה מצבע הטופס בהתאם
לערך ה .CheckBox-כך למשל ,אם צבע הטופס הוא אדום ) RGB(255, 0, 0לאחר לחיצה על הCheckBox-
הירוק יתוסף המרכיב שלו לצבע וכתוצאה מכך תקבל צבע צהוב () ,RGB(255, 255, 0לחיצה נוספת על Green
תסיר את המרכיב והרקע ישוב להיות אדום.
.1כתוב תוכנית בשם .FulfilListBoxבתוכנית הוסף על טופס את ה Controls-הבאים:
( TextBoxעם Labelמתאים ככותרת) ListBox ,ושלושה .CommandButtons
בעת לחיצה ( )Clickעל ה CommandButton-הראשון יתוסף הטקסט שהוזן לתוך ה TextBox-הListBox-
(ה CommandButton-הזה יהי .)Defaultאם לא קיים טקסט בתוך ה ,TextBox-לא יתבצע מאומה .לאחר
ההוספה יוחזר הפוקוס ל TextBox-ויסומן הקטע שבתוכו.
בעת לחיצה על ה CommandButton-השני ימחק הפריט המסומן ברשימה.
CommandButtonשלישי ישמש ליציאה ויקבל את המאפיין .Cancel
כמו כן ,בעת לחיצה כפולה ( )Double Clickעל שורה בתוך ה ListBox-יוצג Message Boxטקסט פריט שנבחר.
.3צור תוכנית בשם .SumListData
בטופס מקם את ה Controls-הבאים:
שני TextBoxesעם Labelsמתאימים שכותרת הראשון היא " "Nameוכותרת השני היא "."Additional Value
שני CommandButtonsשכותרת הראשון היא Insertוכותרת השני היא .Sum
ListBoxאחד.
בעת לחיצה על Insertיוזן ל ListBox-המידע שני ה .TextBoxes-כאשר ה Additional Data-הוא מידע המוכנס
ל .ItemData-אם המשתמש לא הזין דבר לשדה Nameאזי לא תתבצע ההכנסה .אם רק השדה Additional Data
חסר ,ערך ברירת המחדל יהיה .1לאחר ההוספה יוחזר הפוקוס לתיבה Nameויסומן בה הטקסט לשם החלפה.
בעת לחיצה על הלחצן Sumיחושב סכום כל מאפייני ה ItemData-הצמודיפ לפריטי הרשימה ,ותוצג למשתמש
הודעה מתאימה.
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור : 6מרכיבי השפה II
בשיעור זה:
תכיר את המילה With
תלמד איך ליצור מערכים חד ממדיים ,רב ממדיים ומערכים דינמיים
תלמד ליצור ( Control Arraysמערכים של פקדים)
תלמד לכתוב רוטינות ופונקציות
תכיר צורות העברה שונות של פרמטרים לרוטינה ופונקציה
תבין מהם משתנים מקומיים ,משתנים גלובליים ומשתנים סטטיים
תבין מהי פרוצדורה סטטית
תלמד ליצור פרוצדורה עם מספר פרמטרים משתנה
תלמד לעבוד עם מודולי קוד (*)bas.
תלמד כיצד להפעיל קוד מחלון הImmediate-
תלמד ליצור רשימות קבועים באמצעות המשפט Enum...End Enum
תלמד להגדיר סוגי משתנים חדשים ()User Defined Type
המילה
WITH
לעתים יש צורך להגדיר מספר גדול של מאפיינים של אובייקט
כדי לקצר את זמן הכתיבה וכדי להפוך את הקוד מובן יותר אפשר להשתמש בתבנית הכתיבה הבאה:
With object
.property1 = value1
.property2 = value2
...
End With
( ARRAYSמערכים)
מערך הוא רצף של משתנים מאותו הסוג הממוקמים ברצף בזכרון
ב Visual Basic-ניתן להצהיר על מערכים חד ממדיים ,רב ממדיים ,ומערכים דינמיים
הפנייה לאיבר במערך ב Visual Basic-מתבצעת על-ידי רישום אינדקס האיבר בתוך סוגריים עגולים
כאשר הפנייה היא לאיבר במערך רב ממדי ,יש להפריד בין אינדקסים ברמות שונות באמצעות פסיקים
הצהרה תוך שימוש במילים Dim Private ,Publicאו ,Staticזהה באופן ובמשמעות שלה להצהרה על משתנים
רגילים
( One-Dimensional Arraysמערכים חד ממדיים)
הצהרה על מערך חד ממדי יכולה להתבצע בשתי צורות ,הצורה הראשונה היא:
Dim arr_name(upper_index) As Type
arr_nameהוא שם המערך
upper_indexהוא האינדקס של האיבר האחרון במערך
Typeהוא סוג האיברים במערך
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :6מרכיבי השפה II
הצורה השניה היא:
השוני בצורה זו ,הוא בכך שאתה מגדיר את האינדקס התחתון ואת האינדקס העליון שיהוו את גבולות המערך
מותר להשתמש גם במספרים שליליים עבור האינדקסים
Dim arr_name(lower_index To upper_index) As Type
המשפט Option Base
אם לא מצוין האינדקס התחתון של המערך ,ברירת המחדל היא 2
כדי לשנות זאת ניתן להשתמש במשפט Option Base 1בתחילת מודול הקוד ,במקרה זה ,האינדקס התחתון של
מערכים שיוצהרו בצורה הראשונה יהיה 1
ניתן להשתמש גם במשפט ,Option Base 0אך זוהי ברירת המחדל
( Multi-Dimensional Arraysמערכים רב ממד יים)
ההצהרה על מערכים רב ממדיים דומה למערכים חד ממדיים ,אלא שיש להפריד בפסיקים בין הגדרת טווחי
האינדקסים של כל ממד ,באופן הבא:
Dim arr_name(lower_index1 To upper_index1, lower_index2 To
upper_index2,...) As Type
טווחי האינדקסים של ממד במערך יכולים להיות מוצהרים כמו בצורה הראשונה שהוצגה עבור מערכים חד
ממדיים .במקרה זה ,האינדקס התחתון יהיה 2אלא אם הוגדר Option Base 1בתחילת הקובץ
( Dynamic Arraysמערכים די נמיים)
כדי להצהיר על מערך דינמי ,יש להצהיר עליו מלכתחילה ללא גודל מוגדר ,באופן הבא:
Dim arr_name() As Type
באמצעות המילה ReDimניתן לשנות את גודל המערך במהלך ריצת התוכנית ,באופן הבא:
]ReDim [Preserve] (lower_index1 To upper_index1, ...) [As Type
ניתן לשנות את מספר הממדים במערך ,את גודל כל ממד
את סוג האיברים במערך ניתן רק אם המערך מאוחסן בתוך משתנה מסוג Variant
אם משתמשים במילה Preserveגודלו משתנה תוך שמירת תוכנו הקודם
בעת שימוש במילה Preserveלא ניתן לשנות את סוג האיברים במערך ,כמו גם את גבולו התחתון של המערך
בעת שימוש במילה Preserveבעת שינוי גודלו של מערך רב ממדי ,ניתן לשנות רק את אינדקסים של הממד
האחרון במערך
אזהרה :השימוש במילה ReDimיכול לשמש גם כהצהרה על משתנה .משמעות הדבר היא שגם אם כתוב בראש
המודול המשפט ,Option Explicitוהשתמשת ב ReDim-יחד עם שם משתנה שלא הוצהר בראש המודול ,לא
תקבל שגיאת קומפילציה ואותו מערך אכן ייוצר באופן מקומי.
בדיקת גודל מע רך ב זמן ריצה באמצעות LBoundו UBound -
מתעורר צורך לעתים קרובות לדעת מהו הגבול התחתון (האינדקס התחתון) של מערך ,כמו גם גבולו העליון .צורך
זה הופך לקריטי כשעוסקים בכתיבת קוד גנרי ,כמו גם תוך עבודה עם מערכים דינמיים
הפונקציה )Lower Bound( LBoundמחזירה את האינדקס התחתון של מערך
הפונקציה )Upper Bound( UBoundמחזירה את האינדקס העליון של המערך
דוגמה 1
Dim m_nArr(9) As Integer
פקודה זו מצהירה על מערך שהאינדקס הראשון שלו הוא 0והאחרון הוא .9סה"כ 10איברים
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
דוגמה 2
Option Base 1
...
...
Dim m_nArr(9) As Integer
שורות קוד אלו זו מצהירה על מערך שהאינדקס הראשון שלו הוא 1והאחרון הוא .9סה"כ 9איברים
שים לב שהמשפט Option Baseיכול להופיע רק פעם אחת בתחילת המודול (לפני כל הפונקציות או ההצהרות על
מערכים)
משפט Option Baseמשפיע רק על מערכים שנוצרו בתוך המודול בו נרשם המשפט
דוגמה 1
Dim TicTacToe(1 To 3, 1 To 3) As Boolean
בשורת קוד זו מוצהר מערך דו ממדי בשם ,TicTacToeשהאינדקסים בשני הממדים שלו נעים בין 1ל( 3-כולל)
דוגמה 4
בדוגמה זו הנח ששורות הקוד מתבצעות בסדר כרונולוגי מהמשפט הראשון לאחרון.
Dim dyn_arr() As Integer
בשורת קוד זו מוצהר מערך דינמי בשם dyn_arrמסוג Integer
בשורת קוד זו קובעים מחדש את ממדי המערך ,dyn_arrכך שיכיל ממד אחד שהאינדקסים שלו נעים בין 5ל1-
)ReDim dyn_arr(5 To 9
)ReDim dyn_arr(3 To 10
שורת קוד זו משנה שוב את ממדי המערך כך שיכיל ממד אחד שהאינדקסים שבו נעים בין 3ל12-
)ReDim Preserve dyn_arr(3 To 12
שורת קוד זו מגדירה שוב את ממדי המערך תוך שמירה על הערכים המאוחסנים בו .בשורה שזו משתנה האינדקס
ל11-
ניסיון להריץ את שורת הקוד הבאה יגרום לשגיאה:
)ReDim Preserve dyn_arr(-2 To 20
שורת קוד זו מנסה (אך לא יכולה) להשתמש במילה Preserveתוך שינוי האינדקס התחתון של המערך
)ReDim dyn_arr(-2 To 7, 11
בשורת קוד זו משנים שוב את ממדי המערך כך שיכיל שני ממדים ,כאשר האינדקסים בממד הראשון נעים בין –2
ל ,1-והאינדקסים בממד השני נעים בין ( 2או 1אם הוגדר 1 Option Baseבראש המודול) ל11-
ניסיון להריץ את שורת הקוד הבאה ייתקל בשגיאה:
ReDim dyn_arr(-2 To 7, 13) As Long
לא ניתן לשנות סוג של מערך
דוגמה 3
בדוגמה זו תראה כיצד ניתן לשנות את סוג המערך
תחילה יש להצהיר על משתנה רגיל מסוג :Variant
שים לב שזהו משתנה רגיל (אין סוגריים ריקים בהצהרה)
לאחר מכן תוכל לשנות את גודל המערך ואת סוגו כל אימת שתרצה בכך:
Dim dyn_arr as Variant
ReDim dyn_arr(3 To 5, 6 To 7) As Long
לא תוכל לשנות את סוג המערך אם השתמשת במילה Preserve
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :6מרכיבי השפה II
( CONTROL ARRAYמערכי פקדים)
כפי שניתן ליצור מערכי משתנים מסוגים בסיסיים וסוגים המוגדרים ע"י המשתמש ,כך ניתן ליצור Control
( Arraysמערכי פקדים)
לכל סוגי הפקדים (בדוק זאת!!!) קיים מאפיין בשם Index
ב Control Array-כל הפקדים חייבים להיות מאותו הסוג ובעלי אותו שם
האינדקס של כל פקד במערך נקבע באמצעות המאפיין Index
גישה לפקד בודד מתוך Control Array
כדי לגשת לפקד מסוים במערך יש לציין את האינדקס שלו באופן הבא:
ControlArrayName(desire_index).property = ...
או
ControlArrayName.Item(desire_index).property = ...
בדיקת גודל המערך וגבולותיו
ניתן לקבוע את גודל ה Control Array-באמצעות הפונקציה ,Countבאופן הבא:
ControlArrayName.Count
ניתן לקבוע את האינדקס התחתון ב Control Array-באמצעות הפונקציה ,LBoundבאופן הבא:
ControlArrayName.LBound...
ניתן לקבוע את גבולו העליון של ה Control Array-באמצעות הפונקציה ,UBoundבאופן הבא:
ControlArrayName.UBound...
אירועים של פקדים השייכים לControl Array-
הפרמטר הראשון בשגרות אירוע של ,Control Arrayהוא האינדקס של הפקד במערך עבורו שוגרה ההודעה
מבנה כללי של שגרת אירוע עבור ControlArrayהוא כדלקמן:
Private Sub ControlArrayName_EventName(Index As Integer, .....all other
)parameters in the event...
שלבי יצירת Control Array
ליצירת Control Arrayישנן כמה דרכים ,אתאר כאן שתיים:
הדרך הראשונה והפשוטה היא ליצור פקד אחד ,להגדיר לו את השם והמאפיינים הנדרשים ולאחר מכן להעתיק
אותו ( )Ctrl+Cולהדביק אותו ( Visual Basic .)Ctrl+Vתשאל אותך האם אתה מעוניין ליצור מערך פקדים אשר
את הבקשה ,והמערך ייוצר.
דרך שניה היא להגדיר באופן ידני את שמות הפקדים ואת האינדקס שלהם כך ששמות הפקדים יהיו זהים ,ולכל
אחד מהם יוקצה אינדקס ייחודי
יצירת פקדים בזמן ריצה
כדי ליצור פקדים בזמן ריצה עליך ליצור Control Arrayשיש בו לפחות איבר אחד בזמן עיצוב התוכנית
בזמן ריצת התוכנית תוכל להשתמש במתודה Loadכדי לטעון פקדים נוספים באופן הבא:
)Load arr_name(new_index
תקבל שגיאה אם תנסה ליצור פקד חדש עם אינדקס שכבר תפוס ע"י פקד אחר באותו המערך
הקפד להגדיר את מאפייני הפקד מיד לאחר שנוצר
כדי להסיר פקד בזמן ריצה ,השתמש במתודה Unloadבאופן הבא:
)Unload arr_name(index_to_remove
לא תוכל להסיר פקדים שנוצרו בזמן עיצוב ,אלא רק פקדים שנוצרו באמצעות קריאה קודמת לLoad-
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
Com mandBoard – התוכנ ית1 תרגיל
בדוגמה זו אמחיש לך כיצד ניתן ליצור פקדים בזמן ריצה
ונמקם אותם על גבי הטופס הראשי של התוכניתRuntime-בתוכנית זו נטען פקדים ב
, ותסיר אותו מהטופס (אלא אם מדובר בפקד הראשון,לחיצה על אחד הפקדים תציג הודעה עם מספר הפקד
)Design time-כלומר זה שמוקם על הטופס ב
:Standard EXE צור תוכנית
frmCommandBoard ולטופס את השם,CommandBoard הקצה לפרוייקט את השם
שמור את התוכנית
:הוסף פקד לטופס
cmdBoard על גבי הטופס והקצה לו את השםCommandButton הצב פקד מסוג
:הגדר את המאפיינים הבאים
ערך
מאפיין
אובייקט
1-Fixed Single
BorderStyle
frmCommandBoard
2 - CenterScreen
StartUpPosition
0 - User
ScaleMode
0
ScaleLeft
0
ScaleTop
3
ScaleWidth
3
ScaleHeight
0
Index
cmdBoard
:הוסף קוד לטופס
:Control Array- נוסיף פעולות אתחול ויצירה של ה, של הטופסLoad לאירוע
Private Sub Form_Load()
Dim i As Integer
' Initialize the caption
Me.Caption = "Command Board"
' Reposition the first control
With cmdBoard(0)
.Caption = "&0"
.Left = 0
.Top = 0
.Width = 1
.Height = 1
.Visible = True
End With
' Load the controls from 2 to 9 (th first is already on the form)
' Then, reposition the loaded controls
For i = 1 To 8
Load cmdBoard(i)
- 11 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
.1
.1
.3
.1
שיעור :6מרכיבי השפה II
)With cmdBoard(i
)).Caption = "&" & Trim(Str(i
.Left = i Mod 3
.Top = i \ 3
.Width = 1
.Height = 1
.Visible = True
End With
Next i
End Sub
שים לב ,לאחר טעינת כל פקד השתמשנו ב With-כדי להגדיר קבוצת מאפיינים שלו .צורת רישום כזו נוחה
ומובנת
יש להגדיר את המאפיין Visibleל True-כדי שהפקד הנטען יוצג על פני הטופס
הכותרות של הפקדים הוגרו לפי האינדקס שלהם לצורך הנוחות
כשרוצים להכניס קו תחתון מתחת למספר (מאיץ מקלדת באמצעות ,)ALTמשתמשים בתו המוכר &
(אמפרסנד)
הפונקציה Strהממירה מספר למחרוזת מוסיפה רווח בתחילת המחרוזת כאשר המספר הוא חיובי ,וסימן –
(מינוס) כאשר המספר הוא שלילי .כדי להסיר רווח זה ניתן להשתמש בפונקציה Trim
.1הוסף קוד לטופס:
הקוד הבא פועל בתגובה לאירוע Clickשל הפקדים במערך
אם הפקד שנלחץ אינו הראשון (אינדקס 0שאותו אסור להסיר באמצעות ,)Unloadמוסר הפקד באמצעות
:Unload
)Private Sub cmdBoard_Click(Index As Integer
' Remove the Command only if it isn't the first (index = 0) command
)If Index <> 0 Then Unload cmdBoard(Index
End Sub
.1הרץ ובדוק את פעולת התוכנית
פרוצדורות
בVISUAL BASIC-
כמו בכל שפת תכנות ,גם ב Visual Basic-ניתן לכתוב פרוצדורות קוד
פרוצדורות ב Visual Basic-מגיעות אלינו בארבעה טעמים:
– Sub Routines oרוטינות
- Functions oפונקציות
– Properties oמאפיינים
- Events oאירועים
את השניים הראשונים תכיר בשיעור זה .יצירת מאפיינים ואירועים תכיר בשיעור העוסק במחלקות
- 12אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
רוטי נות ופו נקצ יות שלב I
רוטינה ב Visual Basic-אינה מחזירה ערך ,לעומת פונקציה המחזירה ערך
לרוטינות ופונקציות ניתן להעביר פרמטרים בשתי צורות:
- By Value oעל ידי ערך
– By Reference oעל ידיד ייחוס
oקיימים היבטים נוספים הנוגעים להעברת פרמטרים ,נכיר אותם בהמשך
העברת פרמטר By Valueיוצרת העתק למשתנה והעתק זה נמצא בידי הרוטינה או הפונקציה
העברת פרמטר By Referenceגורמת למשתנה המקורי להיות נגיש על ידי הרוטינה או הפונקציה
תחביר רוטינות ופונקציות
תחביר רוטינה הוא:
תחביר פונקציה הוא:
SubNameהוא שם הרוטינה ו FunctionName-הוא שם הפונקציה
parametersהוא רשימת הפרמטרים המועברים לרוטינה או לפונקציה .בהמשך נראה כיצד מעבירים פרמטרים.
Publicהופך את הרוטינה או הפונקציה לציבורית ,כלומר נגישה על ידי קוד ממודולי קוד אחרים בפרוייקט
ניתן להשתמש במילה Privateבמקום המילה ,Publicואז הרוטינה או הפונקציה הופכת לפרטית באותו מודול
קוד ,ולא תהיה אליה גישה ממודולים אחרים
Publicהיא הרשאת ברירת המחדל עבור פרוצדורות קוד
Typeהוא סוג הערך המוחזר על ידי הפונקציה .אם לא צוין במפורש ,הסוג הוא Variant
– ReturnValueכשרוצים להחזיר ערך מפונקציה יש לבצע השמה לשם הפונקציה
)Public Sub SubName(parameters
...
End Sub
Public Function FunctionName(parameters) As Type
...
FunctionName = ReturnValue
End Function
רשימת פרמטרים
רישום הפרמטרים שהפרוצדורה מקבלת מתבצע באופן הבא:
[ByVal | ByRef] parameter1 As Type, [ByVal | ByRef] parameter2 As
Type...
parameter1ו parameter2-הם שמות הפרמטרים
Typeהוא סוג הערך של הפרמטר .אם לא צוין במפורש ,סוג הפרמטר הוא Variant
ByValאו ByRefקובעים את האופן שבו יועבר הפרמטר לפונקציה .האפשרויות הן:
– ByVal oעל ידי ערך
– ByRef oעל ידי ייחוס
oאם לא צויין במפורש ,ברירת המחדל היא ByRef
מערכים ניתן להעביר ByRefבלבד
יציאה מרוטינה או פונקציה
ניתן לצאת בכל שלב מתוך רוטינה או פונקציה על ידי שימוש במשפטים:
– Exit Sub oליציאה מרוטינה
– Exit Function oליציאה מפונקציה
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :6מרכיבי השפה II
משתנים מקומיים ,גלובליים וסטטיים
ניתן להצהיר על משתנים בתוך פרוצדורות קוד באמצעות המילים Dimאו Staticבלבד
הצהרה על משתנים בתוך פרוצדורה אינה יכולה להתבצע באמצעות המילים Publicאו Private
משתנים המוצהרים בתוך פרוצדורת קוד נקראים משתנים מקומיים
משתנים מקומיים זמינים אך ורק לקטע הקוד התחום בתוך הרוטינה או הפונקציה
משתנים מקומיים מתחילים את חייהם עם תחילת הפרוצדורה ומשוחררים מהזיכרון עם סיום הפרוצדורה
משתנים המוצהרים בראש מודול נקראים משתנים גלובליים
משתנים גלובליים זמינים לכל הרוטינות והפרוצדורות באותו מודול
משתנים גלובליים מתחילים את חייהם בתחילת חייו של מודול הקוד ומסיימים את חייהם בסיום חייו של מודול
הקוד (במקרה של מודול * bas.מדובר בתחילת התוכנית ובסיומה .מודול *.basיילמד בהמשך)
משתנים המוצהרים בפרוצדורה באמצעות המילה Staticנקראים משתנים סטטיים
משתנים סטטיים נשמרים בזכרון גם לאחר שהפרוצדורה מסיימת את פעולתה ,וערכם נשמר עד להפעלה הבאה
של הפרוצדורה .במילים אחרות ,משתנים סטטיים שומרים על ערכם בין שתי קריאות סמוכות לפרוצדורה.
דוגמה 1
)(Public Sub Hello
"!MsgBox "Hello, world
End Sub
פרוצדורה זו מציגה Message Boxעם ההודעה "!"Hello, world
שים לב שהיה ניתן להימנע מהשימוש במילה Publicכיוון שזוהי ברירת המחדל
דוגמה 2
)Public Sub DispSum(ByVal a As Integer, ByVal b As Integer
)MsgBox Str(a + b
End Sub
רוטינה זו מציגה ב Message Box-את סכומם של שני מספרים המועברים אליה
דוגמה 1
)Public Sub Swap(ByRef var1 As Variant, ByRef var2 As Variant
Dim varTmp As Variant
varTmp = var1
var1 = var2
var2 = varTmp
End Sub
הרוטינה Swapמחליפה בין התכנים של שני משתנים המועברים אליה
כיוון שהפרמטרים מוצהרים כ ,Variant-ניתן להפעיל רוטינה זו על כל הסוגים הבסיסיים של Visual Basic
שים לב שניתן היה להימנע מהשימוש במילה ByRefכיוון שזוהי ברירת המחדל
דוגמה 4
Public Function GiveMe5() As Integer
GiveMe5 = 5
End Function
פונקציה זו מחזירה 5למי שקרא לה ()Caller
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
דוגמה 3
Public Function Factorial(ByVal n As Byte) As Long
Dim lRes As Long
lRes = 1
Do While n > 0
lRes = lRes * n
n = n - 1
Loop
Factorial = lRes
End Function
פונקציה זו מחשבת את העצרת של מספר המועבר אליה
שים לב לשימוש בפרמטר ( nהפרמטר המועבר לפונקציה) .שינוי הפרמטר במהלך הפונקציה לא משפיע על המקור,
כיוון שהפרמטר מועבר ,ByValכלומר בפונקציה נעשה שימוש בהעתק של המשתנה המועבר.
דוגמה 6
Public Function FindBigger(ByRef arr() As Integer) As Integer
Dim l As Integer, u As Integer
Dim bigger As Integer
)l = LBound(arr
)u = UBound(arr
bigger = l
Do While l <= u
If arr(l) > arr(bigger) Then bigger = l
l = l + 1
Loop
FindBigger = bigger
End Function
פונקציה זו מקבלת מערך של Integersומחזירה את האינדקס של האיבר הגדול במערך
הפונקציה סורקת את המערך החל מאינדקס האיבר הראשון ( )LBoundעד לאינדקס האיבר האחרון ()UBound
דוגמה 7
Public Function SumCalls() As Integer
Static nCalls As Integer
nCalls = nCalls + 1
SumCalls = nCalls
End Function
בדוגמה זו SumCallsהיא פונקציה המחזירה את מספר הקריאות שהתבצעו אליה עד כולל הקריאה האחרונה
המשתנה nCallsמוצהר כסטטי ,לכן הוא מאותחל ל 2-פעם אחת (בקריאה הראשונה) ,ובכל קריאה נוספת הוא
שומר על ערכו הקודם
- 13אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :6מרכיבי השפה II
קריאות לרוטינות ופרוצדורות
][Call] name [argumentlist
ניתן לקרוא לרוטינות או פונקציות באמצעות המילה Call
השימוש במילה Callהוא אופציונלי ,ולרוב לא משתמשים בו
אם נעשה שימוש במילה ,Callיש לתחום בתוך סוגריים ארגומנטים המועברים לרוטינה או לפונקציה
כאשר קוראים לרוטינה ללא שימוש במילה ,Callאין לתחום בסוגריים את הארגומנטים
אם משתמשים בערך המוחזר של פונקציה ,יש לתחום בסוגריים את הארגומנטים המועברים לפונקציה
דוגמאות לקריאה לפרוצדורת
Call Hello
בשורת קוד זו נקראת הרוטינה Hello
בשורת קוד זו מתבצעת קריאה לרוטינה ,Swapומועברים אליה הפרמטרים aוb-
באופן דומה ניתן היה לרשום:
בשורת קוד זו ,המבצעת קריאה לפונקציה ,Factorialוהערך המוחזר ממנה מושם למשתנה res
)Call Swap(a, b
Swap a, b
)res = Factorial(8
רוטי נות ופרוצדורות שלב II
פרוצדורות סטטיות
ניתן להפוך פרוצדורה לסטטית על ידי הוספת המילה Staticלאחר המילה Publicאו Privateולפני שם
הפרוצדורה ,כלומר:
][Public | Private] Static ProcedureName(arglist) [As Type
פרוצדורה סטטית היא פרוצדורה שכל המשתנים שבה שומרים על ערכם בין הקריאות השונות לפרוצדורה
named-arguments
בעת קריאה לפונקציה ניתן לציין לאיזה פרמטר פורמלי מיועד כל ארגומנט אקטואלי שמעבירים ,תוך שימוש
באופרטור ( =:נקודתיים ושווה)
כך לדוגמה ,אם מוצהרת הפונקציה הבאה:
Public Function Div(ByVal Num1 As Double, ByVal Num2 As Double) As
Double
ונרצה לחשב את הביטוי , 3.12 8 2נוכל לקרוא לפונקציה בשתי צורות:
)res = Div(8, 2
או
)res = Div(Num2 = 2, Num1 = 8
ParamArray
ParamArrayדומה לאופרטור ( ...שלוש נקודות) בשפת ,Cבהקשר של פרמטרים לפונקציות
ParamArrayמאפשר להעביר מספר משתנה של פרמטרים לפרוצדורה
ParamArrayחייב להופיע בסוף רשימת הפרמטרים
לפרוצדורה שהפרמטר האחרון שלה הוא מסוג ,ParamArrayניתן לקרוא עם מספר משתנה של פרמטרים (חוץ
מהפרמטרים שהם חובה כמובן)
בתוך הפרוצדורה ,הגישה לפרמטרים המועברים נעשית בצורה שבה ניגשים לאיברי מערך
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
אי אפשר להשתמש במילים ByValאו ByRefיחד עם ParamArray
ברשימת הפרמטרים לא יכולים להיות יחד ParamArrayופרמטרים אופציונליים (נלמד בסעיף הבא)
תחביר השימוש ב ParamArray-הוא כדלקמן:
......(arg1 As Type, arg2 As Type, ..., ParamArray other_pamaters())....
מילת המפתח היא ParamArray
)( other_paramatersזהו שם המערך (במקרה זה) כפי שיוכר בפרוצדורה
בהמשך תראה דוגמה לשימוש בParamArray-
פרמטרים אופציונליים
ניתן להגדיר פרמטרים מסוימים של פרוצדורה כאופציונליים ,כלומר פרמטרים שאין חובה להעביר לפרוצדורה
ניתן להשתמש בפונקציה IsMissingכדי לבחון אם פרמטר (מסוג Variantבלבד) הועבר לפונקציה
ניתן להגדיר ערכי ברירת מחדל עבור פרמטרים אופציונליים
כאשר משתמשים בפרמטר אופציונלי כל הפרמטרים שאחריו חייבים גם הם להיות אופציונליים
התחביר לפרמטרים אופציונליים הוא כדלקמן:
...(...,Optional [ByVal | ByRef] arg As Type [= DefaultValue],...
מילת המפתח היא Optional
ניתן להמשיך ולהשתמש ב ByRef-או ByVal
Typeהוא סוג הפרמטר שלו מצפה הפרוצדורה
DefaultValueהוא חלק רשות המגדיר את ערך הפרמטר במקרה שלא הועבר לפרוצדורה
יצירת שלד פרוצדורה באמצעות Add Procedureמהתפריט Tools
ניתן ליצור תבנית פרוצדורות מכל הטעמים (רוטינות ,פונקציות ,מאפיינים ואירועים)
באמצעות הAdd Procedure... :Wizard-
לשם פתיחת ה Wizardעליך להיות בחלון הקוד של אחד מהמודולים בתוכנית .ואז מתוך התפריט Toolsבחר
ב...Add Procedure-
אפשרויות הבחירה הן Property ,P Function ,Sub :וProcedure-
אפשרויות הגישה הן Publicאו Private
אם תסמן את האפשרות All Local variables as Staticה Wizard-ייצור עבורך פרוצדורה סטטית
דוגמה 1
_ Public Function Mult(ByVal Num1 As Double,
_ ByVal Num2 As Double,
ParamArray AdditionalNums()) As Double
Dim res As Double
Dim l As Integer, u As Integer
)l = LBound(AdditionalNums
)u = UBound(AdditionalNums
res = Num1 * Num2
Do While l <= u
)res = res * AdditionalNums(l
l = l + 1
Loop
Mult = res
End Function
לפונקציה זו ישנם שני פרמטרים שהם חובה Num1 :וNum2-
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :6מרכיבי השפה II
ניתן להעביר פרמטרים נוספים לפונקציה ואז תחושב המכפלה של כל המספרים
דוגמה 1
_ Public Function Div(Optional ByVal Num1 As Double = 1#,
Optional ByVal Num2 As Double = 1#) As Double
If Num2 = 0# Then Exit Function ' Num2 must be non-zero
Div = Num1 / Num2
End Function
פונקציה זו מחזירה את מנת החלוקה של Num1בNum2-
אם לא מועבר אחד מהמספרים ,ערך ברירת המחדל שלו יהיה 1.0
מודולי קוד סטנדרטיים
מודולי הקוד ב Visual Basic-מתחלקים לשתי קבוצות עיקריות:
Class Modules o
Standard Modules o
מודולי מחלקה ( )Class Modulesיילמדו בהמשך ,טפסים לדוגמה הם סוג של מודול מחלקה
מודול סטנדרטי יכול להכיל פונקציות ומשתנים גלובליים שיהיו זמינים לכל האובייקטים ביישום
ניתן לכלול משתנים ופונקציות שיהיו זמינים לפונקציות שבמודול בלבד על ידי שימוש במילה Private
כדי להוסיף מודול יש לבחור Add Moduleמתוך התפריט Project
הפעלת פונקציות מחלון
*.BAS
הIMMEDIATE
חלון ה Immediate-הוא אחד ממרכיבי מערכת ניפוי השגיאות ( )Debuggerשל ( Visual Basicנושא יילמד
בשיעור הבא)
חלון ה ,Immediate-כשמו ,מאפשר לבצע פעולות באופן מידי
ניתן להריץ פונקציות ורוטינות באמצעות חלון ה Immediate-מבלי להריץ את התוכנית כולה
כמובן שגם במהלך התוכנית ניתן לבחון ערכי משתנים ופונקציות בתוכנית ,אך נושא זה יידון בפירוט בפרק הבא
כדי להציג ערך המוחזר על ידי פונקציה בחלון ה ,Immediateיש להקדים את הסימן? (סימן שאלה) – כמובן שיש
לתחום בסוגריים את הארגומנטים המועברים לפונקציה
כדי להציג את חלון ה Immediate-ניתן לבחור Immediate windowמהתפריט ,Viewאו לחילופין להפעיל את
צירוף המקשים Ctrl+G
תרגיל – 2הפעלת קוד מחלון ה Immediate -
בתרגיל זה תכתוב במודול סטנדרטי קוד המוצג בדוגמאות הקודמות ,ותריץ אותו דרך חלון הImmediate-
.1צור תוכנית :Standard EXE
הסר מהתוכנית את הטופס:
oלחץ לחיצה ימנית על שם הטופס ב( Project Explorer-אם אינך רואה את ה Project Explorer-בחר
אותו מהתפריט )View
oמהתפריט המוקפץ בחר בRemove Form1-
הוסף מודול לפרוייקט:
oבחר באפשרות Add Moduleמהתפריט Project
oבחר ב Module-ולחץ על Open
הקצה לפרוייקט את השם ModuleAndImmediateו-למודול הקצה את השם modProcedures
שמור את הפרוייקט
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
.1הצג את חלון ה:Immediate-
וודא שחלון ה Immediate-מוצג אם אינך רואה אותו לחץ על Ctrl+G
.3בחן את הרוטינה MsgBoxמתוך חלון ה:Immediate-
הקלד בחלון ה Immediate-את הקוד הבא:
"!MsgBox "Hello, world
ברגע שתלחץ על Enterחלון ה Message Box-יופיע
נסה לשנות את הפרמטרים האחרים ברוטינה ובחן את השפעתם על אופן הצגת הMessage Box-
.1בחן את הפונקציה Leftשל :Visual Basic
הקלד את שורת הקוד הבאה בחלון ה:Immediate-
)?Left ("Hello, world!",4
שים לב לסימן השאלה בתחילת השורה ,ולסוגריים המקיים את הארגומנטים
הארגומנטים מטרתם להנחות את Visual Basicשברצוננו להשתמש בערך המוחזר מהפונקציה
סימן השאלה מטרתו להנחות את Visual Basicלהציג את הערך המוחזר בחלון הImmediate-
.1הוסף פונקציה ל:Module-
כתוב את הפונקציה Sumהמוצגת להלן ,בחלון ה:Module-
_ Public Function Divide(ByVal a As Double,
Optional ByVal b As Double = 2#) As Double
Divide = a / b
End Function
.1בחן את הפונקציה מחלון ה:Immediate-
הקלד את שורת הקוד הבאה בחלון ה:Immediate
)?Divide(3,6
אתה צריך לקבל את התוצאה ( 2.1האפס לא מוצג)
הקלד את שורת הקוד הבאה בחלון ה:Immediate-
בשורת קוד זו השתמשת בnamed arguments-
אתה צריך לקבל 2
הקלד את שורת הקוד הבאה בחלון ה:Immediate-
במקרה זה ,חסר הארגומנט השני ,לפיכך הפונקציה משתמשת בערך ברירת המחדל שקבעת לה
אתה צריך לקבל 4
הקלד את שורת הקוד הבאה בחלון ה:Immediate-
)?Divide(b:=3, a:=6
)?Divide(8
)?Divide(7, 0
אתה אמור לקבל ששגיאת חלוקה ב 2-על ידי סביבת הפיתוח
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :6מרכיבי השפה II
( ENUMERATIONSאוספי קבועים)
בדומה למילת המפתח enumבשפת ,Cקיימת המילה EnumבVisual Basic-
Enumמאפשרת ליצור אוסף קבועים המאוגדים תחת שם אחד באופן הבא:
[Public | Private] Enum name
]membername [= constantexpression
]membername [= constantexpression
...
End Enum
Publicאו Privateקובעים לאילו חלקי קוד בתוכנית ה Enum-יהיה מוכר
nameהנו השם שבחרת לEnum-
membernameהנו שם קבוע בתוך הEnum-
constantexpressionהנו ערך קבוע שמוקצה עבור הmembername-
אם לא מגדירים ערך קבוע עבור פריט בתוך Enumאז ערכו נקבע לפי הכלל הבא:
oאם זהו הפריט הראשון ב Enum-ערכו יהיה 0
oעבור של פריט (שאינו הפריט הראשון) ערכו יהיה גדול ב 1-מערך נפריט הקודם
לא ניתן לשנות את ערכו של פריט ב Enum-במהלך התוכנית
לאחר שהוגדר ,Enumניתן להשתמש בו לשם הצהרת משתנים ,פרמטרים של פרוצדורות וערכים מוחזרים של
פונקציות
דוגמאות
Public Enum AgeCategoriesConstants
acChild
acYoung
acAdult
acOld
End Enum
ב Enum-זה מוצהרים ארבעה קבועים
ערכו של acChildהוא ,0של acYoungהוא 1וכן הלאה
בהנחה שרוצים להשים את הקבוע acChildלמשתנה ,nAgeאפשר לבצע זאת בשתי צורות:
nAge = acChild
או
nAge = AgeCategoriesConstants.acChild
הצורה השניה נוחה כאשר יש התנגשות שמות עם קבוע אחר
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
( USER-DEFINED TYPESסוגי נתונים מוגדרים על ידי המשתמש)
ניתן ליצור סוגי נתונים מורכבים (כמו Structבשפת )Cבאמצעות המילה Type
התחביר הוא כדלקמן:
[Public | Private] Type varname
elementname [(subscript)] As type
elementname [(subscript)] As type
...
End Type
Publicאו Privateמגדירים את טווח ההכרה ( )Scopeשל הסוג החדש
varnameהוא שם הסוג החדש שמוגדר על ידי Type
elementnameהוא שם אלמנט בתוך הסוג החדש
אלמנט יכול להיות גם מערך חד ממדי או רב ממדי ,ואז יש להשתמש ב subscript-כדי להגדיר את ממדיו
כל אחד מהאנלמטים בתוך הסוג החדש צריך להיות מסוג ( )typeמוכר באותו שלב
כדי לגשת לאלמט בתוך משתנה מהסוג החדש ,יש להשתמש בסימן ( .נקודה)
דוגמאות
Public Type Point
x As Integer
y As Integer
End Type
בשורות קוד אלו הוגדר סוג חדש בשם Pointשיש לו שני שדות x :וy-
בשורות קוד אלו הוגדר סוג חדש בשם ,Rectangleובו שני שדות ptTopLeft :ו ptBottomRight-מסוג Point
שהוגדר קודם
Public Type Rectangle
ptTopLeft As Point
ptBottomRight As Point
End Type
Public Type Scribble
ptArr(100) As Point
End Type
בדוגמה זו הוגדר סוג חדש בשם ( Scribbleשרבוט) המכיל מערך מסוג Pointבגודל 100
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור : 7הרצה וניפוי שגיאות
בשיעור זה:
תכיר את אפשרויות ההרצה השונות
תכיר את מרכיבי סביבת הפיתוח המאפשרים ניפוי שגיאות בVisual Basic-
תבין מהם שלושת המצבים Run Time ,Design Tine :וBreak Mode-
תכיר את האובייקט Debug
תכיר את המשפט On Error...המיועד לטיפול בשגיאות
חלונות תצוגה שונים לאבחון
מתוך התפריט Viewישנן ארבע תצוגות מעניינות ,העשויות לסייע באבחון שגיאות בתוכנית:
:Immediate Window oבנוסף לאפשרויות שהוזכרו בשיעור הקודם ,ניתן להעביר לחלון הImmediate-
פלט מהאובייקט ( Debugנדון בהמשך שיעור זה)
:Locals Window oמאפשר לצפות במשתנים מקומיים בפרוצדורה
:Watch Window oמאפשר לצפות במשתנים שנוספו לחלון ה( Watch-נדון בהמשך)
:Call Stack oמציג את מצב הקריאות לפרוצדורות במחסנית .חלון זה מציג את שרשרת הקריאות
לפרוצדורות עד לנקודה מסוימת בתוכנית.
שלושת המצבים של תוכנית
:Design Timeשהו השלב שבו התוכנית נמצאת בעיצוב ,המילים אחרות ,השלב שבו אתה מניח פקדים על
טפסים ,כותב קוד אך עדיין לא מבצע אותו קרוי Design Time
:Run Timeזהו המצב שבו שורות הקוד שבתוכנית שלך מתחילות להתבצע
:Break Modeשהו מצב שבו מושהית התוכנית (לא מפסקת כי אם מושהית)
התפריט ( RUNהרצה)
ב Visual Basic-קיימות מספר אפשרויות להרצה
האפשרויות השונות כלולות בתפריט Run
הפעלת אפשרות להרצה מעבירה את התוכנית למצב Run Time
( Startהתחל)
Startהיא צורת ההרצה השכיחה
ניתן להפעיל את Startבשלושה אופנים:
oלבחור Startמהתפריט Run
oללחוץ על הכפתור המתאים בסרגל הכלים
oלהפעיל את צירוף המקשים Ctrl+F5
בעת הרצה עם Startלא מבוצע קימפול של התוכנית
( Start With Full Compileהתחל לאחר קימפול מלא)
Start With Full Compileמבצע קימפול לפני ההרצה
הרצה כזו מומלצת לשם גילוי שגיאות כבר בזמן הקימפול ,למשל משתנים שלא מוצהרים
ניתן להפעיל אפשרות זו מתפריט Runאו על ידי צירוף המקשים Ctrl+F5
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :7הרצה וניפוי שגיאות
( Breakעבור ל ) Break Mode -
Breakמאפשר לבצע מעבר ממצב ריצה למצב Break
אפשרות זו שימושית כשרוצים לעבור במצב מסוים לשלב Debug
אפשר להפעיל את Breakבשלוש צורות:
oבחירת Breakמהתפריט Run
oבחירת הכפתור המתאים בסרגל הכלים
oהפעלת צירוף המקשים Ctrl+Break
האפשרות האחרונה (צירוף המקשים )Ctrl+Breakשימושית המיוחד כשנכנסים למצב שסרגלי הכלים
והתפריטים לא נגישים :למשל בלולאות אינסופיות ,או כשאר מופיע Message Boxמודאלי
( Endסיים)
Endמסיים את פעולת התוכנית
ניתן להפעיל את Endמהתפריט Runאו מסרגל הכלים
( Restartהתחל מחדש)
Restartמאפשר להפעיל מחדש את התוכנית
ניתן לבחור ב Restartמהתפריט Runאו להפעיל את צירף המקשים Shift+F5
התפריט ( DEBUGניפוי שגיאות)
התפריט Debugמאפשר לבצע כמעט כל דבר אפשרי בזמן ריצת התוכנית לשם ביצוע אבחון של התוכנית
אפשרויות ה Debug-כלולות תחת תפריט Debug
( Step Intoצעד לתוך)
אפשרות זו יכולה לפעול במספר צורות:
oאם התוכנית נמצאת ב ,Design Time-התוכנית תתחיל לרוץ ותעבור מיד למצב של Break Modeכאשר
יש שליטה על כל צעד וצעד בתוכנית
oאם התוכנית עומדת להפעיל פרוצדורה הכתובה בתוכנית ,תתבצע כניסה לתוך הפרוצדורה
ניתן להפעיל אפשרות זו מהתפריט Debugאו באמצעות [F8
( Step Overצעד מעבר)
אפשרות זו פועלת כמו Step Intoאלה שבמקרה שהתוכנית קוראת לפרוצדורה ,לא תתבצע כניסה לתוך
לפרוצדורה
ניתן להפעיל אפשרות זו מתוך התפריט Debugאו על ידי הצירוף Shift+F8
( Step Outצא החוצה)
מצבע יציאה מפרוצדורה פנימית לחיצונית
ניתן להפעיל אפשרות זו מתוך התפריט Debugאו על ידי Ctrl+Shift+F8
( Run To Cursorהרץ עד הסמן)
אפשרות זו מריצה את התוכנית עד אשר שורת הביצוע מגיעה למיקומו של הסמן ואז התוכנית עוברת לBreak -
Mode
ניתן להפעיל אפשרות זו מתוך התפריט Debugאו באמצעות הצירוף Ctrl+F8
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
( Add Watchהוספת תצפית)
באמצעות Watchאפשר לעקוב אחר ערכו של משתנה במהלך ריצת התוכנית
ניתן להוסיף Watchמהתפריט Debug
הבחירה ב Add Watch-פותחת את התיבה Add Watchהמוצגת להלן:
ב Expression-רושמים את הביטוי שאחריו רוצים לעקוב
Module ,Procedureו Project-מגדירים את מיקומו של הביטוי מבין כל הפרוייקטים המודולים והפרוצדורות
שנמצאים בעריכה
Watch Typeמגדיר את הפעולה שברצוננו לבצע:
:Watch Expression oמציג את ערכו של הביטוי בכל נקודת זמן בתוכנית (אם הביטוי אינו קיים באותו
שלב ,תוצג לידו ההודעה )Out Of Context
:Break When Value Is True oמעביר את התוכנית ל Break Mode-ברגע שהביטוי הוא True
:Break When Value Changes oמעביר את התוכנית ל Break Mode-כאשר ערך הביטוי משתנה
( Edit Watchערוך תצפ ית)
מאפשר לשנות הגדרות Watch
תיבת הדו שיח הנפתחת דומה מאוד לזו של ,Add Watchאלא שגם קיימת האפשרות למחוק Watch
כדי להפעיל אפשרות זו יש לבחור אותה מהתפריט Debugאו להפעיל את צירוף המקשים Ctrl+W
( Quick Watchתצפית מהירה)
אפשרות זו מאפשרת לבצע תצפית מיידית על ערכו של משתנה
כדי להפעיל אפשרות זו יש:
oלבחור ביטוי בחלון הקוד
oלהפעיל את האפשרות מהתפריט Debugאו על ידי צירוף המקשים Shift+F9
- 13אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :7הרצה וניפוי שגיאות
החלון הנפתח בתגובה הוא:
:Contextמתאר את מיקום הביטוי בתוך מרחב העבודה של ,Visual Basicכלומר את הנתיב לפרוצדורה שבא
ממוקם הביטוי הנבחן (שם פרוייקט ,שם מודול ,שם פרוצדורה וכו')
:Expressionזהו הביטוי הנצפה
:Valueזהו ערכו של המשתנה .אם המשתנה לא קיים באותו רגע ,תוצג ההודעה Out of context
( Toggle Breakpointהפוך מצב של נקודת עצירה)
Breakpointהיא נקודת עצירה הממוקמת במשפט מסוים בתוכנית
תוכנית רצה עוברת ל Break Mode-בעת הגיעה לBreakpoint-
לחצן זה הוא דו מצבי ,כלומר מוסיף או מנקה Breakpoint
Breakpointמוצג באמצעות נקודה אדומה בחלון הקוד
כדי להוסיף או להסיר Breakpointיש לבחור את האפשרות מהתפריט ,Debugאו מסרגל הכלים או על ידי המקש
,F9או לחיצה על העיגול האדום במסמל Breakpointבחלון הקוד
( Clear All Breakpoi ntsהסר את כל נקודות העצירה)
אפשרות זו מסירה את כל נקודת העצירה שמוקמו בקוד
ניתן להפעיל אפשרות זו מהתפריט Debugאו על ידי הצירוף Ctrl+Shift+F9
( Set Next Statementקבע את המשפט הבא לביצוע)
Next Statementהנו הביטוי הבא שאמור להתבצע לאחר הביטוי הנוכחי
במצב ,Break Modeהביטוי הבא לביצוע מוצג באמצעות חץ צהוב
בעת הרצה ב Break Mode-ניתן לשנות את הביטוי הבא שיבוצע בשתי צורות:
oיש להציב את הסמן במשט שאליו נרצה שהתוכנית תעבור בשלב הבא ,ואז יש לבחור באפשרות Set Next
Statementמתוך התפריט Debugאו להפעיל את הצירוף Ctrl + F9
oניתן לגרור את החץ הצהוב את השורה שרוצים שתהפוך למשפט הבא לביצוע
יש לשים לב כי המשפט הבא לביצוע חייב להיות באותה הפרוצדורה
( Show Next St atementהצג את המשפט הבא לביצוע)
אפשרות זו מעבירה את סמן הטקסט אל המשפט הבא לביצוע
ניתן לבחור באפשרות זו מתוך התפריט Debug
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
האובייקט
DEBUG
האובייקט Debugהוא אובייקט של סביבת Visual Basic
לאובייקט Debugיש שתי מתודות:
oהמתודה Printמוציאה פלט לחלון הImmediate-
oהמתודה Assertבוחנת ביטוי בוליאני ,ואם הוא Falseעוצרת את מהלך התוכנית באותה הנקודה
כל הפעולות המבוצעות בעזרת האובייקט Debugמתקמפלות רק בשלב הפיתוח ,כאשר יוצרים את קובץ הריצה
באמצעות הפריט Makeמהתפריט ,Fileקטעי הקוד הקוראים לאובייקט Debugלא מתקמפלים
דוגמה 1
נניח כי אנו רוצים לכתוב פונקציה בשם SumUpToהמקבלת מספר אי שלילי שלם ומחשבת את סכום כל
המספרים מ 0-עד לאותו מספר (כולל)
נוכל לוודא שהמספר שהועבר הוא אי שלילי באמצעות Debug.Assert
נוכל להדפיס נתונים לחלון ה Immediate-באמצעות Debug.Print
Public Function SumUpTo(ByVal n As Integer) As Integer
Dim res As Integer
_ & " Debug.Print "The input for SumUpTo is :
Trim(Str(n)) ' Print to the immediate
Debug.Assert n >= 0 ' Allow only non-negative arguments
res = 0
Do While n > 0
res = res + n
n = n - 1
Loop
SumUpTo = res
End Function
הרצת קוד זה גורמת להדפסת הערך המועבר לפונקציה לחלון הImmediate-
אם מועבר ערך שלילי ,ההרצה מושהית על ידי המשפט ,Debug.Assertבמקרה כזה נוכל להיעזר בCall Stack-
כדי לדעת מאיזו פרוצדורה התבצעה קריאה לפונקציה זו
כאמור ,קטעי הקוד הללו מקומפלים ורצים רק בשלב הפיתוח ולא במוצר המוגמר
טיפול בשגיאות בקוד התוכנית
אובייקטים של Visual Basicמטפלים בשגיאות בסגנון הException Handling-
פונקציות המיובאות מ DLL-רגילים מחזירים ערך המצביע בדרך כלל על הצלחה או כשלון של הקיאה
כשאר מפעילים פונקציות מ DLL-רגילים (שים לב שהכוונה ל DLL-שונים מאלו שתלמד לבנות בשיעורים אודות
)ActiveXבודקים את הערך המוחזר כדי לזהות שגיאה
כאשר מפעילים קוד סטנדרטי של Visual Basicיש ללכוד חריגים באמצעות המשפט On Error
שים לב ,חריג שלא טופל יגרום לקריסת התוכנית אצל המשתמש ,לפיכך יש לטפל בכל בחריגים האפשריים
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :7הרצה וניפוי שגיאות
האובייקט Err
בזמן התרחשות שגיאה ,הנתונים אודות השגיאה מאוחסנים באובייקט Err
בזמן לכידת שגיאה יש לבחון את האובייקט Err
האובייקט Debugמאפשר להעביר שגיאה החוצה לקוד הקורה לפונקציה
המאפיינים והמתודות של האובייקט Errהם:
:Number oמספר השגיאה שהתרחשה
:Description oתיאור מילולי של השגיאה
:Source oזוהי מחרוזת המכילה את המקור לשגיאה שהתרחשה ,למשל שם המחלקה שיצרה את השגיאה
(הנושא מחלקות נלמד בהמשך הקורס)
:LastDLLError oמחזיר את קוד השגיאה האחרון שנוצר ב( DLL-רגיל) שהתבצעה אליו קריאה .ערך זה
המצוי ב LastDLLError-שקול לקריאה GetLastErrorמתוך Windows API
:HelpFile oמכיל את הנתיב לקובץ עזרה הקשור לשגיאה שהתאלשה
:HelpContext oמכיל את זיהוי הנושא בקובץ העזרה
:Clear oמתודה זו מנקה את האובייקט .Errמומלץ לבצע זאת לאחר ששגיאה טופלה
:Raise oמתודה זו מאפשרת לעורר שגיאה .משתמשים במתודה זו בעיקר בתכנות רכיבים חדשים (הנושא
נדון בשיעורים אודות )ActiveX
On Error...
המשפט On Errorבא בשלושה טעמים:
On Error GoTo line o
On Error Resume Next o
On Error GoTo 0 o
On Error GoTo line
משפט זה מעביר את הביצוע לשורה המצוינת במילה lineכאשר שגיאה מתרחשת
כדי לציין שורה יש להשתמש ב Labels-או במספרי שורות
oכדי לציין Labelיש לרשום שם חוקי עם נקודתיים בתחילת שורה
oניתן להשתמש במספרי שורות בקוד ,Visual Basicאך זוהי שיטה ישנה המתאימה לימי הביניים .בכל
אופן ,מספר חייב להופיע בתחילת השורה
חשוב למקם משפט יציאה מהפרוצדורה Exit Sub :או Exit Functionלפני קוד הטיפול בשגיאות ,על מנת שהוא
לא יתבצע כאשר הקוד בוצע בהצלחה
דוגמה 2
Public Function Div(ByVal Num1 As Double,
ByVal Num2 As Double) As Double
On Error GoTo Err_Handler
Div = Num1 / Num2
Exit Function
Err_Handler:
MsgBox "The following error occured: " & Err.Description
End Function
פונקציה זו מחלקת שני מספרים
אם תתרחש שגיאה (למשל שגיאת חלוקה ב )0-תועבר השליטה לקוד שאחרי התווית Err_Handler
קוד הטיפול פשוט מציג הודעה עם תיאור השגיאה שהתרחשה
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
שים לב שלפני התווית יש יציאה מפונקציה ,כדי למנוע את ביצוע הקוד אם לא התרחשה שגיאה
אין צורך לקרוא למתודה ,Err.Clearכיוון שהאובייקט Errמתנקה אוטומטית בעת יציאה מפונקציה
On Error Resume Next
משפט זה מעביר את הקוד לביצוע לשורה הבאה שלאחר השגיאה
On Error GoTo 0
משפט זה מכבה ( )Turn Offטיפול בשגיאות שהוגדר ,כלומר אם התבצעה קריאה ל On Error GoTo line-או
ל On Error Resume Next-הם יבוטלו
טוב להשתמש במשפט זה אם רוצים לטפל באופן שונה בשגיאות המתרחשות במקומות שונים בקוד
המשפט Resume
המשפט Resumeמאפשר להמשיך את ביצוע התוכנית בשורה מסוימת לאחר טיפול בשגיאה שהתרחשה
קיימות שלוש אפשרויות:
:Resume oמחזיר את הביצוע לשורה ממנה התרחשה השגיאה
Resume Next oמעביר את הביצוע לשורה שאחרי השורה שבה התרחשה השגיאה
:Resume line oמעביר את הביצוע לשורה המצוינת על ידי תווית או מספר שורה (כמובן שהשורה חייבת
להיות באותה פרוצדורה)
לאחר קריאה ל Resume-האובייקט Errמתנקה אוטומטית
דוגמה 1
_ Public Function Div(ByVal Num1 As Double,
ByVal Num2 As Double) As Double
On Error GoTo Err_Handler
Div = Num1 / Num2
Debug.Print Err.Number, Err.Description
Exit Function
Err_Handler:
Num2 = 1#
Resume
End Function
דוגמה זו זהה לקודמת ,אלא שכאן בקוד הטיפול משנים את ערכו של Num2ל 1-ומחזירים את הביצוע לשורה
שיצרה את השגיאה ,כך נמנעים מחלוקה ב0-
הפו נקציה Error
הפונקציה Errorמאפשרת לקבל תיאור של שגיאה לפי המספר שלה
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור : 1מבוא לתכנות מבוסס רכיבים Componentware Development
בשיעור זה:
תבין את ההבדלים בין ( Procedural Programmingתכנות פרוצדורלי) לבין Object Oriented Programming
(תכנות מונחה עצמים )OOP
תבין מהו ( Event Oriented Programmingתכנות מונחה אירועים)
תבין את עקרונות COM
תבין מהם ( COM Interfacesממשקי ,)COMואת הצורך בהם
תלמד אודות התמיכה של Visual Basicבתכנות מונחה עצמים ,תכנות מונחה אירועים ותכנות רכיבים
תהיה מוכן להרטיב את הרגליים בשיעור הבא העוסק בתכנות מונחה עצמים בVisual Basic-
תכנות פרוצדורלי לעומת תכנות מונחה עצמים
מבדילים בין שני סוגים עיקריים של שפות תכנות:
Procedural Languages
Object Oriented Programming Languages
Procedural Prog ramming
מרכז העצבים בתכנות פרוצדורלי הנם הפונקציות והרוטינות
הגדרה של סוגי נתונים חדשים בתכנות פרוצדורלי אפשרית ,אך במקביל יש לכתוב פרוצדורות המסוגלות לטפל
בסוגים החדשים
סוג נתונים מוגדרים על ידי המשתמש יכולים להכיל בתוכם משתנים מכל הסוגים המוכרים עד לנקודה בה הם
הוגדרו
סוגי נתונים מוגדרים על ידי המשתמש אינם יכולים להכיל בתוכם פונקציות
בתכנות פרוצדורלי ,המשתנים והפרוצדורות חיים בנפרד
בדרך כלל משתמשים ב( Modular Programming-תכנות מודולרי) כדי ליצור איזושהי רמה של הסתרת מידע.
Modular Programmingמשמעותו היא שהקוד מרוכז במודולי קוד (המקבילים למודולים סטנדרטיים בVisual -
,)Basicובאופן זה ניתן להסתיר משתנים מסוימים שאין צורך שייראו מחוץ למודול .מודול הנו קובץ בודד של
קוד.
דוגמה
נמחיש את ההיבטים הללו של תכנות פרוצדורלי באמצעות יישום פשוט בשפת Cוב Visual Basic-תוך שימוש
במגבלות התכנות הפרוצדורלי
נכתוב תוכנית המנהלת רשימה של 20עובדים ומאפשרת את הפונקציונליות הבאה:
oהוספת רשומת עובד (עד 20עובדים ,כאמור)
oהדפסת פרטי העובדים
הגדרת סוג הנתונים:
בשלב הראשון נגדיר סוג נתונים חדש בשם Workerשיכיל את השדות Address ,Name ,IDוPhone-
בשפת Cהיינו מגדירים זאת כך:
>#include <stddef.h
>#include <tchar.h
20
100
#define SIZE_NAME
#define SIZE_ADDRESS
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Componentware Development מבוא לתכנות מבוסס רכיבים:1 שיעור
#define SIZE_PHONE
20
typedef struct tagWorker
{
long ID;
TCHAR Name[SIZE_NAME];
TCHAR Address[SIZE_ADDRESS];
TCHAR Phone[SIZE_PHONE];
} Worker;
: נוכל להשתמש בהגדרה הבאהVisual Basic-ב
Public Const SIZE_NAME As Integer = 20
Public Const SIZE_ADDRESS As Integer = 100
Public Const SIZE_PHONE As Integer = 20
Public Type Worker
ID As Long
Name As String * SIZE_NAME
Address As String * SIZE_ADDRESS
Phone As String * SIZE_PHONE
End Type
: כתיבת פרוצדורות.1
Worker בשלב השני נרצה לכתוב פונקציה המזינה נתונים לרשומה מסוג
: היינו כותבים זאת כךC בשפת
void SetWorkerData(Worker *pWorker, long id, _TCHAR *name,
_TCHAR *address, _TCHAR *phone)
{
pWorker->ID = id;
_tcsncpy(pWorker->Name, name, sizeof(pWorker->Name));
_tcsncpy(pWorker->Address, address, sizeof(pWorker->Address));
_tcsncpy(pWorker->Phone, phone, sizeof(pWorker->Phone));
}
: ניתן לרשום רוטינה דומה באופן הבאVisual Basic-ב
Public Sub SetWorkerData(ByRef pWorker As Worker, _
ByVal nID As Long, _
ByRef strName As String, _
ByRef strAddress As String, _
ByRef strPhone As String)
pWorker.ID = nID
pWorker.Name = strName
pWorker.Address = strAddress
pWorker.Phone = strPhone
End Sub
- 12 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
לבסוף נכתוב פונקציה המדפיסה את מערך העובדים
בשפת Cאפשר לכתוב אותה באופן הבא:
void PrintWorkerData(FILE *out, Worker *pWorker,
)size_t nWorkers
{
;size_t i
)for(i = 0; i < nWorkers; i++
{
_ftprintf(out,
"_T("ID: %ld\n
""Name: %s\n
""Address: %s\n
"Phone: %s\n\n"),
(pWorker + i)->ID,
(pWorker + i)->Name,
(pWorker + i)->Address,
;)(pWorker + i)->Phone
}
}
וב Visual Basic-הרוטינה הבאה תהיה טובה מספיק:
_ Public Sub PrintWorkerData(ByRef out As TextBox,
_ ByRef pWorker() As Worker,
)ByVal nWorkers As Integer
Dim i As Integer
For i = 0 To nWorkers - 1
_ & out.Text = out.Text
_ & "ID: " & Str(pWorker(i).ID) & vbCrLf
_ & "Name: " & pWorker(i).Name & vbCrLf
_ & "Address: " & pWorker(i).Address & vbCrLf
"Phone: " & pWorker(i).Phone & vbCrLf & vbCrLf
Next
End Sub
.1כתיבת תוכנית דוגמה:
ניתן להמשיך ולכתוב תוכנית המדגימה את השימוש בסוג הנתונים החדש ,אך את זאת אני משאיר לך
כתרגיל .בכל מקרה תוכל למצוא את תוכניות הדוגמה (ב C-וב )Visual Basic-בדיסק.
מסקנה
מעיון בקוד הדוגמה ,קל להבחין שישנה הפרדה בין הפרוצדורות לבין הנתונים
כדי להפעיל פונקציה על משתנה מסוג Workerיש להעביר אותו כפרמטר לפונקציה
היה יותר נוח לו יכולנו לרשום:
)pWorker(i).SetData(....
בדיוק כפי שאנו רושמים כשאנחנו קוראים למשל למתודה Showשל ,Formאך זה כבר עניין לOOP-
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1מבוא לתכנות מבוסס רכיבים Componentware Development
Object Oriented Programming
בתכנות מונחה עצמים מגדירים סוגי נתונים חדשים באמצעות ( Classמחלקה) ולא באמצעות ( Typeאו Struct
בשפת )C
במחלקות אורזים יחד משתנים ופרוצדורות .באופן כזה יוצרים יחידה לוגית אחת הכוללת משתנים ומתודות
הפועלות על המשתנים הללו
משתנים של מחלקה קרויים ,member variablesומתודות של מחלקה קרויות member methods
אובייקטים הם מופעים ( )Instancesשל מחלקות .כלומר משתנים המוצהרים בתוכנית מסוג מחלקה מסוימת הנם
אובייקטים של המחלקה
כאשר יש להפעיל מתודה של אובייקט ,אין צורך להעביר את האובייקט למתודה (כפי שראינו בדוגמה הקודמת).
המתודה היא חלק פנימי של האובייקט כך שהפעלת המתודה נעשית באמצעות האובייקט עצמו
בתכנות מונחה עצמים קיימים שלושה רעיונות מרכזיים:
( Encapsulation oכמיסה)
( Inheritance oהורשה)
( Polymorphism oרב צורתיות)
( Encapsulationכמיסה)
כמיסה היא היכולת של מחלקה להסתיר membersמסוימים ,ולחשוף אחרים
ה members-החשופים של מחלקה קרויים ה( Interface-ממשק) של המחלקה
רעיון הכמיסה הנו רעיון מרכזי ב OOP-כיוון שבעזרת כמיסה ניתן למנוע מקוד לא מורשה לגשת לmembers-
פרטיים באובייקט .כך לדוגמה ,לא תרצה שיוזן מספר זיהוי שאינו חוקי ל member-של אובייקט המאחסן מספר
תעודת זיהוי .כיוון שכך ,מומלץ להפוך את כל ה member variables-של מחלקה לפרטיים (עד כמה שהדבר ניתן),
ובמקביל ,לאפשר גישה אליהם באמצעות member methodsשייכתבו כך שלא יפרו את כללי הארגון (אלא אם
אתה חתרן בלתי נלאה)
מחלקה המעונינת להסתיר membersאך במקביל לאפשר גישה ל members-הללו למחלקות ספציפיות תוכלנה
לעשות זאת על ידי הגדרת המחלקות הללו כ( Friends-כך נעשה הדבר בשפת )C++
ב Visual Basic-הרעיון בבסיסו דומה ,אך קיים שוני מסוים :ב Visual Basic-הגדרת membersכFiends-
הופכת אותם לציבוריים עבור כל הקוד שבפרוייקט (מחלקות ומודולים רגילים) ,אך לא נגישים לקוד מפרוייקטים
אחרים
Friendsפוגעים ברעיון הכמיסה ,ולפיכך מומלץ שלא להשתמש בהם אלא במקרים מיוחדים מאוד
( Inheritanceהורשה)
הורשה היא היכולת של מחלקה לרשת תכונות ממחלקה אחרת
המחלקה היורשת קרויה מחלקה נגזרת ( ,)Subclassוהמחלקה המורישה קרויה מחלקת בסיס ()Superclass
הורשה מתבטאת בשני היבטים:
oהורשת ממשק
oהורשת מימוש
הורשת ממשק מתבטאת בהורשת שמות המאפיינים והמתודות ממחלקת הבסיס למחלקה הנגזרת
הורשת מימוש מתבטאת שהורשת מימוש המתודות והמאפיינים ממחלקת הבסיס למחלקה הנגזרת
הורשה הנה המפתח לשימוש חוזר בקוד – שפות מונחות עצמים מחויבות לתמוך שהורשה (ממשק ומימוש)
השימוש בהורשה צריך להתבצע בעת זיהוי יחסי אב-בן בין מחלקות .ניתן להיעזר בתבנית ClassXהוא סוג של
ClassYכדי לזהות יחסי הורשה ,כאשר ClassXהיא המחלקה הנגזרת ו ClassY-היא מחלקת הבסיס .לדוגמה:
oדוגמה נכונה :מלבן הוא צורה
oדוגמה נכונה :מנהל הוא סוג של עובד
oדוגמה לא נכונה :מכונית היא ארבע דלתות ,מנוע ,שלדה...
נכון להגיד :מכונית מכילה ארבע דלתות ,מנוע ,שלדה...
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
צריך להיזהר שלא ליפול למלכודת הטמונה בבלבול שבין יחסי הורשה ( )Inheritanceלבין יחסי
הכלה ()Containment
( Multiple Inheritanceהורשה מרובה) היא היכולת לרשת ממספר מחלקות בו זמנית
שפות מונחות עצמים תומכות בהורשה מרובה במידה כזו או אחרת C++ .למשל מאפשר הורשה מרובה מלאה,
Javaמאפשרת הורשה מלאה ממחלקה אחת והורשה של ממשקים נוספים Visual Basic .מאפשרת מימוש
ממשקים בלבד (חיה מוזרה שדומה להורשת ממשקים)
דוגמאות להורשה מרובה:
oדוגמה נכונה :רכב אמפיבי הוא רכב יבשתי וגם רכב ימי
oדוגמה לא נכונה ComboBox :הוא גם TextBoxוהוא גם ListBox
נכון יהיה להגיד ComboBox :מכיל בתוכו TextBoxוListBox-
( Ploymorphismרב צורתיות)
Polymorphismהוא היכולת של אובייקט ללבוש צורות שונות ,או במילים אחרות לתפעל את אותו member
באופנים שונים
Polymorphismנובע מהשימוש בהורשה
קל יותר להבין מהו Polymorphismבאמצעות דוגמה:
נניח שברצוננו ליצור תוכנית גרפית פשוטה המאפשרת ציור של שלוש צורות( Line :קו)( Rectangle ,מלבן)
ו( Ellipse-אליפסה) .ברור שנרצה לאחסן את הצורות באמצעות מבנה נתונים מסוים .הבעיה הראשונה שתתעורר
היא שלא נוכל להשתמש במבנה נתונים הכולל מצביעים מסוג -Lineים ,למשל ,לאחסון -Rectangleים או
-Ellipseות .כדי לפתור בעיה זו נגדיר את כל המחלקות הללו כנגזרות של מחלקה מופשטת בשם .Shapeהיררכית
המחלקות תיראה ,אם כן ,כמו בציור הבא (כאשר החץ משמעותו "יורש מ:)"...
Shape
Ellipse
Rectangle
Line
את הבעיה הראשונה פתרנו ,כיוון שבשפות מונחות עצמים מצביע למחלקת בסיס (במקרה זה )Shapeיכול להצביע
לסוגים נגזרים (במקרה זה Rectangle ,Lineו .)Ellipse-כלומר סוג המצביע במבנה הנתונים יהיה מסוג .Shape
הבעיה השניה שמתעוררת היא ,כיצד נבצע סריקה על כל האובייקטים במבנה הנתונים לצורך ביצוע פעולה כלשהי
(למשל ציור על המסך) ,הבעיה נובעת מכך שבפועל כל תא במבנה מצביע לסוג נתונים לא ידוע (Rectangle ,Line
או .)Ellipseבעיה זו אינה בעיה כלל ועיקר ,כיוון שנוכל להשתמש במצביע מחלקת בסיס כדי לבצע סריקה במבנה
הנתונים ובאמצעות מצביע זה נפעיל את המתודה הרצויה .השאלה הנשאלת כעת היא איזו מתודה בדיוק תופעל,
האם זו של המחלקה Shapeממנה מוגדרים המצביעים במבנה הנתונים ,או אולי המתודה של האובייקט המוצבע
בפועל ,כאשר זה יכול להיות שונה בין תא לתא במבנה הנתונים .התשובה היא שתופעל המתודה של סוג הנתונים
המוצבע בפועל ולא המתודה של סוג המצביע .זהו Polymorphismבמיטבו.
כדי להשלים את התמונה ,ובכדי להפוך את העניין למוחשי יותר ,נגדיר מתודות המשותפות לכל הצורות כחלק
מהממשק של .Shapeמתודות לדוגמה יהיו .Move ,Paintמתודות אלו עוברות בירושה לכל אחת מהמחלקות
הנגזרות (כלומר Rectangle ,Lineו )Ellipse-ומקבלות בכל מחלקה משמעות שונה .כך למשל Paint ,עבור Line
פירושו שימוש בפונקציות מערכת היודעות לצייר קווים על גבי המסך Paint .עבור Rectangleימומש באמצעות
קריאה לפונקציה מערכת המתמחה בציור מלבנים .היררכית המחלקות אם כן תיראה כך:
- 13אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1מבוא לתכנות מבוסס רכיבים Componentware Development
Shape
)(Paint
)(Move
...
Rectangle
Ellipse
)(Paint
{
)(Paint
{
מימוש המתאים לציור מלבן
מימוש המתאים לציור אליפסה
}
)(Move
{
מימוש המתאים להזזת אליפסה
Line
)(Paint
{
מימוש המתאים לציור קו
}
)(Move
{
מימוש המתאים להזזת מלבן
{
...
}
)(Move
{
מימוש המתאים להזזת לקו
{
...
{
...
כעת נניח שברשותנו מערך של -Shapeים שכל תא בו מצביע על צורה מסוג כלשהו:
Shape
Line
][0
Rectangle
][1
Line
][2
Ellipse
][3
Rectangle
][4
Ellipse
][5
כעת נוכל להצהיר על משתנה מסוג Shapeולבצע סריקה על המערך .מתוך המצביע הזה נפיל את המתודה .Print
מה שיופעל למעשה אלו הן המתודות של האובייקטים המוצבעים ,ובאופן יותר ספציפי עבור האיבר עם האינדקס
] ,[0תופעל המתודה Paintשל ,Lineעבור האיבר עם האינדקס ] [1תופעל המתודה Printשל ,Rectangleוכן
הלאה.
( EVENT ORIENTED PROGRAMMINGתכנות מונחה אירועים)
בתוכנות מונחה אירועים זרימת התוכנית מונחית על פי האירועים המתרחשים
ב Visual Basic-למשל ,מוכרים לך האירועים Click,MouseDownוכו' .קוד הנכתב הפרוצדורות האירועים הללו
יופעל בתגובה לאירועי המשתמש.
לכל אירוע יש שני צדדים :הצד המעורר את האירוע והצד המגיב לאירוע .לדוגמה האירוע MouseMoveצדו
האחד היא מערכת ההפעלה היוזמת את האירוע בתגובה לתזוזת כבר מצד המשתמש ,והצד השני היא התוכנית
שלך המגיבה לאירוע.
אירועים אינם קשורים בהכרח לפעולות משתמש ,למשל האירוע DataArrivalשל פקד Winsockמתרחש בכל
פעם שמידע מגיע למחשב המקומי ממחשב אחר ברשת
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
)COM( COMPONENT OBJECT MODEL
COMמאפשר להתמודד טוב יותר עם הבעיות והאתגרים הבאים:
oפיתוח תוכניות מודולריות ברמה הבינרית:
כתיבת רכיבי קוד בשפות שונות מעלה בעיות של תאימות בינרית בין רכיבי הקוד
לעתים יש רצון וצורך לשפר פונקציונליות של תוכנה מסוימת .פעולה מהסוג הזה כרוכה בדרך כלל
בהחלפת התוכנה כולה .לצורך ההדגמה ,נניח שברשותך מעבד תמלילים מדהים שבדיקת האיות שלו
זוועתית .היה נחמד לו יכולת לרכוש רכיב בדיקת איות מחברה צד ג' ולשלב אותו כחלק אינטגרלי של
מעבד התמלילים.
oשימוש חוזר ברכיבים ותאימות גרסאות רכיבים:
יישומי תוכנה בסדר גודל בינוני ומעלה הופכים קשים לפיתוח ולתחזוק .לעתים תכופות מוצאים עצמם
מתכנתים משתמשים בפונקציונליות שפותחה זה מכבר עבור תוכנה אחרת .הבעיה העיקרית היא ,שמאוד
מסוכן לשנות מחלקות ,או להוסיף פונקציונליות למחלקות בשל פגיעה לא צפויה במחלקות אחרות
הנגזרות או משתמשות במחלקה הספציפית.
oשקיפות בהפעלת רכיב שרת ללא קשר למיקומו ביחס לרכיב הלקוח:
רכיבים הפועלים מול רכיבים אחרים ,מושפעים ממיקום הרכיב ביחס אליהם ,כלומר ,האם הרכיב מצוי
באותו מרחב כתובות (אותו ,)Processאו במרחב כתובות שונה באותו מחשב ( Processשונה באותו
מחשב) ,או אולי במחשב אחר ברחבי הרשת .ברור שפניה לרכיב המצוי במחשב אחר ברחבי הרשת שונה
בתכלית מפניה לרכיב המצוי תחת אותו מרחב כתובות ,שכן פניה לרכיב ברשת כרוכה בהעברת מסרים
בפרוטוקולים שונים ומשונים וכו' .היית מאושר לו יכולת להפעיל רכיב מרוחק בדיוק באותו האופן בו
אתה מפעיל רכיב מקומי וכל משימת ההתקשרות דרך הרשת ,או חציית מרחבי כתובות הייתה נופלת על
כתפי מישהו אחר (ביל גייטס ,למשל).
COMמגדיר תקנים לפיתוח רכיבים :באמצעות ממשקים סטנדרטיים שרכיבי COMאמורים לתמוך בהם .אפשר
להגיד ש COM-הוא הדבק שבין רכיבים
כתיבת רכיבים בהתאם ל ספציפיקצית COMמאפשרת שימוש חוזר ברמה בינרית ,ללא תלות בשפות שבהם
נכתבו הרכיבים .היתרון הנובע מכך הוא שניתן לפתח רכיב בשפה מסוימת המתאימה ביותר לפיתוח אותו רכיב
ואז אפשר יהיה להשתמש בו בשפות שונות
התמיכה הקיימת במערכת ההפעלה עבור COMמאפשרת לבצע את ההתחברות בין רכיבים .כדי להבהיר את
העניין המעורפל הזה אשתמש באנלוגיה ובסוגריים ארשום את ההקבלה:
נניח שישנם שלושה אנשים איש א' (רכיב א) ,איש קשר (מערכת COMהבנויה כחלק אינטגרלי ממערכת ההפעלה)
ואיש ב' (רכיב ב) .בין איש א'(רכיב א') לאיש ב' (רכיב ב') נמצא קיר ,כך שאף אחד מהם לא יודע האם השני קיים
או לא .כדי לברר זאת שואל איש א' (רכיב א') את איש הקשר (מערכת )COMהאם איש ב' (רכיב ב') נמצא והאם
הוא יודע לדבר בשפה שלנו ( )COMהתשובה תהיה חיובית (נניח שהיא חיובית) ובשלב זה יקשר איש הקשר
(מערכת )COMבין איש א' (רכיב א') לאיש ב' (רכיב ב') ויעזוב אותם לנפשם .מכאן והלאה איש א' (רכיב א') ואיש
ב' (רכיב ב') ידברו בניהם – ימצאו או לא ימצאו עניין משותף ( )Interfaceזהו עניינם.
רכיב מאפר גישה אליו על ידי חשיפת ממשק ( )Interfaceשדרכו יוכלו לקוחות להתחבר אליו .נניח למשל שאתה
מעוניין לפתח רכיב לביצוע חישובים מתמטיים מסובכים ,וודאי תחשוף ממשק המאפשר ביצוע חישובים
סטטיסטיים (יתכן שתקרה לו )IStatistics
לקוחות של רכיבים מפרסמים בדרך כלל את הממשק לו הם מצפים בבואם להתקשר עם רכיב ,COMפרסום זה
מטרתו היא לאפשר פיתוח רכיבים מתמחים על-ידי חברות שונות ובכך לאפשר תחרות "הרכיב הטוב ביותר"
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1מבוא לתכנות מבוסס רכיבים Componentware Development
COMאוסר על מפתחי רכיבים לשנות ממשק שכבר פורסם והופץ למשתמשים .שינוי מסוג עלול לגרום לקריסתם
של תוכניות לקוח שהשתמשו ברכיב בגרסאותיו הקודמות .אם הממשק שיצרת דורש שינוי ושיפור ,פשוט צור
ממשק חדש שיכיל את הפונקציונליות הנדרשת ,והשאר את הממשק הקודם ללא שינוי .שים לב שלא אמרתי
שאינך יכול לשנות את המימוש הפנימי של הרכיבים ,תוכל לעשות זאת כל אימת שתחפוץ בכך ,על כל פנים זכור
שהרכיבים שלך מתקשרים באמצעות הממשקים שיצרת עבורם לכן היזהר לפני ביצוע שינויים כלשהם.
רכבי COMיש משלושה סוגים עיקריים:
( In Process oתוך תהליכי) – רכיב COMהפועל החלק מתוכנית הלקוח (בתוך מרחב כתובות הזכרון של
תוכנית הלקוח)
( Out of Process oחוץ תהליכי) – רכיב המופעל כתוכנית נפרדת ,וכתוצאה מכך מוקצים עבורו מרחב
כתובות נפרד.
( Remote oמרוחק) – זהו רכיב COMהממוקם במחשב אחר ברחבי הרשת
COMמשתדל להסתיר ממך את פרטי ההתקשרות עם הרכיב ,כך שפנייה לרכיב ברחבי הרשת תהיה זהה לפנייה
לרכיב תוך תהליכי
)DCOM( Distributed COMהיא טכנולוגיה המאפשרת הפעלת רכיבים מרוחקים ברחבי הרשת ,תוך הסתרת
פרטי
ActiveXזהי טכנולוגיה המבוססת על COM
התמיכה של
VISUAL BASICב OOP-וCOM-
Visual Basicתומכת ב Encapsulation-ובPolymorphism-
,Visual Basicלמרבה הצער ,איננה תומכת בהורשה
Visual Basicתומכת בהורשת ממשקים (יותר מדויק להגיד :מימוש ממשקים ,אך נושא זה יידון בפירוט בשיעור
הבא)
כיוון ש Visual Basic-אינה תומכת בהורשה ,לא יהיה נכון לקרוא לה שפה מונחית עצמים טהורה
Visual Basicתומכת בתכנות מונחה אירועים .כלומר תוכל להגיב לאירועים ,כמו גם לכתוב אירועים משלך
לרכיבים חדשים שאתה מפתח
רכיבי ActiveXשל Visual Basic
ב Visual Basic-תוכל ליצור רכיבי ActiveXמהסוגים הבאים:
– ActiveX DLL oרכיב קוד היכול להכיל גם אלמנטים של ממשק
– ActiveX EXE oתוכניות המאפשרות התקשרות אליהם באמצעות COM
– ActiveX Controls oפקדים חדשים הנוצרים ומותאמים על-ידי המשתמש
ב Visual Basic-יצירת הממשקים בהם תומך הרכיב נעשית באופן אוטומטי .עם זאת ,תוכל ליצור ממשקים
ריקים (ללא מימוש) באמצעות )Interface Definition Language( IDLולממש אותם בשפות שונות
Visual Basicמקילה באופן דרמטי את קלות פיתוח הרכיבים .בשפות אחרות ( C++למשל ,שלא לדבר על Cששם
לא תמצא את הידיים ואת הרגליים) תמצא את עצמך מתעסק עם ממשקים לסידור נתונים לפני שליחה ,IMarshal
רישום רכיבים לקבלת הודעות ( ,)IConnectionPointContaintersשלא לדבר על MTA Model ,STA Model
Single Apartment Modelששם הבלבול הופך לצל שלך.
תשמח לשמוע שרכיבים שאתה מפתח ב Visual Basic-נגישים מסביבות אחרות התומכות ב( ActiveX-למשל
)MFC
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור : 1תכנות מונחה עצמים ב Visual Basic-
בשיעור זה:
תלמד כיצד ליצור מחלקות בVisual Basic-
תלמד להוסיף ,פרוצדורות מכל הסוגים ( Properties ,Functions ,Subו )Events-למחלקות
תלמד מהו ( Interfaceממשק) וכיצד ניתן לממש -Interfaceים בVisual Basic-
תלמד את הצורות השונות בהן ניתן להשתמש באובייקטים בתוכנית
תבין מהו Reference Counting
תבין את ההבדל בין Early BindingלLate Binding-
תלמד מהו ( Collectionאוסף) ,כיצד תוכל ליצור -Collectionים משלך וכיצד לסרוק Collection
( CLASSESמחלקות)
ליצירת מחלקות ב Visual Basic-יש להשתמש בClass Module-
Propertiesשל Class Modul e
:Nameמגדיר את שם המחלקה
:DataBindingBehaviorקובע האם האובייקט יכול להיכרך סביב נתונים (נושא זה נדון בהמשך הקורס)
:DataSourceBehaviorקובע האם האובייקט יכול לשמש כמקור נתונים (גם נושא זה נדון בהמשך הקורס)
Eventsשל Class Module
:Initializeמתעורר בכל פעם שנוצר אובייקט חדש מסוג ה Class-שלך
:Terminateמתעורר בכל פעם באובייקט מסוג ה Class-שלך משתחרר מהזיכרון
הגדרת משתנים ב Class -
ניתן להגדיר משתנים בתוך Class Moduleבדיוק כפי שמצהירים עליהם במודול רגיל
הרשאות הגישה האפשריות עבור הצהרת משתנים:
:Private oמשתנה פרטי
:Public oמתשתנה ציבורי
ברירת המחדל היא ,Privateכלומר הצהרה באמצעות Dimזהה להצהרה באמצעות Private
מומלץ להסתיר את המשתנים באמצעות המילה Privateולאפשר גישה אליהם באמצעות Propertiesמתאימים
בלבד .באופן כזה אתה שומר על עקרון ה Encapsulation-בתכנות מונחה עצמים
הוספת פרוצדורות ל Class -
הרשאות הגישה האפשריות עבור פרוצדורות של Classהן:
:Private oהפרוצדורה היא לשימוש פנימי בלבד של הClass-
:Public oהפרוצדורה נגישה מקוד חיצוני
:Friend oהפרוצדורה נגישה מקוד חיצוני בתנאי שמדובר באותו פרוייקט .עבור תוכניות לקוח מפרויקטים
אחרים ,פרוצדורת Friendתהיה בדיוק כמו Private
בשיעור הבא תיצור ספריות רכיבים הניתנות לשימוש מתוכניות חיצוניות
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1תכנות מונחה עצמים בVisual Basic-
( Propertiesמאפיינים)
Propertiesשל Classהם פרוצדורות שמטרתן לאתחל משתנים בתוך הClass-
היתרון בשימוש במאפיינים Propertiesהוא בכך שניתן לאתחל משתנים באמצעות הסימן = (שווה) ולהפוך בכך
את הקוד לקראי יותר
Propertiesבאים בשלוש צורות:
:Property Let oמאפשר העברת ערכים ל Class-לשם ביצוע פעולות אתחול למשתנים מסוגים בסיסיים
:Property Set oמאפשר העברת אובייקטים ל Class-לשם ביצוע פעולות אתחול לאובייקטים פנימיים
:Property Get oמאפשר לאחזר ערך מהמחלקה (כלומר לבצע השמה מהמחלקה למשתנה הנמצא בחוץ)
בדוגמאות שבהמשך תראה את השימוש בProperties-
( Subרוטינות) ו( Functions-פונקציות)
ניתן להוסיף ל Class-רוטינות ופונקציות בדיוק כפי שהיית מוסיף למודולי הקוד שהכרת עד כה
( Eventsאירועים)
בדיוק כפי שקיימים Eventsל Labels ,CommandButton-ואובייקטים וויזואליים (וגם לא וויזואליים) ,תוכל גם
אתה להוסיף Eventsל Class-שאתה יוצר
כדי להוסיף Eventיש להצהיר עליו בחלק ב General-של הקוד ,כולל הפרמטרים שה Event-מקבל
כדי לעורר ( Event )To Fireיש להשתמש במילה RaiseEvent
תוכל להעביר פרמטרים ByRefולהשתמש בערך שלהם לאחר שהמשתמש ב Class-שלך סיים את הטיפול בהם,
ובכך לאפשר למשתמש במחלקה להעביר מידע ל Classשלך אודות האופן שבו הוא רוצה שה Class-שלך יתנהג
(בדוגמאות שבהמשך עניין זה יובהר)
הצהרה על אובי יקטים מסוג המחלקה
כדי להבחין בין משתנים מסוגים בסיסיים לבין משתנים מסוגים של מחלקות משתמשים במילה אובייקט כדי
לתאר מופע ( )Instanceשל מחלקה
כדי ליצור אובייקטים יש להשתמש במילה New
כדי לשחרר אובייקט מהזיכרון (יותר מדויק יהיה להגיד להפחית את ה Reference Countingשלו ,אך נדון בכך
בהמשך) משתמשים במילה Nothing
ביצוע פעולות של השמת אובייקט מתבצעות באמצעות המילה Set
עליך להבחין בין האובייקט עצמו (הנמצא בזיכרון) לבין המשתנה באמצעותו אתה ניגש לאובייקט .משתנה זה
מאפשר לך להתייחס ( )Referenceלאובייקט
אם לאובייקט מסוים יש אירועים ניתן להצהיר עליו תוך שימוש במילה WithEventsכדי להפוך את האירועים
שלו לזמינים עבור הלקוח (עניין זה יובהר בדוגמאות שבהמשך)
דוגמה 1
Dim prs As New CPerson
בדוגמה זו הוצהר משתנה ייחוס בשם prsמהמחלקה CPersonואותחל באובייקט חדש בזכרות באמצעות המילה
New
דוגמה 2
Dim prs As CPerson
Set prs = New CPerson
שתי שורות קוד אלו זהות להצהרה בדוגמה הקודמת
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
קיימים הבדלים מהותיים באופן ההתנהגות של אובייקט המוצהר כמו בדוגמה 1לבין אובייקט המוצהר כמו
בדוגמה ,1כפי שמפורט להלן:
oאובייקט המוצהר כמו בדוגמה ,1אינו נוצר בפועל אלא רק כאשר אתה ניגש למאפיין או פונקציה שלו.
אובייקט המוצהר כמו בדוגמה 2נוצר בעת הקריאה לNew-
oאובייקט המוצהר כמו בדוגמה 1הוא אובייקט בטוח יותר ,כיוון שמובטח לך שאם תשחרר את
האובייקט מהזיכרון באמצעות ( Nothingכפי שתראה בהמשך) ותנסה לגשת אליו שוב מבלי לקרוא ל-
Newשוב Visual Basic ,תיצור את האובייקט עבורך .כך אתה נמנע משגיאות .לעומת זאת ,אם המהרת
על אובייקט כמו בדוגמה 2ולא יצרת אותו בפועל באמצעות המילה Newאו ששחררת אותו ,ותנסה
לגשת אליו תקבל Runtime Error
oמההבדל הקודם נובע כי אובייקט המוצהר כמו בדוגמה 1ירוץ לאט יותר כיוון ש Visual Basic-מוודאת
עבורך שהאובייקט קיים בכל פעם שאתה מנסה לגשת לפרוצדורה של האובייקט
דוגמה 1
Dim WithEvents obj as CCalendar
בדוגמה זו מוצהר אובייקט מסוג .CCalendarהאירועים שהמחלקה CCalendarחושפת יהיו זמינים עבור יישום
הלקוח
לא ניתן להשתמש במילה WithEventsיחד עם המילה Newבהצהרה .כלומר ,המילה WithEventsזמינה רק
עבור הצהרות כמו בדוגמה 1
דוגמה 4
Dim rc1 As CRect, rc2 As CRect
Set rc1 = New CRect
Set rc2 = rc1
בדוגמה זו הוצהרו שני משתני ייחוס מסוג .CRectהראשון שבהם אותחל לאובייקט חדש מסוג ,CRectואילו
השני אותחל כך שיתייחס לאותו אובייקט CRectש rc1-מתייחס אליו
דוגמה 3
Set prs = Nothing
פעולה זו מטרתה לשחרר את האובייקט ש prs-מתייחס אליו מהזיכרון (בסעיף הבא תראה שאין זה מדויק)
( Reference Countingספירת התיי חסו יות)
כל ה-Class-ים של Visual Basicהם למעשי אובייקטים של COM
לכל אובייקט COMיש משתנה פנימי הסופר את מספר ההתייחסויות ( )Reference Countאליו .בכל עת
שמשתנה ייחוס נוסף מצביע לאובייקט ,מונה זה גדל ב ,1-ואילו כאשר משתנה מפסיק להתייחס לאובייקט (על ידי
קריאה ל )Set...Nothing-מונה ההתייחסויות קטן ב1-
אובייקט משתחרר מהזיכרון ברגע שה Reference Count-שלו מגיע ל0-
ב COM-כל אובייקט ממש את ה Interface-ששמו .IUnknownזהו הממשק הבסיסי ביותר בCOM-
IUnknownכולל שלוש מתודות:
– QueryInterface oמתודה זו מאפשרת קבלת מצביע ל Interface-שהאובייקט ממש
– AddRef oמתודה זו גורמת ל Reference Count-לגדול ב( 1-מתודה זו נקראת אוטומטית עבורך כאשר
אתה מבצע השמה למשתנה ייחוס)
– Release oמתודה זו מפחיתה את ה Reference Count-ב( 1-מתודה זו נקראת עבורך אוטומטית כאשר
אתה מבטל התייחסות של משתנה לאובייקט מסוים)
- 11אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1תכנות מונחה עצמים בVisual Basic-
דוגמה 6
Dim rc1 As CRect, rc2 As CRect
בשורה זו הצהרנו על שני משתני ייחוס לאובייקט מסוג CRect
בשורה זו יוצרים אובייקט מסוג CRectבזיכרון וגורמים ל rc1-להתייחס אליו
ה Reference Count-של האובייקט יהיה בשלב זה 1
בשורה זו גם משתנה הייחוס rc2מצביע לאותו אובייקט בזיכרון שנוצר בשורת הקוד הקודמת .לפיכך
ה Reference Count-של האובייקט יגדל ב1-
Set rc1 = New CRect
Set rc2 = rc1
Set rc1 = Nothing
בשורת קוד זו מבטלים את התייחסות המשתנה rc1לאובייקט בזיכרון ,לפיכך ה Reference Count-יקטן ב1-
ויהיה שוב .1כיוון שה Reference Count-עדיין אינו 0האובייקט לא ישתחרר מהזיכרון
Set rc2 = Nothing
בשורת קוד זו מבטלים את התייחסות המשתנה rc1לאובייקט בזכרון ,לפיכך קטן ה Reference Count-ב.1-
בשלב זה ה reference Count-מגיע ל 0-והאובייקט CRectשנותר בשורת הקוד השניה משוחרר מהזיכרון ומסיים
את חייו.
תרגיל – 1התוכנ ית ClassDemo
בדוגמה זו ניצור מחלקה פשוטה באמצעותה נוכל לעקוב אחר אופן יצירת האובייקטים ושחרורם
.1צור פרוייקט חדש מסוג Standard EXEושמור אותו:
הקצה לפרוייקט את השם ClassDemoולטופס את השם frmClassDemo
שמור את הפרוייקט
.1הוסף Class Moduleלפרוייקט ושמור אותו:
הוסף לפרוייקט Class Moduleתוך שימוש בתפריט Project
הקצה ל Class-את השם CDemoעל ידי שינוי המאפיין Nameשל הClass-
.3הוסף קוד ל:CDemo-
Public val As Integer
בחלון הקוד של CDemoבחר ב Class-מתוך התיבה ( Objectה Combo Box-השמאלי המופיע בראש חלון
הקוד) ומתוך התיבה הימנית בחר בInitialize-
הוסף את הקוד הבא:
)(Private Sub Class_Initialize
val = 0
"MsgBox "Object is now loaded into the memory
End Sub
קטע קוד זה מאתחל את המשתנה valברגע שנוצר אובייקט חדש ,וכמו כן מציג הודעה באמצעות Message
Box
בחר ב Terminate-והוסף את הקוד הבא:
)(Private Sub Class_Terminate
_ & "!MsgBox "Object is now unloaded from the memory
_ & vbCrLf
)"val = " & Str(val
End Sub
- 122אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
קטע קוד זה מציג הודעה בעת שהאובייקט נהרס
:ים לטופס והגדר את המאפיינים הבאים-CommandButton הוסף אחד עשר.1
ערך
Class Demo
3- Fixed Dialog
2-CenterScreen
cmdSetValOfD1
Set val of d1
cmdGetValOfD1
Get val of d1
cmdReleaseD1
Release d1
cmdInitializeD2
Initialize d2
cmdSetValOfD2
Set val of d2
cmdGetValOfD2
Get val of d2
cmdReleaseD2
Release d2
cmdInitializeD3
Initialize d3
cmdSetValOfD3
Set val of d3
cmdGetValOfD3
Get val of d3
cmdReleaseD3
Release d3
מאפיין
Caption
BorderStyle
StartUpPosition
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
אובייקט
frmClassDemo
Command1
Command2
Command3
Command4
Command5
Command6
Command7
Command8
Command9
Command10
Command11
:הטופס צריך להיראות כמו זה שבציור הבא
- 121 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic- תכנות מונחה עצמים ב:1 שיעור
: הוסף את קוד לטופס.1
Option Explicit
Dim d1 As New CDemo
Dim d2 As CDemo
Dim d3 As CDemo
CDemo בשורות הקוד הללו מוצהרים שלושה משתני ייחוס לאובייקטים מסוג
ההצהרות מתבצעות בשתי הצורות שהוסברו קודם
בהמשך (לאחר שנפעיל את התוכנית) תבין כיצד צורת ההצהרה משפיעה על אופן הפעולה של האובייקט
Private Sub cmdGetValOfD1_Click()
MsgBox "d1.val = " & Str(d1.val)
End Sub
Private Sub cmdGetValOfD2_Click()
MsgBox "d2.val = " & Str(d2.val)
End Sub
Private Sub cmdGetValOfD3_Click()
MsgBox "d3.val = " & Str(d3.val)
End Sub
Private Sub cmdInitializeD2_Click()
Set d2 = New CDemo
End Sub
Private Sub cmdInitializeD3_Click()
Set d3 = d2
End Sub
Private Sub cmdReleaseD1_Click()
Set d1 = Nothing
End Sub
Private Sub cmdReleaseD2_Click()
Set d2 = Nothing
End Sub
Private Sub cmdReleaseD3_Click()
Set d3 = Nothing
End Sub
Private Sub cmdSetValOfD1_Click()
d1.val = 100
End Sub
- 121 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
)(Private Sub cmdSetValOfD2_Click
d2.val = 200
End Sub
)(Private Sub cmdSetValOfD3_Click
d3.val = 300
End Sub
.1בחינת התוכנית:
כעת לאחר שהתוכנית מוכנה נריץ אותה יחד שלב אחר שלב ונבחן את מה שמתרחש וגם את מה שלא מתרחש
לחץ על הכפתור Startאו F5
שים לב ,הצהרנו על d1באמצעות ,Newולמרות זאת ,האירוע Initializeשל CDemoלא התרחש עדיין
לחץ על Set val of d1או ,Get val of d1שים לב שהאירוע Initializeהתרחש כעת כיוון שניסית לגשת
לאובייקט
כעת לחץ על Release d1פעם אחת
שים לב כי האובייקט התפרק ואתה מקבל Message Boxמהאירוע Terminateשל CDemo
נסה ללחוץ שוב על ,Release d1שום דבר לא מתרחש
כעת לחץ שוב על Set val of d1או ,Get val of d1שוב Visual Basicיוצרת עבורך אובייקט והאירוע
Initializeמתעורר שוב
מסקנה :הקוד הניגש ל d1-בטוח כיוון שמובטח שאם לא קיים אובייקט בזיכרון ,ייווצר אחד כזה .אך
בתמורה לכך משלמים בביצועים מהירים פחות
כעת נסה ללחוץ על .Set val of d2אתה אמור לקבל שגיאה כיוון שאין אובייקט שעליו מצביע d2
עצור את התוכנית והפעל אותה שוב
לחץ על Initialize d2כעת נוצר אובייקט עבור d2והאירוע Initializeשלו מתרחש
שים לב :למרות שעדיין לא ניגשת למאפייני האובייקט הוא נוצר
הפעל את Set val of d2ולאחר מכן את ,Get val of d2אתה אמור לקבל את הערך 200
הפעל את .Initialize d3אם תעיין בקוד תבחין ש d3-מושווה ל ,d2-כלומר שניהם מצביעים כעת על אותו
אובייקט
לחץ על Get val of d3אתה אמור לקבל .200אכן זהו אותו אובייקט
לחץ על Set val of d3ולאחר מכן ,Get val of d2תבחין בוודאי שהשתנה הערך ל ,300-וניתן לקבל אותו הן
מ d2-והן מd3-
כעת לחץ על ,Release d2שים לב שאירוע Terminateעדיין לא התרחש ,לראייה תוכל ללחוץ על Get val of
d3ותראה כי האובייקט עדיין קיים בזיכרון .כלומר כעת ה Reference Count-של האובייקט הוא 1
לחץ על .Release d3ה Reference Count-של האובייקט יורד ל 0-וכתוצאה מכך האובייקט משתחרר
מהזיכרון והאירוע Terminateשאתה מבחין בו מתרחש
אם תנסה כעת לגשת לערך של האובייקט באמצעות d2או d3תקבל שגיאה כיוון שאן אובייקט בזיכרון
כעת נבצע בדיקה אחרונה ,הפסק את פעולת התוכנית והרץ אותה שוב
לחץ על ,Initialize d2הודעה בדבר האירוע Initializeצריכה להופיע .לחץ OK
אנו יודעים כי כעת קיים בזכרון אובייקט ש d2-מתייחס אליו
כעת לחץ שוב על ,Initialize d2שים לב ששוב ייוצר אובייקט אשר d2יהיה אמור להצביע עליו .לראיה אתה
מקבל הודעה מאירוע Initializeשל CDemoאך השאלה היא מה קורה עם האובייקט ש d2-התייחס אליו
קודם .לאובייקט זה הרי כבר אין מי שמתייחס ,כלומר ה Reference Count-שלו יורד ל ,0-לפיכך אתה מקבל
הודעה בדבר פירוקו של האובייקט מהזיכרון
- 123אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1תכנות מונחה עצמים בVisual Basic-
אני ממליץ בפניך לבצע עוד מספר ניסויים כדי להבין כיצד נוצרים אובייקטים וכיצד הם מתפרקים .תוכל
להשתמש גם בהרצה במצב Break Modeכדי לבחון את התוכנית Step By Step
מסקנה :הקוד הניגש ל d2-ו d3-מהיר יותר ,כיוון שאין בדיקה לגבי קיומו של אובייקט בזכרון ,אך קוד זה
פחות בטוח
תרגיל – 2התוכנ ית Rect Demo
בדוגמה זו ניצור Classבשם CRect
Class זה יאחסן נתונים אודות אורך ורוחב של מלבן
נוסיף ל Class-שגרות מאפיינים ומתודות לאתחול נתוני המלבן ,חישוב היקף המלבן ושטחו
.1צור פרוייקט חדש מסוג Standard EXEושמור אותו:
הקצה לפרוייקט את השם RectDemoולטופס את השם frmRectDemo
שמור את הפרוייקט
.1הוסף Class Moduleלפרוייקט ושמור אותו:
הוסף לפרוייקט Class Moduleתוך שימוש בתפריט Project
הקצה ל Class-את השם CRectעל ידי שינוי המאפיין Nameשל הClass-
.3הוסף קוד ל:CRect-
Option Explicit
Private m_dLength As Double
Private m_dWidth As Double
בשורות הקוד הללו אנו מצהירים על שני משתנים ,האחד לאחסון אורך המלבן והשני לאחסון רוחב המלבן
משתנים אלו מוצהרים כ Privateולפיכך לא תוכל להתבצע גישה ישירה אליהם
)(Private Sub Class_Initialize
m_dLength = 0#
m_dWidth = 0#
End Sub
באירוע Initializeנהוג לבצע אתחולים של משתנים ואובייקטים השייכים לClass-
)Public Property Let Length(ByVal dLength As Double
"Debug.Print "Inside Property Let Length
If dLength >= 0# Then
m_dLength = dLength
End If
End Property
המאפיין Lengthמאפשר הכנסת ערך למשתנה m_dLength
נעשית בדיקה כדי לוודא שלא מוכנס ערך לא חוקי (מספר שלילי)
במקרה שמוכנס ערך חוקי ,מעודכן ערכו של m_dLengthבהתאם
כמו כן הוספתי שורת קוד המדפיסה לחלון ה Immediateכאשר הביצוע של התוכנית עובר לפרוצדורה זו
Public Property Get Length() As Double
"Debug.Print "Inside Property Get Length
Length = m_dLength
End Property
Property Getמאפשר ללקוח לקרוא את הערך שבLength-
גם באירוע זה נכתוב לחלון ה Immediate-כדי לבחון את התרחשות התוכנית
- 121אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
Public Property Let Width(dWidth As Double)
Debug.Print "Inside Property Let Width"
If dWidth >= 0# Then
m_dWidth = dWidth
End If
End Property
Public Property Get Width() As Double
Debug.Print "Inside Property Get Width"
Width = m_dWidth
End Property
Width באופן דומה יוצרים מאפיינים עבור
Public Function Perimeter() As Double
Perimeter = 2# * (m_dLength + m_dWidth)
End Function
Public Function Surface() As Double
Surface = m_dLength * m_dWidth
End Function
(שטח) מחשבות את היקף ושטח המלבן בהתאמהSurface- (היקף) וPerimeter שתי הפונקציות
:ים לטופס והגדר את המאפיינים הבאים-CommandButton הוסף חמישה
ערך
Rectangle Demo
3- Fixed Dialog
2-CenterScreen
cmdSetNew
Set New
cmdSetLength
Set length
cmdGetLength
Get length
cmdSetWidth
Set width
cmdGetWidth
Get width
מאפיין
Caption
BorderStyle
StartUpPosition
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
- 121 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
אובייקט
fmRectDemo
Command1
Command2
Command3
Command4
Command5
שיעור :1תכנות מונחה עצמים בVisual Basic-
הטופס צריך להיראות כמו בציור הבא:
.1הוסף קוד לטופס:
Option Explicit
Dim rc As CRect
)(Private Sub cmdSetNew_Click
Set rc = New CRect
End Sub
בשורת קוד זו יוצרים את האובייקט בזיכרון
)(Private Sub cmdGetLength_Click
)MsgBox "Length = " & Str(rc.Length
End Sub
)(Private Sub cmdGetWidth_Click
)MsgBox "Width = " & Str(rc.Width
End Sub
)(Private Sub cmdSetLength_Click
))"rc.Length = Val(InputBox("Enter the length:
End Sub
)(Private Sub cmdSetWidth_Click
))"rc.Width = Val(InputBox("Enter the width:
End Sub
ארבעה הפרוצדורות הנ"ל מאתחלות את האובייקט rcומציגות את הערכים
שים לב לנוחות שבשימוש במאפיינים ,אתה יכול להשתמש בסימן = כדי לבצע השמה ,ופרוצדורת המאפיין
תופעל עבורך ,כך שאפשר לרשום rc.Length = 90במקום לרשום )rc.Length(90
.1בחינת התוכנית:
התוכנית הנ"ל מציגה מידע בחלון ה Immediate-כך שאם חלון זה איו מוצג ,בצג אותו על ידי בחירתו
מהתפריט View
הרץ את התוכנית
לחץ על Set Newכדי ליצור אובייקט מסוג CRect
- 121אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
לחץ על Set lengthוהכנס ערך כלשהו .שים לב שבחלון ה Immediate-מוצגת הודעה מתוך
הפרוצדורהProperty Let Length
באותו אופן נסה את שאר הלחצנים והבחן בפלט שבחלון הImmediate-
אני ממליץ בפניך להריץ את התוכנית Step By Stepבמצב ( Break Modeהשתמש ב F8-לשם כך) ,ולעקוב
אחר ביצוע התוכנית
תרגיל – 1התוכנ ית EventDemo
בדוגמה זו ניצור Classשיכלול גם Eventsונשתמש ב Events-הללו מתוך תוכנית הלקוח
תוכנית זו אינה קשה ,אם כי ייתכן שזרימת התוכנית תהיה מוזרה לך מעט .אני ממליץ בפנינך להריץ את התוכנית
Step By Stepכדי לעקוב מקרוב אחר אופן ההתנהלות שלה
.1צור פרוייקט חדש מסוג Standard EXEושמור אותו:
הקצה לפרוייקט את השם EventDemoולטופס את השם frmEventDemo
.1הוסף Class Moduleלפרוייקט ושמור אותו:
הוסף לפרוייקט Class Moduleתוך שימוש בתפריט Project
הקצה ל Class-את השם CPersonעל ידי שינוי המאפיין Nameשל הClass-
.3הוסף קוד ל:CPerson-
Option Explicit
Private m_strName As String
Private m_nAge As Integer
בשורות קוד אלו מוצהרים שני משתנים שאובייקט מסוג CPersonיכיל בתוכו
)(Public Event Changed
)Public Event WillReset(ByRef bCancel As Boolean
שתי השורות הנ"ל מצהירות על שני Eventsשאובייקט מסוג CPersonיכול לעורר
את האירוע Changedנעורר בכל פעם שערכו של אחד מהמשתנים הפנימיים ( m_strNameאו )m_nAge
ישונה
האירוע WillResetיתעורר בכל פעם שנקראת השגרה ( Resetרשמה בהמשך)
תפקיד השגרה Resetהוא לאפס את המשתנים m_strNameוm_nAge-
באירוע WillResetאנו מעבירים משתנה bCancelבאמצעות ייחוס ( )ByRefלפיכך אם המשתמש באובייקט
החליט לבטל את פעולת ה Reset-הוא יוכל פשוט לשנות את ערכו של bCancelל( True-בהמשך כשנכתוב
תוכנית המשתמשת ב CPerson-דבר זה יובהר)
)(Private Sub Class_Initialize
"" = m_strName
m_nAge = 0
End Sub
באירוע Initializeאנו מאפסים את m_nAgeומאתחלים את m_strNameלמחרוזת ריקה
)Public Property Let Name(strName As String
m_strName = strName
RaiseEvent Changed
End Property
- 121אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic- תכנות מונחה עצמים ב:1 שיעור
על ידי שימוש במילת המפתחChange ומיד מעורר את האירועm_strName מאפיין זה משנה את תוכן
RaiseEvent
Public Property Get Name() As String
Name = m_strName
End Property
Public Property Let Age(ByVal nAge As Integer)
If nAge >= 0 Then
m_nAge = nAge
RaiseEvent Changed
End If
End Property
שלילי- בתנאי שהמספר המועבר הוא איm_nAge מאפיין זה משנה את ערכו של
Changed מעוררים את האירוע,לאחר שינוי הערך
Public Property Get Age() As Integer
Age = m_nAge
End Property
Public Sub Reset()
Dim bCnl As Boolean
bCnl = False
RaiseEvent WillReset(bCnl)
If bCnl = False Then
m_strName = ""
m_nAge = 0
RaiseEvent Changed
End If
End Sub
m_nAge- וm_strName הוא לאפס את המשתניםReset תפקיד המתודה
)False- (המאותחל לbCnl ומעבירה את הפרמטרWillReset מעוררת את האירועReset תחילה המתודה
כל שעליו לעשות הוא לשנות את ערכו של,Reset- אם המשתמש שלוכד את האירוע החליט לבטל את פעולת ה
True- לbCnl
אזי מאפסים את,False אם הוא עדיין.bCnl נבחן ערכו של, לאחר שלוכד האירוע סיים את הטיפול באירוע
לאTrue- אם ערכו שונה ל.Changed ומעוררים את האירועm_nAge- וm_strName ערכי המשתנים
מבצעים מאומה
:ים לטופס והגדר את המאפיינים הבאים-CommandButton הוסף שלושה.1
ערך
Event Demo
3- Fixed Dialog
2-CenterScreen
cmdSetAge
Set Age
cmdSetName
מאפיין
Caption
BorderStyle
StartUpPosition
Name
Caption
Name
אובייקט
fmEventDemo
- 121 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Command1
Command2
לתוכניתניםVisual Basic 6
Set Name
cmdReset
Reset
cmdSetWidth
Set width
Caption
Name
Caption
Name
Caption
Command3
Command4
:הטופס צריך להיראות כמו בציור שלפניך
: הוסף קוד לטופס.1
Option Explicit
Dim WithEvents prs As CPerson
CPerson שורת קוד זו מצהירה על משתנה ייחוס לאובייקט מסוג
כדי שהאירועים של האובייקט יילכדו בתוך הטופסWithEvents נעשה שימוש במילה
Private Sub Form_Load()
Set prs = New CPerson
End Sub
ברגע שהטופס נוצר יוצרים את האובייקט
משחררים את האובייקט מהזיכרוןUnload באירוע
prs שלReset קוראים למתודהReset בעת לחיצה על
Private Sub Form_Unload(Cancel As Integer)
Set prs = Nothing
End Sub
Private Sub cmdReset_Click()
prs.Reset
End Sub
Private Sub cmdSetAge_Click()
prs.Age = Val(InputBox("Enter the age"))
End Sub
InputBox- לפי הערך המוזן על ידי המשתמש בAge מאתחלים אתSet Age בתגובה ללחיצה על
Private Sub cmdSetName_Click()
prs.Name = InputBox("Enter the name")
End Sub
InputBox- לפי המחרוזת המוזנת על ידי המשתמש בName מאתחלים אתSetName בתגובה ללחיצה על
Private Sub prs_Changed()
MsgBox "prs has changed. The new values are:" & vbCrLf & _
"Name = " & prs.Name & vbCrLf & _
"Age = " & Trim(Str(prs.Age))
End Sub
- 121 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1תכנות מונחה עצמים בVisual Basic-
אירוע זה מתעורר ( )Firedעל-ידי prsבכל פעם שערך מסוים בתוך האובייקט שונה .בנקודה זו אנו מציגים
באמצעות Message Boxאת הערכים העדכניים את prs
)Private Sub prs_WillReset(bCancel As Boolean
If MsgBox("Do you want to cancel the reset?", vbYesNo) = vbYes Then
bCancel = True
End If
End Sub
אירוע זה מתעורר על ידי prsבכל פעם שמנסים לאפס את .prsבנקודה זו אנו מציגים הודעה המאפשרת
למשתמש להחליט האם לבטל את פעולת האיפוס או לא
.1בחינת התוכנית:
הרץ את התוכנית ובחן את פעולתה
כאמור ,אני ממליץ בפניך להריץ את התוכנית Step By Stepבאמצעות F8כדי לבצע מעקב מדויק אחר
זרימת התוכנית
מימוש Interface
Interfaceהוא החלק הציבורי ( )Publicשל Classמסוים – כלומר החלק הנגיש של המחלקה
ב COM-נהוג לכתוב ממשקים באמצעות שפת )Interface Definition Language( IDLולקמפל את הקוד
באמצעות הקומפיילר MIDL
אם אתה מכיר את שפת IDLתוכל להשתמש בה כדי ליצור ממשקים ולממש אותם בכל שפה שתרצה (בתנאי
ששפה זו תומכת COMכמובן)
ב Visual Basic-נוכל ליצור -Interfaceים פשוט על ידי יצירת Classללא משתנים וללא מימושים כלשהם
לפונקציות .למעשה לכל Classב Visual Basic-יש ממשק משלו
Classהמעונין לממש Interfaceצריך להשתמש במילה Implements
מימוש Classים הנו מימוש ה-Interface-ים של אותם -Classים
Classהמממש Interfaceחייב לממש את כל המתודות והמאפיינים שלו
אם לא תממש פרוצדורה מסוימת של Interfaceתקבל שגיאת קומפילציה
אם הצהרת על משתנים Publicב Class-שאת ה Interface-שלו אתה מממש ב Class-אחר ,תקבל עבור כל
משתנה כזה פרוצדורות Property GetוProperty Let-
באמצעות מימוש -Interfaceים ניתן ליצור היררכיה של -Classים וכן ליצור רכיבי תוכנה שיתאימו לתוכנה מוכנה
מצד שלישי
כאשר אובייקט מממש מספר -Interfaceים ,ניתן להשתמש במשתני ייחוס מכל סוגי ה-Interface-ים הממומשים
כדי להתייחס לאובייקט
בשיעור הבא תלמד כיצד ליצור Add-Inל Visual Basic-על ידי מימוש ממשק מתאים
אבחון תכו נות אובייקט בזמן ריצה
ניתן לבדוק אם אובייקט תומך ב Interface-מסוים ע"י שימוש במילה :TypeOf...Is
ניתן לבדוק מהו סוג האובייקט המוצבע בפועל על ידי שימוש בפונקציה .TypeNameפונקציה זו מחזירה מחרוזת
הזהה לשם ה Class-שאליו שייך האובייקט (הכוונה כאן היא לאובייקט המוצבע בפועל ולא לסוג המצביע)
ניתן לבדוק האם אובייקט אותחל או שהוא שווה ל Nothing-ע"י שימוש במילים ....Is Nothing...
- 112אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
דוגמאות
If TypeOf shape is IArchive Then
...
End If
בשורות קוד אלו נבדק האם objמממש את ה Interface-ששמו ,IArchiveאם כן נכנסים לתוך בלוק הביצוע של
הIf-
)MsgBox TypeName(obj
שורת קוד זו מציגה את שם המחלקה אליה שייך האובייקט המוצבע ע"י obj
If obj Is Nothing Then Exit Sub
שורת קוד זו גורמת ליציאה מרוטינה אם objאינו מאותחל (כלומר הוא )Nothing
שים לב שכדי לשלול את התנאי עליך לרשום Notבתחילת התנאי .כלומר:
If Not TypeOf shape is IArchive Then...
וכן:
If Not obj Is Nothing Then Exit Sub
תרגיל – 4התוכנ ית ImplementsDemo
בדוגמה זו ניצור Classעם מספר פרוצדורות בעלות מימוש ריק כלומר ,Interfaceונממש אותו ב Class-אחר
.1צו פרוייקט חדש מסוג Standard EXEושמור אותו:
הקצה לפרוייקט את השם ImplementsDemoולטופס את השם frmImplementsDemo
שמור את הפרוייקט
.1הוסף שלושה -Class Moduleים לפרוייקט ושמור אותם:
הקצה ל-Class-ים את השמות CCircle ,IShape :וCRect-
שמור את ה-Class Module-ים
.3הוסף קוד ל:IShape-
Option Explicit
Public Function Perimeter() As Double
' Empty inside interface
End Function
Public Function Surface() As Double
' Empty inside interface
End Function
בשורות קוד אלו מוצהרות שתי פונקציות Perimeter ,וSurface-
שים לב כי אין מימוש לפונקציות (בתוך כל פונקציה רשומה הערה!)
.1הוסף קוד ל:CCircle-
Option Explicit
Implements IShape
בשורת הקוד הזו אנו מבקשים לממש את ה Interface-של IShape
תשים לב כי ב Combo Box-השמאלי שבחלון הקוד ( )Objectמופיע כעת IShape
Public m_dRadius As Double
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic- תכנות מונחה עצמים ב:1 שיעור
בשורת קוד זו מצהירים על משתנה שיאחסן את רדיוס המעגל
וליצורPrivate- אך ברור לך שכדאי להצהיר עליו כPublic-שים לב כי לצורך ההדגמה המשתנה מוצהר כ
מתאימותProperty Let- וProperty Get עבורו פרוצדורות
Private Function IShape_Perimeter() As Double
IShape_Perimeter = 2 * 3.14 * m_dRadius
End Function
P 2r הוא כמובןCircle עבורPerimeter המימוש של
Private Function IShape_Surface() As Double
IShape_Surface = 3.14 * m_dRadius * m_dRadius
End Function
S r 2 הואCircle עבורSurface המימוש של
:CRect- הוסף קוד ל.1
Option Explicit
Implements IShape
Public m_dLength As Double
Public m_dWidth As Double
Private Function IShape_Perimeter() As Double
IShape_Perimeter = 2 * (m_dLength + m_dWidth)
End Function
Private Function IShape_Surface() As Double
IShape_Surface = m_dLength * m_dWidth
End Function
תוך ביצוע החישובים המתאימים למלבן,IShape שלInterface- ממומש הCRect- גם בCCircle- כמו ב
: והגדר את המאפיינים הבאים, אחדTextBoxים ו-CommandButton הוסף לטופס חמישה
ערך
Implements Demo
3- Fixed Dialog
2-CenterScreen
cmdSetCircle
Set Circle Radius...
cmdSetShapeIsCircle
Set shape = c
cmdSetRectangleValues
Set Rectangle Values...
cmdSetShapeIsRect
Set shape = r
cmdDisplayInfo
Display Info...
txtInfo
מאפיין
Caption
BorderStyle
StartUpPosition
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
אובייקט
frmImplementsDemo
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Command1
Command2
Command3
Command4
Command5
Text1
לתוכניתניםVisual Basic 6
][ריק
True
Text
MultiLine
:הטופס אמור להיראות כמו בציור שלפניך
:הוסף קוד לטופס
Option Explicit
Dim c As New CCircle
Dim r As New CRect
Dim shape As IShape
IShape- ומשתנה ייחוס לCCircle אובייקט מסוג,CRect השורות הנ"ל מצהירות על אובייקט מסוג
Private Sub cmdSetCircle_Click()
c.m_dRadius = Val(InputBox("Enter the radius of the circle:"))
End Sub
Private Sub cmdSetRectangleValues_Click()
r.m_dLength = Val(InputBox("Enter the length of the recangle:"))
r.m_dWidth = Val(InputBox("Enter the width of the rectangle:"))
End Sub
r והמלבןc שורות הקוד הנ"ל מאפשרות אתחול של המעגל
Private Sub cmdSetShapeIsCircle_Click()
Set shape = c
End Sub
Private Sub cmdSetShapeIsRect_Click()
- 113 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1תכנות מונחה עצמים בVisual Basic-
Set shape = r
End Sub
בשורות הקוד הללו קובעים לאיזה מבין הצורות ( cאו )rיצביע המשתנה shape
שים לב כי אין כל בעיה ש shape-יצביע על אובייקט מסוג CCircleאו מסוג CRectכיוון שאובייקטים אלו
ממשים את IShape
עם זאת – shapeלא יוכל להפעיל פונקציות שאינן שייכות ל( IShape-נדון בכך בסעיף הבא "Early Binding
לעומת )"Late Binding
)(Private Sub cmdDisplayInfo_Click
If shape Is Nothing Then Exit Sub
txtInfo.Text = TypeName(shape) & "..." & vbCrLf
_ & )" " txtInfo.Text = txtInfo.Text & String(8,
"Perimeter = " & Str(shape.Perimeter()) & vbCrLf
_ & )" " txtInfo.Text = txtInfo.Text & String(8,
"Surface = " & Str(shape.Surface()) & vbCrLf
End Sub
בתגובה ללחיצה על Display Info...מתבצעות שורות הקוד הנ"ל
תחילה נבדק שהמשתנה shapeמאותחל .אם shapeאינו מאותחל יוצאים מהרוטינה
לאחר מכן מציגים את שם סוג האובייקט המוצבע ע"י .shapeעושים זאת באמצעות הפונקציה TypeName
מוסיפים קריאות ל Perimeter-ו Surface-כדי להציג את היקף ושטח הצורה
.1בחינת התוכנית:
הרץ את התוכנית ובדוק את אופן פעולתה
Early Bindingלעומת Late Binding
Early Bindingפירושו קישור הקריאות למתודות ומאפיינים של אובייקט עוד בזמן הקימפול .כלומר בEarly -
Bindingעוד במן הקימפול ידוע לקומפיילר מהן הכתובות הפיסיות של המתודות הנקראות
קישור מסוג זה קרוי VTBL Bindingוהוא המהיר ביותר בCOM-
בדרך כלל אתה משתמש בסוג זה של קישור בתוכניות Visual Basic
Late Bindingהיא האפשרות לגשת למאפיין או מתודה של אובייקט שאין וודאות בזמן הפיתוח שהם נתמכים
ע"י האובייקט .משמעות הדבר היא שבזמן ריצת התוכנית יהיה על התוכנית לגלות אם באותו אובייקט קיימת
המתודה או קיים המאפיין שאליו רוצים לגשת
פונקציונליות זו אפשרית על ידי שימוש בממשק IDispatchמ COM-או ע"י שימוש ב Type Library-וזיהויו בזמן
ריצה
ב Visual Basic-כל האובייקטים מממשים את ה Interfaceששמו Object
Objectהוא למעשה הממשק IDispatchהמאפשר Late BindingבVisual Basic-
Late Bindingהרבה יותר גמיש מבחינת אפשרויות התכנות מאשר .Early Bindingעם זאתLate Binding ,
איטי ביותר ביחס לEarly Binding-
בעת קריאה למתודה או מאפיין בזמן ריצה תוך שימוש ב Object-מתבצעות מספר הכנות לפני שהפונקציה
מופעלת .פעולות אלה בודקות את קיומה של המתודה או קיומו של המאפיין הנקרא .ניקח לדוגמה את המשפטים:
Dim obj As Object
...
...
)obj.SetValues("Today is your day", 57
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
שלבי הביצוע הם:
oהכנת כל המחרוזות הטקסטואליות שיש לזהות :במקרה זה המחרוזת שיש לזהות היא – SetValues
כלומר יש לבדוק האם האובייקט שאליו מצביע objאכן כולל פונקציה כזו
oקריאה ל .IDispatch::GetIDsOfNames()-קריאה זו מטרתה לאחזר את מספרי הזיהוי ( )DISPIDsשל
שם המתודה והפרמטרים שיש להעביר לה :במקרה שלנו יוחזרו מספרי זיהוי עבור השם SetValues
ועבור הפרמטרים שיש להעביר לה
oכל מספרי הזיהוי ( )DISPIDsיוחזרו
oקריאה ל .IDispatch::Invoke()-קריאה זו מטרתה להפעיל (סוף סוף) את המתודה לאחר שזיהינו שאכן
היא נתמכת ,וכל הפרמטרים שלה הוכנו.
oהערך המוחזר של הפונקציה ( )HRESULTמוחזר מ IDispatch::Invoke()-לקוד הקורא
תחשוב על כך שהפעולות הללו מתבצעות עבור כל קריאה למתודה ,כאשר היא מתבצעת באמצעות .IDispatch
ללא ספק זוהי תקורה ( )Overheadגבוהה למדי עבור קריאה בודדת .תחשוב מה כמה זמן היית ממתין לתשובה לו
הקטע הנ"ל היה מתבצע בין שני -Processים נפרדים או בין שני מחשבים ברחבי הרשת
בדוגמה הבאה תבחן במושגים של זמן את ההבדלים בין Late BindingלEarly Binding-
תרגיל – 3התוכנ ית Analyzer
.1צו פרוייקט חדש מסוג Standard EXEושמור אותו:
הקצה לפרוייקט את השם Analyzerולטופס את השם frmAnalyzer
שמור את הפרוייקט
.1הוסף Class Moduleלפרוייקט:
הקצה את השם CTestלClass Module-
שמור את הפרוייקט שוב
הוסף קוד ל:CTest-
Option Explicit
Private m_lVal As Long
)Public Property Let Val(lVal As Long
m_lVal = lVal
End Property
זוהי מחלקה פשוטה עם מאפיין אחד המאפשר להזין ערך למשתנה Val
.3הוסף לטופס שלושה -CommandButtonים ו TextBox-אחד והגדר את המאפיינים הבאים:
אובייקט
frmAnalyzer
Command1
Command2
Command3
Text1
מאפיין
Caption
BorderStyle
StartUpPosition
Name
Caption
Name
Caption
Name
Caption
Name
ערך
Late Binding VS. Early Binding
3- Fixed Dialog
2-CenterScreen
cmdSetNew
Set ... = New
cmdUseObject
Dim ... As Object
cmdStop
!I got it - STOP
txtTimer
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1תכנות מונחה עצמים בVisual Basic-
Background
Locked
Text
MultiLine
Button Face
True
[ריק]
True
הטופס אמור להיראות כמו בציור שלפניך:
הוסף קוד לטופס:
Option Explicit
)(Private Sub cmdSetNew_Click
Dim cls As CTest
Dim lVal As Long, i As Integer
Dim sTime As Single
Set cls = New CTest
sTime = Timer
For i = 1 To 1000
_ & txtTimer.Text = "As CTest... " & vbCrLf
_ & "i = " & Str(i) & vbCrLf
""Time elapsed:" & Str(Timer - sTime) & " sec
DoEvents
For lVal = 1 To 10000
cls.Val = lVal
Next
Next
End Sub
בקטע קוד זה מריצים שתי לולאות מקוננות
בתוך הלולאה הפנימית ניגשים למאפיין של האובייקט cls
לפני הכניסה ללולאה החיצונית נמדד הזמן ולפני כל איטרציה של הלולאה הפנימית מוצג ההפרש בשניות מאז
הכניסה ללולאה החיצונית
בפעולת ההדפסה מציגים את שם האובייקט באמצעות TypeName
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
)(Private Sub cmdUseObject_Click
Dim cls As Object
Dim lVal As Long, i As Integer
Dim sTime As Single
Set cls = New CTest
sTime = Timer
For i = 1 To 1000
_ & txtTimer.Text = "As Object..." & vbCrLf
_ & "i = " & Str(i) & vbCrLf
""Time elapsed:" & Str(Timer - sTime) & " sec
DoEvents
For lVal = 1 To 10000
cls.Val = lVal
Next
Next
End Sub
קטע קוד זה זהה לקודם ,אלא שכאן מוצהר האובייקט כObject-
במקרה זה מופעלת הגישה למאפיין Valבאמצעות Late Binding
)(Private Sub cmdStop_Click
Unload Me
End Sub
)Private Sub Form_Unload(Cancel As Integer
End
End Sub
.1בחינת התוכנית:
הרץ את התוכנית ןהשווה את הביצועים של Early Bindingלעומת Late Binding
תסכים איתי שהתוצאות מרשימות .אצלי במחשב ( )Pentium III 733MHrzהשימוש בEarly Binding-
(שימוש במשתנה ייחוס מסוג )CTestהסתכם ב 4.41-שניות ,ואילו הפעלה באמצעות ( Late Bindingשימוש
במשתנה ייחוס מסוג )Objectהסתכם ב 77.21-שניות.
הגדרת תכונות של פרוצדורות
בINTREFCAE-
בעת יצירת Classב Visual Basic-נוצר עבורו באופן אוטומטי Interface
לפרוצדורות ב Interface-ישנן הגדרות ותכונות נוספות
הגדרה מותאמת אישית של תכונות אובייקטים ב Visual Basic-מהווה לעתים תכופות מטלה שחובה לבצע אותה
על מנת לגרום לאובייקט לפעול בצורה תקינה
בסעיף זה תלמד כיצד ניתן לצפות בתכונות ה ,Interface-וכיצד ניתן להגדיר את התכונות הללו בVisual Basic-
חלק מהתכונות יילמדו בשיעורים הבאים
צפייה בתכו נות באמצעות Object Browser
כדי לצפות בפרוצדורות והתכונות שלהן ניתן להשתמש בObject Browser-
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1תכנות מונחה עצמים בVisual Basic-
תרגיל – 6צפי יה באובייקטים באמצעות ה Object Browser -
תרגיל זה נטול קוד .מטרת התרגיל היא להכיר לך את חלון הObject Browser-
.1פתח את ה:Object Browser-
מתוך התפריט Viewבחר ב ,Object Browser-לחילופין לחץ על F2
.1בחר אובייקט לבחינה:
לצורך התרגול (וגם בגלל שהנושא הבא הוא )Collectionsנבחר לצפות באובייקט Collection
מתוך הרשימה Classesבחר ב( Collection-אם אינך מוצא את ,Collectionוודא שב Combo Box-העליון
בחרת ב <All Libraries>-או בVBA-
.3בחן את :Collection
כפי שאתה רוצה ,בפנל הימני מוצגים המאפיינים והמתודות של Collection
סמן את אחת הפרוצדורות ,תבחין מיד כי בתחתית החלון מוצגת אינפורמציה אודות הפרוצדורה הנבחרת.
אינפורמציה זו כוללת את סוג הפרוצדורה ( Property ,Function ,Subאו )Eventהסבר קצר ,ולינק לClass-
המכיל (במקרה זה )VBA.Collection
.1זהה את פרוצדורת ברירת המחדל:
תשים לב כי ליד Itemישנו עיגול כחול .זהו סימן לכך שהפונקציה Itemהיא פרוצדורת ברירת המחדל עבור
Collection
פרוצדורת ברירת מחדל מופעלת באופן אוטומטי אם לא ציינת במפורש שום פרוצדורה להפעלה
הצג פרוצדורות נסתרות:
לחץ לחיצה ימנית במקום כלשהו ובחר בShow Hidden Members-
תבחין כי לרשימת הפרוצדורות של Collectionנוסף חבר חדש ושמו _NewEnum
על משמעות _NewEnumתלמד בסעיף Collections
צפייה באמצעות היישום OLE VIEW
לא כל התכונות של פרוצדורה מוצגות בObject Browser-
כדי לצפות בכל הפרטים אודות Interfaceמסוים ,אפשר להשתמש ביישום .OLE Viewיישום זה מותקן יחד עם
חבילת .Visual Studioתוכל לפתוח אותו מתוך תת התפריט Microsoft Visual Studio 6.0 Toolsתחת
Microsoft Visual Studio6.0
תרגיל OLE View – 7לבעלי לב ח זק בלבד
אם אתה בעל לב חזק ,בטח תרצה לבחון את Collectionגם מתוך OLE View
.1פתח את :OLE View
OLE View נמצא במסלול הבא (אלא אם התקנת את Visual Studioבמסלול שונה מאשר ברירת המחדל):
OLE View >--Microsoft Visual Studio 6.0 Tools >--Microsoft Visual Studio 6.0 >--Programs>--Start
.1פתח את ה:Type Library-
מהתפריט Fileבחר בView TypeLib...-
עבור לספריית VB98תחת ספריית ההתקנה של ( Visual Studioבררך כלל זהו המסלול:
\)C:\Program Files\Microsoft Visual Studio\VB98
בחר בקובץ .VBA6.DLLהאובייקט Collectionנמצא בספריית .VBA
OLE View ישתהה מעט בזמן שהוא קורא את נתוני הספרייה
.3בחר ב Interface-של האובייקט :Collection
בתחתית הפנל השמאלי לחץ על לחצן הפלוס ( )+שליד הפריט interface _Collection
תוכל להבחין שהמתודות Remove ,Count ,Add ,Itemו _NewItem-מופיעות
מעיון בפרוצדורות תבחין כי לכל פרוצדורה יש מספר זיהוי ( )idהרשום בהגדרת הInterface-
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
אם תעיין במתודה _NewEnumתבחין בכך שמספר הזיהוי שלה הוא -4( 0xfffffffcבהקצהדצימלית) פרט
זה ישמש אותנו כשניצור Collectionמותאם אישית
.1עיין ב-Interface-ים ממומשים על-ידי :Collection
כפי שזכור לך מהדיון על Reference Countingועל ,Late Bindingאמרתי אז ש IUnknown-הוא
ה Interface-הבסיסי ביותר ב COM-ואילו IDispatchמאפשר Late Bindingעבור רכיבי ActiveX
אם תלחץ על Inherited Interfacesתחת הענף הנוכחי ,תגלה את IDispatchחבוי עם המתודות המוכרות לנו
מהדיון אודות Invoke ,GetIdsOfNames( Late Bindingועוד).
אם תלחץ שוב על Inherited Interfacesשתחת IDispatchתגלה את IUnknownעם שלוש המתודות שלו
( AddRef ,Query Interfaceו .)Release-ואכן זהו ה Interface-הבסיסי ביותר IUnknown .אינו נורש מאף
Interfaceאחר
.1אם אתה מרגיש שאתה צריך קפה – זה הזמן!
הגדרת תכונות
עד כה ראינו איפה צופים בתכונות של Interface
תכונות פרוצדורה של מחלקה נקבעים בשני מקומות חשובים:
oהגדרת הפרוצדורה כפי שמופיעה בקוד קובעת:
מהו סוג הפרוצדורה ( Property Let ,Property Get ,Function ,Subאו )Event
מהם הפרמטרים המועברים לפרוצדורה (אם בכלל)
מהו הערך המוחזר מהפונקציה
oתיבת הדו שיח ה:Procedure Attributes-
תיבת הדו שיח ה Procedure Attributes-נמצאת תחת התפריט Tools
תיבת דו שיח זו מאפשרת לשלוט במאפיינים רבים שאת חלקם נסקור רק בשיעורים הבאים
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1תכנות מונחה עצמים בVisual Basic-
o
o
:Name שם הפרוצדורה
:Description תיאור קצר של הפרוצדורה
:Project Help שם קובץ העזרה של הפרוייקט (ניתן להגדרה מתוך חלון הProject -
)Properties
:Help Context ID מגדיר את מספר הקשר העזרה בתוך קובץ העזרה
( :Procedure ID מזהה שגרה) :לכל שגרה ב Interface-יש מספר זיהוי .מספר זה משפיע על
אופן התנהגות השגרה
:Use This Page In Property Browser מגדיר את הדף שייפתח מבין דפי המאפיינים עבור
מאפיין זה
:Property Category הקטגוריה אליה שייכת הפרוצדורה (שים לב כי בחלון המאפיינים יש
אפשרות להציג מאפיינים לפי קטגוריות)
:Hide This Member מסתיר את הפרוצדורה ממשתמשי המחלקה
:Don't Show In Property Browser לא מציג את המאפיין בחלון המאפיינים
:User Interface Default האם הפרוצדורה תהיה פרוצדורת ברירת המחדל בחלון המאפיינים
:Data Binding האם הפרוצדורה יכולה להיות קשורה לנתונים חיצוניים .נושא זה יידון
בהמשך הקורס
בהמשך שיעור זה תשתמש בתיבת דו שיח זו כדי להגדיר ( Procedure IDמזהה שגרה) עבור פרוצדורה
שתכתוב
ביתר ההגדרות שצויינו נשתמש בשיעורים הבאים
( COLLECTIONSאוספים)
Collectionהוא מבנה נתונים דינמי
Collectionהוא Classמוכן של ,Visual Basicכלומר ,מבנה שניתן להוסיף ולהסיר ממנו פריטים במהלך ריצת
התוכנית
לפריטים באוסף יש אינדקסים הרצים מ 1-עד ( Countכאשר Countהוא גודל ה)Collection-
פריטים הנוספים ל Collection-הם מסוג ,Objectלפיכך ניתן להוסיף ל Collection-את כל סוגי האובייקטים,
כיוון שכולם נגזרים מObject-
אם אתה מוסיף אובייקטים מסוגים שונים ל Collection-תוכל להשתמש בזיהוי סוג האובייקט בזמן ריצה כדי
לבצע פעולות האופייניות רק לסוג מסוים
ניתן לבצע סריקה על אובייקטים ב Collection-בשתי צורות:
oלולאת Forרגילה הרצה מ 1-עד Count
oלולאת .For Each...In...Nextסוג זה של לולאה נוסף לשפה כדי להקל את העבודה עם אוספים
תחביר
תחביר ההצהרה על Collectionהוא:
Dim coll As New Collection
oאפשר להצהיר ללא המילה Newואז ליצור את ה Collection-מאוחר יותר
ל Collection-יש את המאפיינים והמתודות הבאות:
:Add oמוסיף פריט ל.Collection-
תחביר:
)]coll.Add (Item, [Key], [Before], [After
:Itemזהו הפריט שיש להוסיף לCollection-
- 112אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
o
:Key מחרוזת ייחודית שניתן להצמיד לפריט .מאוחר יותר ניתן יהיה לאתר את הפריט
באמצעות מחרוזת זו
:Before מוסיף את הפריט לפני הפריט שהאינדקס שלו או המפתח ( )Keyשלו מצוין ב.Before-
לא ניתן לציין Beforeיחד עם After
:After מוסיף את הפריט אחרי הפריט שהאינדקס שלו אן המפתח ( )Keyשלו מצוין ב.After-
לא ניתן להשתמש ב After-יחד עם Before
:Removeמסיר פריט מה:Collection-
תחביר:
)coll.Remove (Index
:Index מציין את האינדקס או המפתח ( )Keyשל הפריט שיש להסיר
:Itemמחזיר מצביע לפריט מסויים בCollection-
תחביר:
)coll.Item (Index
:Indexמציין את האינדקס או המפתח ( )Keyשל הפריט שיש להחזיר
Itemהוא מאפיין ברירת המחדל .לפיכך ניתן לפנות לפריט גם באופן הבא:
)coll(Index
o
:Countמחזיר את מספר הפריטים בCollection-
תחביר:
coll.Count
הלולאה For each ..In .. Next
לולאה זו מיועדת לסריקת אובייקטים מתוך אוסף
תחביר הלולאה הוא כדלקמן:
בכל איטרציה של הלולאה objמתייחס לאובייקט הנוכחי בColl-
For Each obj In Coll
obj.Method1...
obj.Method2...
Next
תרגיל – 1התוכנ ית ShapeColl1
התוכנית ShapeColl1תאפשר למשתמש להוסחף מלבנים או עיגולים
האובייקטים שייוצרו יצורפו ל Collection-שיוצהר לשם כך
לחיצה על List Itemsתציג את כל הפריטים הנמצאים באוסף
סריקת האוסף נעשית באמצעות הלולאה For Each ... In ... Next
.1צו פרוייקט חדש מסוג Standard EXEושמור אותו:
הקצה לפרוייקט את השם ShapeColl1ולטופס את השם frmTest
שמור את הפרוייקט
.1הוסף שני -Class Moduleים לפרוייקט:
הקצה את השמות CCircleו CRect-למחלקות
שמור את הפרוייקט שוב
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic- תכנות מונחה עצמים ב:1 שיעור
:CCircle- הוסף את הקוד הבא ל.3
Option Explicit
Private Const PI As Double = 3.14
Private m_dRadius As Double
Public Property Get Radius() As Double
Radius = m_dRadius
End Property
Public Property Let Radius(dRad As Double)
If dRad >= 0 Then m_dRadius = dRad
End Property
Public Function Surface() As Double
Surface = PI * m_dRadius * m_dRadius
End Function
Public Function Perimeter() As Double
Perimeter = 2 * PI * m_dRadius
End Function
:CRect- הוסף את הקוד הבא ל.1
Option Explicit
Private m_dLength As Double
Private m_dWidth As Double
Public Property Get Length() As Double
Length = m_dLength
End Property
Public Property Let Length(dLen As Double)
If dLen >= 0 Then m_dLength = dLen
End Property
Public Property Get Width() As Double
Width = m_dWidth
End Property
Public Property Let Width(dWid As Double)
If dWid >= 0 Then m_dWidth = dWid
End Property
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
Public Function Surface() As Double
Surface = m_dLength * m_dWidth
End Function
Public Function Perimeter() As Double
Perimeter = 2 * (m_dLength + m_dWidth)
End Function
: אחד והגדר את המאפיינים הבאיםTextBox-ים ו-CommandButon הוסף ארבעה
ערך
Shape Collection Demo 1
3- Fixed Dialog
2-CenterScreen
cmdAddRect
Add Rectangle
cmdAddCircle
Add Circle
cmdListItemsMethod1
List items - Method 1
cmdListItemsMethod2
List items - Method 2
txtColl
ButtonFace
True
][ריק
True
מאפיין
Caption
BorderStyle
StartUpPosition
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Background
Locked
Text
MultiLine
אובייקט
frmTest
Command1
Command2
Command3
Command4
Text1
: הוסף את הקוד הבא לטופס.1
Option Explicit
Public shpColl As Collection
shpColl בשםCollection-בשורת קוד זו מוצהר מצביע ל
Private Sub Form_Load()
Set shpColl = New Collection
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set shpColl = Nothing
End Sub
עםCollection- ומשחרר את ההתיחסות ל, חדש עם טעינת הטופסCollection הקוד הנ"ל יוצר אובייקט
התפרקות הטופס
- 113 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic- תכנות מונחה עצמים ב:1 שיעור
Private Sub cmdAddCircle_Click()
Dim cr As CCircle
Set cr = New CCircle
cr.Radius = Val(InputBox("Enter the radius for the circle:"))
shpColl.Add cr
Set cr = Nothing
End Sub
Private Sub cmdAddRect_Click()
Dim rc As CRect
Set rc = New CRect
rc.Length = Val(InputBox("Enter the length of the rectangle:"))
rc.Width = Val(InputBox("Enter the width of the rectangle:"))
shpColl.Add rc
Set rc = Nothing
End Sub
בהתאם ללחיצה של המשתמש,בשורות הקוד הנ"ל יוצרים עיגול או מלבן
InputBox מאתחלים את האובייקט שנוצר על ידי שימוש בפונקציה
shpColl-מוסיפים את האובייקט ל
Private Sub cmdListItemsMethod1_Click()
Dim obj As Object
txtColl.Text = ""
On Error Resume Next
For Each obj In shpColl
txtColl.Text = txtColl.Text & TypeName(obj) & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Length = " & obj.Length & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Width = " & obj.Width & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Radius = " & obj.Radius & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Surface = " & obj.Surface & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Perimeter = " & obj.Perimeter & vbCrLf
Next
End Sub
shpColl-בשורות קוד אלו מבצעים סריקה של האובייקטים ב
Surface ,Radius ,Width ,Length עבור כל אובייקט מציגים (יותר מדוייק להגיד "מנסים להציג") את
Perimeter-ו
אין את המאפייניםCCircle ולאובייקטים מסוג,Radius אין את המאפייןCRect כיוון שלאובייקטים מסוג
כדי להעביר את הביצוע לשורה הבאה אם מתרחשתOn Error Resume Next- קוראים ל,Width- וLength
שגיאה
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
Late Binding ביצועי, וכפי שראית בתרגיל הקודם, כדי להציג פרטיםLate Binding-שיטה זו משתמשת ב
! צורות10000 חשוב כמה זמן היתה נמשכת פעולת הצגת הפרטים אם נניח שהאוסף מכיל.הם גרועים
Private Sub cmdListItemsMethod2_Click()
Dim obj As Object
Dim rc As CRect
Dim cr As CCircle
txtColl.Text = ""
On Error Resume Next
For Each obj In shpColl
If TypeOf obj Is CRect Then
Set rc = obj
txtColl.Text = txtColl.Text & "CRect" & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Length = " & rc.Length & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Width = " & rc.Width & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Surface = " & rc.Surface & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Perimeter = " & rc.Perimeter & vbCrLf
Else
Set cr = obj
txtColl.Text = txtColl.Text & "CCircle" & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Radius = " & cr.Radius & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Surface = " & rc.Surface & vbCrLf
txtColl.Text = txtColl.Text & String(8, " ") & _
"Perimeter = " & rc.Perimeter & vbCrLf
End If
Next
End Sub
shpColl- גם כאן מבצעים סריקה על האובייקטים ב
או מסוגCRect כאן נבחן סוג האובייקט ולאחר מכן הוא מושם למשתנה מסוג, לעומת השיטה הקודמת
שלהם וכתוצאה מקבלים ביצועיםType Library- הגישה לאובייקטים נעשית דרך ה, כיוון שכך.CCircle
.הרבה יותר טובים
: בחינת התוכנית.1
הרץ את התוכנית ובדוק את פעולתה
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1תכנות מונחה עצמים בVisual Basic-
מחלקות Collectionמותאמות אישית
כפי שראית Collection ,מקבל את הסוג Object
ניתן ליצור מחלקות אוסף מותאמות ,כך שמחלקות אלו יקבלו נתונים מסוג מסוים או מנגזרותיו
היתרון ב Collection-מותאם אישית הוא בכך שהאובייקטים המוחזרים ממנו הם מסוג מסוים ,לפיכך ניתן
להשתמש בEarly Binding-
משתמשים ב-Collection-ים גם כדי ליצור היררכית עצמים
היררכית ( ADOשתכיר בהמשך הקורס) היא דוגמה לצירוף של -Classים ו-Collection-ים היוצרים היררכיה
אחת
בתרגיל הבא תיצור .Collectionמשלך ,בכל מקרה דע שתוכל להשתמש ב( VB Class Builder-אתה מציג אותו
ע"י בחירת Add Class Moduleמתפריט )Projectכדי ליצור היררכת עצמים ואוספים
שים לב שבאוספים הנוצרים ע"י VB Class Builderהמתודה Addיוצרת את האובייקטים .בתרגיל שלפנינו
המתודה Addמקבלת את האובייקט בדיוק כמו ב Collection-רגיל
הוללאה For Each...In...Nextהמוכרת לך ,פועלת על Collectionכיוון שהם ממשים פונקציה בשם _NewEnum
(כפי שראית כשצפינו ב Collection-ב)Object Browser-
המתודה NewEnumמאפשרת ללולאה לאתר רשומות ב .Collection-למעשה Enumeratorעוקב אחר המיקום
של הלולאה בCollection-
כדי שהלולאה For Each...In...Nextתפעל ב Collection-שלך ,עליך להוסיף פונקציה דומה
כפי שראינו ב ,OLE View-ה id-של המתודה _NewEnumהוא . 4לפיכך ,גם למתודה שאתה תכתוב הid-
חייב להיות . 4תוכל להגדיר זאת באמצעות תיבת הדו-שיח ( Procedure Attributesתוכל להבין מכך שהשם
שתיתן לפונקציה שלך הוא לא חשוב ,מה שחשוב הוא שמספר הזיהוי שלה יהיה ) 4
כיוון שלא ניתן לכתוב Collectionיעילים ב ,Visual Bsic-משתמשים בטכניקה הנקראת Object Containment
and Delegationכדי ליצור Collectionsמשלנו:
:Containment oפירושה הכלה .ובאופן יותר מעשי ,האובייקט שאנו יוצרים מכיל אובייקט אחר
:Delegation oפירושה האצלה .כלומר ,בעת קריאה לפונקציה של האובייקט שאנו יוצרים ,אנו מעבירים
את הביצוע (העבודה השחורה) לאובייקט הפנימי
בתרגיל הבא נשתמש בעקרון הנ"ל כדי ליצור Collectionמשלנו לפי השלבים הבאים:
oצור מחלקה והצהר על משתנה Collectionפרטי למחלקה
oהוסף למחלקה פרוצדורות Count ,Item ,Remove ,AddוNewEnum-
oכדי לאפשר ללולאה For Each ... In ... Nextעליך להוסיף מתודה בשם ( NewEnumתוכל לתת לה גם
שם אחר ,אך עדיף לתת לה שם זה)
oממש את הפרוצדורות של המחלקה שלך ,ע"י קריאה לפרוצדורה המקבילה ב Collection-שבתוך
המחלקה
oמימוש NewEnumיפעיל את הפונקציה _NewEnumב Collection-הפנימי במחלקה
oמתוך תיבת הדו שיח Procedure Attributesהגדר את מספר הזיהוי של המתודה NewEnumלמספר –4
והגדר את הפונקציה ItemכDefault-
תרגיל – 1התוכנ ית ShapeColl2
בתוכנית הבאה תיצור היררכיה שלושה -Classים רגילים CRect ,IShape :ו ,CCircle-כאשר CRectוCCircle-
ממשים את הממשק של IShape
תיצור גם Collectionהמקבל את הסוג IShapeולפיכך גם תומך ב CRect-וCCircle-
.1צור פרוייקט חדש מסוג Standard EXEושמור אותו:
הקצה לפרוייקט את השם SahpeColl2ולטופס את השם frmTest
שמור את הפרוייקט
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
:ים-Class Module הוסף לפרוייקט ארבעה.1
Shapes- וCCircle ,CRect ,IShape ים את השמות-Class- הקצה ל
שמור את הפרוייקט שוב
:IShape- הוסף קוד ל.3
לפיכך הפונקציות שלו רישות ממימוש, מגדיר ממשק בלבדIShape
Option Explicit
Public Function Surface() As Double
' Empty inside interface
End Function
מחזירה את שטח הצורהSurface הפונקציה
מחזירה את היקף הצורהPerimeter הפונקציה
Public Function Perimeter() As Double
' Empty inside interface
End Function
Public Function FormatDetails() As String
' Empty inside interface
End Function
: מחזירה מחרוזת עם נתונים אודותFormatDetails הפונקציה
סוג הצורהo
פרמטרים שונים של הצורהo
היקף הצורהo
שטח צורהo
כך שהמשמעות שתינתן לכל אחת מהפונקציות הנ"ל,CCircle- ובCRect- הממשק הנ"ל ממומש ב: זכור
תהיה שונה בכל אחת מהמחלקות הללו
:CCircle הוסף קוד למחלקה.1
Option Explicit
Private Const PI As Double = 3.14
Implements IShape
Private m_dRadius As Double
Public Property Get Radius() As Double
Radius = m_dRadius
End Property
Public Property Let Radius(dRad As Double)
If dRad >= 0 Then m_dRadius = dRad
End Property
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic- תכנות מונחה עצמים ב:1 שיעור
Private Function IShape_Perimeter() As Double
IShape_Perimeter = 2 * PI * m_dRadius
End Function
P 2r בתוך המעגלIShape_Perimeter מימוש הפונקציה
Private Function IShape_Surface() As Double
IShape_Surface = PI * m_dRadius * m_dRadius
End Function
S r 2 בתוך המעגלIShape_Surface מימוש הפונקציה
Private Function IShape_FormatDetails() As String
Dim strRes As String
strRes = "CCircle" & vbCrLf
strRes = strRes & String(8, " ") & "Radius = " & _
Trim(Str(Me.Radius)) & vbCrLf
strRes = strRes & String(8, " ") & "Perimeter = " & _
Trim(Str(IShape_Perimeter())) & vbCrLf
strRes = strRes & String(8, " ") & "Surface = " & _
Trim(Str(IShape_Surface())) & vbCrLf
IShape_FormatDetails = strRes
End Function
: במעגל מחזיר מחרוזת המכילהFormatDetails המימוש שלם
)CCircle( שם המחלקהo
רדיוס המעגלo
היקף המעגלo
שטח המעגלo
:CRect הוסף קוד למחלקה.1
Option Explicit
Implements IShape
Private m_dLength As Double
Private m_dWidth As Double
Public Property Get Length() As Double
Length = m_dLength
End Property
Public Property Let Length(dLen As Double)
If dLen >= 0 Then m_dLength = dLen
End Property
Public Property Get Width() As Double
Width = m_dWidth
End Property
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
Public Property Let Width(dWid As Double)
If dWid >= 0 Then m_dWidth = dWid
End Property
Private Function IShape_Perimeter() As Double
IShape_Perimeter = 2 * (m_dLength + m_dWidth)
End Function
Private Function IShape_Surface() As Double
IShape_Surface = m_dLength * m_dWidth
End Function
Private Function IShape_FormatDetails() As String
Dim strRes As String
strRes = "CRect" & vbCrLf
strRes = strRes & String(8, " ") & "Length = " & _
Trim(Str(Me.Length)) & vbCrLf
strRes = strRes & String(8, " ") & "Width = " & _
Trim(Str(Me.Width)) & vbCrLf
strRes = strRes & String(8, " ") & "Perimeter = " & _
Trim(Str(IShape_Perimeter())) & vbCrLf
strRes = strRes & String(8, " ") & "Surface = " & _
Trim(Str(IShape_Surface())) & vbCrLf
IShape_FormatDetails = strRes
End Function
: במלבן מחזיר מחרוזת המכילהFormatDetails המימוש שלם
)CRect( שם המחלקהo
אורך המלבןo
רוחב המלבןo
היקף המלבןo
שטח המלבןo
:Shapes- הוסף קוד ל.1
Option Explicit
Private m_coll As Collection
Private Sub Class_Initialize()
Set m_coll = New Collection
End Sub
Private Sub Class_Terminate()
Set m_coll = Nothing
End Sub
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :1תכנות מונחה עצמים בVisual Basic-
בשורות הקוד הנ"ל מוצהר אובייקט Collectionשיכיל בפועל את האובייקטים
בעת אתחול האובייקט ( )Initializeיוצרים Collectionחדש
בעת שחרור האובייקט ( )Terminateמשחררים את ה Collection-שהוצהר
זהו למעשה קטע ה Containment-במחלקה .כלומר ,במחלקה שלנו ( )Shapesמכילה אובייקט מסוג
Collection
)"" = Public Sub Add(Item As IShape, Optional Key As String
If Len(Key) > 0 Then
m_coll.Add Item, Key
Else
m_coll.Add Item
End If
End Sub
הפונקציה Addמוסיפה אובייקט לCollection-
הפעולה מתבצעת ע"י הפעלת Addמתוך ה Collection-שהוצהר במחלקה
העברת הפעולה מהמחלקה שלנו לאובייקט שפנימי ,m_collהיא למעשה ( Delegationהאצלה)
באופן דומה ננהג בפרוצדורות הבאות
)Public Sub Remove(Index As Variant
m_coll.Remove Index
End Sub
Public Function Item(Index As Variant) As IShape
)Set Item = m_coll.Item(Index
End Function
Public Function Count() As Long
Count = m_coll.Count
End Function
Public Property Get NewEnum() As IUnknown
]Set NewEnum = m_coll.[_NewEnum
End Property
בפונקציה NewEnumהעברנו את הפעולה ל _NewEnum-של האובייקט m_coll
כיוון שאסור להשתמש בקו תחתון בתחילת שם פרוצדורה או משתנה ב Visual Basic-אנו עוטפים את
המילה בסוגריים מרובעים
.1הגדר את תכונות הפרוצדורות במחלקה :Shapes
הישאר בחלון הקוד של Shapes
מתוך התפריט Toolsבחר בProcedure Attributes...-
מתוך הרשימה Nameבחר בItem-
לחץ על הלחצן – Advancedתיבת הדו שיח תתרחב ותכלול אפשרויות נוספות
מתוך הרשימה Procedure IDבחר בDefault-
כך הגדרת את הפרוצדורה Itemכפרוצדורת ברירת המחדל של Shapes
בשדה Nameבחר בNew Enum-
בתיבה Procedure IDרשום 4
ב Attributes-סמן Vליד Hide This Member
- 132אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
אבל מומלץ להסתיר ממשתמש, כמתודה נסתרת (לא היית חייבNewEnum באופן זה הגדרת את המתודה
שלו מצפה 4 את מזהה השגרהNewEnum- כמו כן נתת ל.)המחלקה את מה שהוא לא אמור להשתמש בו
For Each...In...Next הלולאה
Shapes לכל אחת מהפרוצדורות שלDescription כעת הוסף תיאור בשדה
: והגדר את המאפיינים הבאים, אחד לטופסTextBox-ים ו-CommandButton הוסף שלושה.1
ערך
Shapes Collection Demo 2
3- Fixed Dialog
2-CenterScreen
cmdAddRect
Add Rectangle
cmdAddCircle
Add Circle
cmdListItems
List items
txtColl
Button Face
True
2 - Vertical
][ריק
True
מאפיין
Caption
BorderStyle
StartUpPosition
Name
Caption
Name
Caption
Name
Caption
Name
Background
Locked
ScrollBars
Text
MultiLine
אובייקט
frmTest
Command1
Command2
Command3
Text1
:הטופס אמור להיראות דומה לזה שבציור
: הוסף קוד לטופס.1
Option Explicit
Public shpColl As Shapes
- 131 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic- תכנות מונחה עצמים ב:1 שיעור
Private Sub Form_Load()
Set shpColl = New Shapes
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set shpColl = Nothing
End Sub
Shapes מסוגCollection בשורות הנ"ל מוצהר אובייקט
אובייקט זה נוצר בעת טעינת הטופס ומשוחרר עם פריקת הטופס
Private Sub cmdAddCircle_Click()
Dim cr As CCircle
Set cr = New CCircle
cr.Radius = Val(InputBox("Enter the radius for the circle:"))
shpColl.Add cr
Set cr = Nothing
End Sub
Private Sub cmdAddRect_Click()
Dim rc As CRect
Set rc = New CRect
rc.Length = Val(InputBox("Enter the length of the rectangle:"))
rc.Width = Val(InputBox("Enter the width of the rectangle:"))
shpColl.Add rc
Set rc = Nothing
End Sub
נוסף מלבן או מעגל בהתאם לבחירת המשתמש,בדומה לתרגיל הקודם
Private Sub cmdListItems_Click()
Dim shp As IShape
txtColl.Text = ""
For Each shp In shpColl
txtColl.Text = txtColl.Text & shp.FormatDetails
Next
End Sub
נקראת כדי להציגFormatDetails והפונקציהCollection- בקטע קוד זה מתבצעת סריקה של האובייקטים ב
את נתוני הצורה
ולפיכך אנו קוראים,IShape כאן אנו יודעים מראש שאנו ניגשים לאובייקטים מסוג, בשונה מהתרגיל הקודם
Early Binding- אנו מרוויחים מהירות גבוהה המתאימה ל.FormatDetails מיד לפונקציה
הקוד כאן הרבה יותר קריא, בנוסף לרווחים הביצועיים
: בחינה ראשונה של התוכנית – הרצה.12
הרץ את התוכנית ובחן את פעולה
1 בדוק אם הגדרת את תכונות הפרוצדורה בשלב,For Each...In...Next אם התקבלו שגיאות בלולאה
:Object Browser צפייה המחלקות באמצעות- בחינה שניה של התוכנית.11
View מתוך התפריטObject Browser- פתח את חלון ה
- 131 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
מתוך רשימת ה Classes-מצא את המחלקה ( Shapesאם אינך רואה אותה ,וודא שב ComboBox-העליון
בחרת > <All Librariesאו )ShapeColl2
בפנל הימני אתה אמור לראות את הפרוצדורות של Shapes
שים לב שפרוצדורות מוסתרות גם מוצגות בפנל הימני .כשתיצור ( DLLבשיעור הבא) פרוצדורות אלו יוסתרו.
- 133אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX DLL :11
בשיעור זה:
תבין יותר את המושגים Thread ,Address Space ,ProcessוComponent-
תלמד ליצור רכיבי ActiveXמסוג ActiveX DLL
תלמד כיצד להשתמש ברכיבים שנכתבו כ ActiveX DLL-מתוך תוכנית אחרת
תכיר את המושג Instancing
תבין כיצד Windowsטוענת קובץ DLLלתוך תוכנית
תלמד לטפל בשגיאות בתוך רכיבים שתכתוב
מושגים
בסעיף זה תכיר מספר מושגים שיוכלו לסייע לך לנצל טוב יותר את מערכת ,Windowsלהבין מהו ,Component
ולהכיר טוב יותר את ההבדל בין סוגי ה-Component-ות שניתן לפתח בVisual Basic-
( Inctanceמופע) של תוכנית :ניתן להריץ תוכנית מספר פעמים .כל הרצה נפרדת של תוכנית נקראת Instanceשל
התוכנית .כך למשל ,אם הרצת את Microsoft Wordשלוש פעמים ,כל הרצה כזו מהווה Instanceשל Microsoft
Word
( Processתהליך) :אוסף המשאבים הדרושים להרצת Instanceשל תוכנית נקרא .Processה Process-מנהל את
המשאבים הקשורים בתוכנית שרצה .משאבים לדוגמה הם :הקצאת זיכרון לתוכנית ,יצירת -Threadים (יוסבר
בהמשך) ,טעינת רכיבי DLLוכו' .ברגע שתוכנית מסתיימת ,מערכת ההפעלה פורקת את ה Process-וכל
המשאבים הקשורים אליו.
( Threadמטלת ביצוע) Thread :הינו רצף של פקודות שעל המחשב לבצע Thread .הינו משאב הצורך בפועל זמן
מעבד .ב Process-אחד יכולים להיות מספר -Threadים שרצים בו זמנית .כך למשל ,התוכנית Microsoft Word
מאפשרת לך לערוך ולהדפיס בו זמנית על ידי הרצת Threadנפרד עבור פעולת ההדפסה .בעת טעינת Process
מערכת ההפעלה יוצרת באופן אוטומטי Threadעבור ה Process-שהורץ Thread .זה נקרה ה Thread-הראשי של
התוכנית.
( Address Spaceמרחב כתובות) Address Space :הוא מרחב כתובות של 4( 4Gג'יגה) .לכל Processישנו מרחב
זכרון משלו .תוכל להסיק מכך שאם תוכנית מנסה לגשת לכתובת מסוימת ותוכנית אחרת מנסה לגשת לאותה
הכתובת ,כל תוכנית תיגש בפפועל לנתונים ייחודיים משלה – כלומר יש הגנה על מרחב הכתובות מפני -Processים
אחרים .תשאל את עצמך ,בוודאי ,איך ייתכן שלכל Processישנם 4Gכתובות זכרון ,והרי זיכרון ה RAM-הוא
מצומצם מאוד (בדרך כלל בין 32Mל 256M-ברוב המחשבים) .יתרה מזאת ,אם נניח שישנם -Process 50ים
שרצים במקביל במערכת ,כי אז אנו מדברים על 200Gזיכרון ( .) 50 4G 200Gתפתור את עצמך מטרדה זו,
בכך שתדע (מבלי שניכנס לפרטים טכניים) כי מערכת ההפעלה עושה שימוש חסכוני בכתובות על ידי שימוש
במספר טריקים ,כגון שימוש ב-Page-ים (דפי זכרון)( Page Tables ,טבלאות דפים) ועוד .היבט נוסף שחשוב לשים
לב אליו ,בעוד שלכל Processיש Address Spaceמשלו-Thread ,ים הרצים באותו ה Process-משתתפים באותו
.Address Spaceתוכל להסיק מכך ש-Thread-ים הרצים תחת אותו Processיכולים לשתף בניהם מידע גלובלי.
– Executable File( EXEקובץ ריצה) :קובץ EXEהוא קובץ תוכנית שעם הרצתו נוצר עבורו Instanceחדש,
וכתוצאה מכך נוצר Processבמערכת .ל Process-שנוצר מוקצים מיד Main Thread ,Address Spaceועוד.
– Dynamic Link Library( DLLספריית קישור דינמי) :קובץ DLLהוא קובץ שיכול ליצא משאבים (למשל
-Iconים ,מחרוזות ועוד) ,כמו גם פונקציות .משמעות המושג ליצא היא ,שמשאבים אלו נועדו לשימושן של
תוכניות אחרות ,כלומר ,תוכניות שייבאו ת המשאבים הללו.כיוון ש DLL -אינו רץ בפני עצמו ,אלא משמש
תוכניות .EXEקובץ DLLהנטען על ידי תוכנית ,נטען לתוך ה Address Space-של ה.Process-
- 131אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX DLL :11
( Componentרכיב)( Component :כפי שהוסבר בפרק )8הוא רכיב בינרי Component .יכול להיות מאוחסן
בקובץ DLL ,EXEועוד .נבדיל בין מספר מושגים הקשורים ב-Component -ות:
( Server Component oרכיב שרת) :זהו Componentהמספק שירותים .כך למשל ניתן לכתוב
Componentמיוחד ,המספק שירותי חישובים מתמטיים ועוד.
( Client Component oרכיב לקוח) :זהו רכיב המנצל שירותים של רכיב אחר.
שים לב Client Component :יכול להיות גם .Server Componentכך למשל ייתכן שComponent-
מסוים מספק שירותים מסוימים ומבחינה זו הוא ,Serverאך במקביל מנצל שירותים של Component
אחר כדי להשלים את המשימה ,ובחינה זו הוא .Client
( In Process Component oרכיב תוך תהליכי) :זו Componentהנטען אל תוך Address Spaceשל
Processקיים .חשוב למשל על Controlמיוחד המציג לוח שנה ,וממוקם על טופס בתוכנית שלך .רכיב זה
הינו חלק מהתוכנית והוא נטען לתוך התוכנית.
( Out Of Process Component oרכיב חוץ תהליכי) :זהו רכיב הרץ כתוכנית עצמאית ומספק שירותים
לתוכניות אחרות .חשוב למשל על התוכנית שלך המריצה את Microsoft Wordכדי לננצל את שירותי
האיות ( )Spellingשל .Microsoft Wordבמקרה זה ה Server Component-הנו התוכנית Wordהרצה
ב Process-נפרד ( Wordהיא תוכנית EXEולכן היא רצה כתוכנית עצמאית)
יצירת
ACTIVEX DLL
יש לבחור את הפרוייקט ActiveX DLL
יש להבחין בין -DLLים שנוצרים ב Visual Basic-לבין -DLLים רגילים-DLL .ים הנוצרים ב Visual Basic-הם
מסוג ActiveXולפיכך מהווים ספריות של רכיבים .ב DLL-מסוס זה אין גישה ישירה לפונקציה מסוימת ,אלא
קיימת אפשרות ליצור רכיב .לאחר שהרכיב נוצר ניתן לפנות למתודות שלו .כלומר -DLLים של ActiveX
מייצאים רכיבים ולא פונקציות-DLL .ים רגילים של Win32מייצאים פונקציות.
כל רכיב ב DLL-נכתב ב Class Module-נפרד
יצירת אובייקטים
יישום לקוח יכול המעוניין להשתמש ברכיבים מספרייה חיצונית יכול לבצע זאת במספר דרכים:
הוספת הפניה ב ,Project References-ולאחר מכן יצירת אובייקט באמצעות המילה .New
יצירת אובייקט והמתו למשתנה מסוג Objectבאמצעות הפונקציה ( CreateObjectבמקרה כזה יהי שימוש
ב .Late Binding-כדי להמנע מכך ,ניתו ליצור משתנה מסוג האובייקט ,ולהוסחף את ההפניה המתאימה
ב)Project References-
באמצעות הפונקציה CreateObjectניתן ליצור אובייקטים גם במחשבים מרוחקים .פשוט יש להעביר את שם
המחשב ברשת כפרמטר שני לפונקציה לפי התחביר הבא:
)CreateObject(component_name, computer_name
הצגת ממשק משתמש
רכיב DLLיכול ליצור ממשק משתמש למשל על ידי קריאה לפונקציה MsgBox
ניתן למנוע הצגת ממשק משתמש על ידי הרכיב אם מסמנים Vליד האפשרות Unattended Execution
בכרטיסיית Generalבחלון הProject Properties-
אם רכיב שהוגדר עבור Unattended Executionמנסה להציג ממשק משתמש ,תירשם הודעה בקובץ ה Log-של
המערכת (ב Windows 2000-ניתן לצפות בהודעה מתוך חלון ה Event Viewer-תחת הקטגוריה Application
.Logהיישום Application Viewerנמצא תחת )Administrative Tools
- 131אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
ניהול קבוצת פרוייקטים במקביל
בעת פיתוח רכיב יש לבחון אותו במקביל לפיתוח
ניתן ליצור קבוצת פרוייקטים ב Visual Basic-ולנהל אותם במקביל
Visual Basicיוצרת קובץ פרוייקט ( )*.vbgהשוקב אחר מיקום הפרוייקטים ומנהל אותם
אני ממליץ בפניך ליצור ספרייה עבור קבוצת הפרוייקטים .תחת ספרייה זו צור תתי ספריות עבור כל פרוייקט
בקבוצת הפרוייקטים .את הקבצים של כל פרוייקט שמור בספרייה השייכת לפרוייקט ,ואת קובץ הפרוייקט שמור
תחת ספריית הקבוצה
תרגיל – 1ספריית הרכיבים SecurityLib
בתרגיל זה ניצור רכיב DLLהמאפשר הצגת מסך ,Loginובדיקת וסיסמה
הפונקציה Loginתציג את מסך ה .Login-אם הסיסמה שהוכנסה תקינה ,הפונקציה תחזיר ,Trueאחרת יוחזר
Flase
בדוגמה זו אנו מניחים שהמשתמש היחד הוא " "superuserושסיסמתו היא " ,"1234ברור עם זאת שביישום
אמיתי תכתוב משהו קצת פחות טיפשי
.1צור קבוצת פרוייקטים ActiveX DLLו:Standard EXE-
פתח את Visual Basicיחד עם פרוייקט מסוג ActiveX DLL
שנה את שם הפרוייקט לSecurityLib-
בתוך הפרוייקט ישנו .Class Moduleשנה את שמו לCLogin-
הוסף פרוייקט Standard EXEעל ידי בחירת האפשרות Add Projectמהתפריט File
שנה את שם הפרוייקט ל TestLib-ואת שם הטופס שבו לfrmTestLib-
.1שמור את קבוצת הפרוייקטים:
בעת לחיצה על Saveייפתח חלון השמירה .צור ספרייה בשם Securityותחת ספרייה זו צור שתי ספריות
בשם SecurityLibוTestLib-
את קבצי פרוייקט ה ActiveX DLL-שמור תחת הספרייה SecurityLibואת קובצי פרוייקט הStandard -
EXEשמור תחת הספרייה TestLib
לאחר שתשמור את הפרוייקטים Visual Basicתבקש ממשך לשמור את קובץ קבוצת הפרוייקטים .שנה את
שם הקובץ ל grpSecurity.vbg-ושמור אותו תחת הספרייה Security
.3הוסף טופס לספריית הרכיבים:
בחלון ה Project Explorer-בחר בפרוייקט ( SecurityLibאם אינך רואה את חלון ה Project Explorer-תוכל
לבחור אותו מתוך התפריט Viewאו על ידי הצירוף )Ctrl+R
הוסף טופס על ידי בחירת האפשרות Add Formמתוך התפריט Project
שנה את שם הטופס לfrmLogin-
שמור את הטופס תחת הספרייה השייכת לפרוייקט )\Security\SecurityLib\( SecurityLib
עצב את הטופס :frmLogin
הוסף שני -TextBoxים ,שני -CommandButtonים ושני -Labelים לטופס ,והגדר את המאפיינים הבאים:
אובייקט
frmLogin
Label1
Label2
מאפיין
Caption
BorderStyle
StartUpPosition
Name
Caption
TabIndex
Name
ערך
Login
3- Fixed Dialog
1-CenterOwner
lblUsername
&Username
0
lblPassword
- 131אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
ActiveX DLL :11 שיעור
&Password
2
txtUsername
][ריק
1
txtPassword
8
*
][ריק
3
cmdOK
&OK
True
cmdCancel
&Cancel
True
Caption
TabIndex
Name
Text
TabIndex
Name
MaxLength
PasswordChar
Text
TabIndex
Name
Caption
Default
Name
Caption
Cancel
Text1
Text2
Command1
Command2
:הטופס אמור להיראות בדומה לציור שלפניך
:frmLogin הוסף קוד לטופס.1
Option Explicit
Private m_strUsername As String
Private m_strPassword As String
שני המשתנים הללו יכילו את שם המשתמש והסיסמה לאחר שהטופס יוסר
Private Sub cmdOK_Click()
m_strUsername = txtUsername.Text
m_strPassword = txtPassword.Text
Unload Me
End Sub
והטופס מפורקm_strPassword- וm_strUsername מועברים מעוגכנים ערכי המשתניםOK בעת לחיצה על
Unload על ידי המתודה
ברגע. עדיין קיימים בזכרוןm_strPassword- וm_strUsername למרות שהטופס מפורק המשתנים:שים לב
. יפורקו גם המשתנים הללוSet...= Nothing ידי-שהטופס ישוחרר מהזכרון על
- 131 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
Private Sub cmdCancel_Click()
Unload Me
End Sub
m_strPassword- וm_strUsername הטופס מפורק מבלי לעדכן אתCancel בעת לחיצה על
Public Property Get Username() As String
Username = m_strUsername
End Property
Public Property Get Password() As String
Password = m_strPassword
End Property
m_strPassword- וm_strUsername שני פרוצדורות המאפיינים הללו מאפשרים לאחזר את ערכם של
:CLogin הוסף קוד למחלקה.1
Option Explicit
Public Function ShowLogin() As Boolean
Dim loginForm As New frmLogin
loginForm.Show vbModal
If LCase(loginForm.Username) = "superuser" And _
loginForm.Password = "1234" Then
ShowLogin = True
Else
ShowLogin = False
End If
Set loginForm = Nothing
End Function
ומציגה אותו למשתמש במצב מודאליfrmLogin של הטופסInstance יוצרתShowLogin הפונקציה
אם.loginForm שלPassword- וUsername נבדקים המאפייניםCancel אוOK לאחר שהמשתמש לחץ על
False אחרת יוחזר,True אזי מוחזר מהפונקציה הערך," בהתאמה1234"–" וsuperuser"-הם שווים ל
:TestLib עבור לפרוייקט.1
Project Explorer- בחלון הTestLib לחץ על שם הפרוייקט
:frmTestLib עצב את הטופס
:ים והגדר את המאפיינים הבאים-CommandButton שניfrmTestLib הוסף לטופס
ערך
Test Login
3- Fixed Dialog
2-CenterScreen
cmdUseNew
Use "Set ...New"
cmdUseCreate
Use "CreateObject (...)"
מאפיין
Caption
BorderStyle
StartUpPosition
Name
Caption
Name
Caption
- 131 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
אובייקט
frmTestLib
Command1
Command2
שיעור ActiveX DLL :11
הטופס אמור להיראות דומה לזה שבציור שלפניך:
.1הוסף Referenceלפרוייקט :SecurityLib
מתוך התפריט Projectבחר באפשרות References
סמן Vליד הספרייה SecurityLib
שים לב :ללא הפניה זו לא תוכל ליצור אובייקטים או משתנים מהסוג CLoginבתוך יישום הלקוח (במקרה
הזה התוכנית )TestLibתוך שימוש במילה .Newעם זאת ,תוכל ליצור אובייקטים באמצעות הפונקציה
CreateObjectתוך ציון שם הספרייה ושם הרכיב בספרייה ,כלומר )"CreateObject("SecurityLib.CLogin
.1הוסף קוד לטופס :frmTestLib
Option Explicit
)(Private Sub cmdUseNew_Click
Dim sec As New SecurityLib.CLogin
If sec.ShowLogin() Then
"!MsgBox "You are succesfull logged in
Else
"!MsgBox "Login Failed
End If
Set sec = Nothing
End Sub
בתגובה לליחצה על cmdUseNewיוצרים מופע של המחלקה CLoginמתוך הספרייה SecurityLib
לאחר מכן מפעילים את הפונקציה ShowLoginומציגים הודעה למשתמש באמצעות Message Boxעל פי
התוצאה המוחזרת מShoLogin-
)(Private Sub cmdUseCreate_Click
Dim sec As Object
)"Set sec = CreateObject("SecurityLib.CLogin
If sec.ShowLogin() Then
"!MsgBox "You are succesfull logged in
Else
"!MsgBox "Login Failed
End If
Set sec = Nothing
End Sub
פונקציה זו זהה לקודמת אלא שהפעם האובייקט נוצר באמצעות CreateObjectומושם לתוך משתנה מסוג
Object
- 112אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
.1
.12
.11
.11
קבע את ה:Start Up Project-
לפני שתנסה להריץ את הפרוייקט עליך לקבוע איזה פרוייקט יופעל על ידי Visual Basic
בחלון ה Project Explorer-לחץ לחיצה ימנית על הפרוייקט .TestLibבתגובה יוצג תפריט מוקפץ שהאפשרות
הראשונה בו היא .Set As Start Upבחר באפשרות זו.
שים לב ש Visual Basic-הדגישה את שם הפרוייקט
בחינה ראשונה של הפרוייקט:
הרץ את התוכנית באמצעות F5ובחן את פעולתה
בחינה שניה של הפרוייקט:
בטל את ה Reference-לספרייה SecurityLibעל ידי הסרת סימן ה V-מתיבת הדו שיח .References
(לפתיחת תיבת דו שיח זו בחר ב References-מתוך התפריט )Project
נסה להריץ את הפרוייקט .שים לב כי לחיצה על הלחצן " Use "Set...Newתגרום לשגיאה ,ואילו שימוש
ב Use "CreateObject (...)"-ימשיך לפעול
שמור את הפרוייקטים:
החזר את ה Reference-שביטלת
שמור את הפרוייקטים
אם אתה לא הולך לישון ,השאר את הפרוייקטים פתוחים .בתרגיל הבא נעשה שימוש בקובוצת פרוייקטים זו
( Instancingיצירת מופעים)
לכל Class Moduleישנו מאפיין Instancingהמגדיר כיצד ניתן ליצור אובייקטים מסוג המחלקה
המאפיין Instancingמשפיע על אופן יצירת האובייקטים על ידי תוכנית חיצונית המשתמשת בספריית הרכיבים.
מאפיין זה אינו משפיע על אופן יצירת הרכיבים מתוך הפרוייקט עצמו.
Instancingעבור Classבפרוייקט מסוג ActiveX DLLמאפשר את הערכים הבאים:
:Privateה Class-הוא פרטי של הפרוייקט .יישומים חיצוניים אינם יכולים ליצור אובייקטים מסוג המחלקה.
יתרה מכך ,יישומים חיצוניים אינם יכולים להצהיר אפילו על משתנים מסוג המחלקה .כלומר ,ה-Class-ים הללו
פרטיים באופן מוחלט בפרוייקט ואינם מוכרים כלל מיישומים חיצוניים.
:PublicNoCreatableה Class-יהיה מוכר ביישומים חיצוניים באופן כזה שניתן להצהיר על משתני ייחוס מסוג
האובייקט הזה .עם זאת ,יישומים חיצוניים אינם יכולים ליצור בעצמם אובייקטים מסוג המחלקה.
:MultiUseכל האובייקטים הנוצרים על ידי יישום חיצוני משתתפים בעותק אחד של ה .Class-ברור שעבור
המשתנים הפנימיים של ה Class-נוצרים העתקים עבור כל יצירת אובייקט על ידי יישום לקוח ,עם זאת ,הקוד
מופיע פעם אחת.
:GlobalMultiUseזהה ל MultiUse-אלא שהיישום החיצוני אינו חייב.ליצור עותק של האובייקט .כלומר באופן
אוטומטי נוצר אובייקט כזה על ידי ספריית הרכיבים .כמו כן ,היישום יכול לפנות לפונקציות של המחלקה ללא
הקדמת שם אובייקט .אם לדוגמה קיימת מחלקה בשם CStatisticsהכוללת את הפונקציה ,StdDevאפשר
להשתמש בפונקציה פשוט על ידי רישום ) StdDev(...כאילו היה מדובר בפונקציה גלובלית.
שים לב :בכל פרוייקט ActiveXחייב להיות לפחות Classאחד הניתן ליצירה
תרגיל – 2שינוי המאפיין Instancingבמחלקה CLogin
בתרגיל זה ננסה את האפשרות GlobalMultiUseבמקום MultiUse
.1פתח את קבוצת הפרוייקטים :grpSecurity.vbg
אם סגרת את קבוצת הפרוייקטים grpSecurityתוכל לפתוח אותה מתוך הסייר על ידי לחיצה כפולה על שם
הקובץ grpSecurity.vbg
.1שנה את המאפיינן :Instancing
שנה את המאפיין Instancingשל המחלקה CLoginלGlobalMultiUse-
שמור את הפרוייקט
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX DLL :11
.3בחינה ראשונה:
הרץ את הפרוייקט
שים לב שהכל פועל כרגיל
.1בחינה שניה:
הוסף CommandButtonנוסף לטופס שנה את שמו ל cmdUseGlobal-ואת הכותרת שלו ל"Use Global"-
הוסף את הקוד הבא בתגובה ללחיצה על :cmdUseGlobal
)(Private Sub cmdUsetGlobal_Click
If ShowLogin() Then
"!MsgBox "You are succesfull logged in
Else
"!MsgBox "Login Failed
End If
End Sub
שים לב כי הפונקציה ShowLoginמופעלת כאילו הייתה פונקציה גלובלית .דבר זה מתאפשר הודות להגדרת
CLoginכ .GlobalMultiUse-במקרה זה נוצר עבורנו אובייקט מסוג CLoginבעת שהתוכנית מופעלת
והפונקציות שלה נחשפות באופן אוטומטי .כמו כן שים לב שאתה יכול לרשום SecurityLib.ShowLogin
כאילו מדובר בפונקציה גלובלית של הספרייה
.1שמור את קבוצת הפרוייקטים:
מתוך התפריט Fileבחר בSave-
אם עדיין לא נרדמת אז תיאר ער עוד קצת .בתרגיל הבא נסיים את העבודה על קבוצת הפרוייקטים הזו.
הגדרת כתובות בסיס לרכיבי DLL
רכיב ( DLLכפי שהוסבר בתחילת השיעור) נטען לתוך ה Address Space-של תוכנית הלקוח
בעת קימפול הרכיב ,קריאות לפונקציות מתפרשות לפי כתובות הפונקציות .לדוגמה ,אם נניח שפונקציה מסוימת
נמצאת במרחק ( &H00000100 )Offsetמתחילת ה DLL-ואותו DLLקומפל מתוך הנחה שייטען לכתובת
&H11000000בתוכנית הלקוח (זוהי כתובת הבסיס) ,אזי כתובת הפונקציה לאחר הקימפול תהיה
( &H11000100כתובת בסיס +כתובת היסט)
כאשר תוכנית משתמשת במספר -DLLים סביר מאוד ששני -DLLים או יותר ינסו להיטען לאותה כתובת בסיס
אם DLLמנסה להיטען לכתובת בסיס שנתפסה כבר על ידי DLLאחר ,מערכת ההפעלה Windowsמקצה כתובת
בסיס ייחודית עבור הרכיב כדי למנוע התנגשויות .בנוסף ,מערכת ההפעלה משנה את הכתובות כך שיתאימו
לכתובת הבסיס החדשה .פעולה זו נקראת .Rebasingשינוי כתובות הבסיס כרוך בזמן טעינה ארוך יותר.
ניתן להגדיר את כתובת הבסיס שלפיה יתבצע קימפול הרכיב מתוך הכרטיסייה Compileבתיבת הדו שיח
Project Properties
כתובת ברירת המחדל היא &H11000000ומומלץ לשנות אותה ,כיוון שסביר להניח שישנם לא מעט רכיבים
שכתובת זו מוקצת עבורם
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
בעת הגדרת כתובת בסיס זכור את הכללים הבאים:
oעל כתובת הבסיס להיות כפולה של ( 64Kבהקצהדצימלית ,)&H10000כלומר ארבע הספרות האחרונות
של כתובת הבסיס יהיו .0000
Address Space oשל Processכולל 4Gכתובות .עם זאת ,הכתובות הבאות שמורות עבור מרכיבים שונים
של :Windows
ב Windows NT/2000-וכן ב ,Windows 98-רצץ הכתובות בין ( 2Gהכתובת )&H80000000
לבין ( 4Gהכתובת )&HFFFFFFFFשמורות עבור Windows
ב Windows98-רצף הכתובות המתחילות ב &H00000000-לבין ( &H0040000כלומר 4M
הזיכרון התחתון) שמור גם הוא לWindows-
ב 64k WindowsNT/2000-הזיכרון התחתון (כלומר הרצף )&H00000000-&H00010000
שמור למערכת ההפעלה ,וכן 64Kמתחילים ברצף &H7FFF0000עד )&H80000000
oאני ממליץ לשנות את כתובת הבסיס כך שתהיה כפולה של 64Kבין הכתובת &H40000000לבין
( &H80000000כלומר בין 1Gל)2G-
תרגיל – 1שינוי כתובת הבסיס לספרייה Securi tyLib
בתרגיל זה נשנה את כתובת הבסיס לטעינת הDLL
.1פתח את קבוצת הפרוייקטים שכתבנו בתרגילים הקודמים
.1בחר בפרוייקט :SecurityLib
מתוך קבוצת הפרוייקטים המוצגים בחלון ה Project Explorer-בחר בSecurityLib-
.3שנה את כתובת הבסיס:
בחר באפשרות SecurityLib Properties...מתוך התפריט Project
עבור לכרטיסייה Compile
בשדה DLL Base Addressהמופיע בתחתית תיבת הדו שיח שנה את הכתובת לערך &H80000000ולחץ
.OKאתה אמור לקבל הודעה כי כתובת זו אינה חוקית .נסה את הכתובות הבאות:
כתובת 0אינה חוקית
&H00000000 o
כתובת שאינה כפולה של 6kKאינה חוקית (בכתובות שהן כפולה של 64K
&H40001000 o
ארבע הספרות הימניות הן )0
כתובת חוקית
&H4001000 o
שמור את הפרוייקט:
שמור את הפרוייקט וסגור אותו
טיפול בשגיאות ברכיב
בעת יצירת רכיב שים לב שעל הרכיב שלך לטפל בכל השגיאות העלולות להתרחש במהלך החיים שלו
שגיאה המתרחשת ברכיב ואינה זוכה לטיפול תגרום לקריסת תוכנית הלקוח (חשוב איך יגיבו המשתמשים של
הרכיב שלך ברגע שהם יגלו שאתה הוא הבאג שלהם!!!)
תוכל לטפל בשגיאות הן ע"י פתרון הבעיה בתוך הרכיב או ע"י שיגור שגיאה (מותאמת אישית או המקורית) החוצה
אל תוכנית הלקוח
כדי להקצות מספר לשגיאה מותאמת אישית עליך להוסיף מספר בין 512ל 65535-לקבוע vbObjectError
תוכל לעורר את השגיאה באמצעות המתודה Raiseשל האובייקט Err
שים לב ,אם בתוך הרכיב שלך מתבצע טיפול בשגיאות ואתה רוצה לעורר שגיאה ללקוח ,קרא תחילה לOn Error -
,GoTo 0כדי לבטל את מטפל השגיאות הפעיל
שים לב :אל תנסה לעורר שגיא ללקוח מתוך אירוע השייך לאובייקט .לשגיאה כזו אין מקום לכידה בתוך תוכנית
הלקוח ,ולפיכך היא תקרוס.
- 113אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX DLL :11
תרגיל : 4ספריית הרכיב ים DynamicArray
בדוגמה זו ניצור ספריית רכיבים בשם DynamicArrayשתכיל רכיב אחד בשם CDynamicArray
בשונה מהתרגיל הקודם ,בתרגיל זה נקמפל את ה DLL-ונטען אותו לתוכנית שניה.
רכיב זה ישמש כמערך דינמי המשנה את גודלו באופן אוטומטי כאשר מכניסים איבר באינדקס מסוים שאינו
מוקצה באותו שלב במערך
האינדקסים במערך רצים מ 2-עד ( n 1כאשר nהוא גודל המערך)
ניסיון לגשת לאינדקס שלילי יגרום לשגיאה
ניסיון לקריאה ( )Property Getשל איבר באיננקס שעדיין לא הוקצה גורם לשגיאה
שים לב כי הרכיב מטפל בכל השגיאות ,ע"י פתרון שלהם (כמו שינוי ממדי המערך) או העברה שלהם החוצה ,אל
רכיב הלקוח
בשיעור הקודם הכרנו את אפשרות הגדרת התכונות עבור פרוצדורות של מחלקה .בתרגיל זה נשתמש באפשרות זו.
.1צור פרוייקט חדש מסוג ,ActiveX DLLושמור אותו:
הקצה לפרוייקט את השם DynamicArrayולמחלקה CDynamicArray
שמור את הפרוייקט
.2הוסף משתנים למחלקה:
המחלקה תכיל מערך דינמי פנימי
Private m_anValues() As Integer
.3הוסף את המאפיין :Count
המאפיין Countמחזיר את גודל המערך (אחד מעל האינדקס האחרון במערך) תוך שימוש בפונקציות
LBoundוUBound-
אם לא הוקצו איברים למערך תתרחש שגיאה .לוכדים שגיאה זו כדי להחזיר גודל מערך 0
Public Property Get Count() As Integer
On Error GoTo Err_Handler
Count = UBound(m_anValues) - LBound(m_anValues) + 1
Exit Property
Err_Handler:
Count = 0
End Property
.1הוסף את השגרה :Clear
השגרה Clearמשחררת את הזיכרון שהוקצה עבור המערך תוך שימוש במילה השמורה Erase
)(Public Sub Clear
Erase m_anValues
End Sub
.1הוסף את המאפיין :Item
המאפיין Itemמקבל אינדקס במערך ומאפשר לאחזר או לקבוע את ערכו
כאשר מעבירים מספר פרמטרים ל Property Let-הפרמטר האחרון יהווה את סוג המאפיין
יש להקפיד שכל הפרמטרים (מלבד האחרון ב )Property Let-שב Property Get-וב Property Let-יהיו זהים
בסוגם ובשמם)
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
Public Property Get Item(ByVal n As Integer) As Integer
On Error GoTo Err_Handler
)Item = m_anValues(n
Exit Property
Err_Handler:
Err.Raise Err.Number
End Property
)Public Property Let Item(ByVal n As Integer, ByVal value As Integer
On Error GoTo Err_Handler
m_anValues(n) = value
Exit Property
Err_Handler:
If n > 0 Then
)ReDim Preserve m_anValues(n
Resume
Else
Err.Raise Err.Number
End If
End Property
.1הוסף תיאורים לממשק המחלקה:
בעת שימוש באובייקטים ניתן לבחון את מאפייניהם תוך שימוש ב( Object Browser-ניתן לפתוח את
ה Object Browser-באמצעות F2או מתוך תפריט )View
מתוך התפריט Toolsבחר בProcedure Attributes-
מתוך התיבה Nameבחר ב Clear-והקלד את התיאור הבא בשדה :Description
Free the memory occupied by the array.
באופן דומה הוסף את התיאור הבא למאפיין :Count
Returns the number of items in the array.
ואת התיאור הבא למאפיין :Item
Sets/Returns the value of an item in the array.
אל תסגור את חלון ה Procedure Attributes-אתה צריך אותו לשלב הבא
הגדר את Itemכמאפיין ברירת מחדל:
להזכירך ,מאפיין ברירת מחדל הוא המאפיין שיופעל במקרה שלא צוין במפורש שם מאפיין (לדוגמה ,המאפיין
Textהוא מאפיין ברירת המחדל של )TextBox
בחר במאפיין Itemבתיבה Nameולחץ על הלחצן Advanced
כעת ,כדי להפוך את Itemלמאפיין ברירת מחדל ,ב Procedure ID-בחר ב)Default(-
.1בצע קומפילציה לספריית הרכיבים:
מתוך התפריט Fileבחר ב...Make DynamicArray.dll-
התוכנית תקומפל ו Visual Basic-תרשום את הרכיב באופן אוטומטי במערכת
אם התגלו שגיאות ,תקן אותן וקמפל מחדש את הפרוייקט
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX DLL :11
.1
.1
.12
.11
צור תוכנית לקוח לבחינת ספריית הרכיבים:
הפעל את Visual Basicמחדש ופתח פרוייקט Standard EXE
הקצה לפרוייקט את השם TestDArrayולטופס שבו את השם frmTestDArray
שמור את הפרוייקט
הוסף הפנייה לספריית הרכיבים:
מתוך התפריט Projectבחר בפריט References
סמן Vליד הספרייה ( DynamicArrayשים לב שלא היית צריך לבצע רישום של הרכיב ,כי Visual Basic
ביצעה זאת עבורך בעת קימפול הספרייה בשלב )1
שים לב :אם תרצה לערוך ולאחר מכן לקמפל את ה DLL-כאשר יש הפניה אליו מתוך הפרוייקט ,TestDArray
יהיה עליך להסיר את ההפניה כדי שהקמפול יצליח.
בחינה ראשונה :ה:Object Browser-
פתח את ה Object Browser-מתוך התפריט Viewאו ע"י שימוש בקיצור F2
בחר ב CDynamicArray-ועיין במאפיינים והמתודות המוצגים בפנל הימני של החלון
שים לב שתיאור המאפיינים והמתודות מופיע בתחתית החלון של הObject Browser-
שים לב כי ליד סמל המאפיין Itemמופיע עיגול כחול קטן המעיד כי זהו מאפיין ברירת המחדל
סגור את חלון הObject Browser-
הוסף Controlsלטופס:
הוסף Controlsלטופס כפי שמוצג בציור הבא:
.11הוסף קוד לטופס:
הקוד הבא מצהיר על אובייקט מסוג CDynamicArray
Private m_DArray As DynamicArray.CDynamicArray
הוסף קוד לטופס:
הקוד הבא מאתחל את ממשק המשתמש ויוצר Instanceשל :CDynamicArray
)(Private Sub Form_Load
' Initializations:
"Me.Caption = "Test Dynamic Array
"" = txtIndex.Text
"" = txtValue.Text
"cmdGet.Caption = "&Get
"cmdLet.Caption = "&Let
"cmdCount.Caption = "&Count
"cmdClear.Caption = "Clea&r
' Create the dynamic-array class
Set m_DArray = New CDynamicArray
End Sub
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
.13הוסף קוד לטופס:
הקוד הבא פועל בתגובה ללחיצה על אחד הלחצנים
שים לב שאין חובה לציין במפורש את המאפיין Itemבעת השימוש בו ,כיוון שזהו מאפיין ברירת המחדל.
כלומר הרישום m_DArray(1) = 100כמוהו כרישום m_DArray.Item(1) = 100
)(Private Sub cmdClear_Click
m_DArray.Clear
End Sub
)(Private Sub cmdCount_Click
"MsgBox "The array contains " & Str(m_DArray.Count) & " items
End Sub
)(Private Sub cmdGet_Click
)))txtValue.Text = Str(m_DArray(Val(txtIndex.Text
End Sub
)(Private Sub cmdLet_Click
)m_DArray(Val(txtIndex.Text)) = Val(txtValue.Text
End Sub
בחינה שניה :הרצת הפרוייקט:
הרץ את התוכנית ובצע את הפעולות הבאות (לפי הסדר)
לחץ על :Countאתה צריך לקבל 0
לחץ על :Getאתה אמור לקבל שגיאה .זוהי השגיאה שהרכיב מעורר כשמנסים לקרוא פריט שאינו קיים (עיין
בקוד הרכיב לפרטים נוספים)
הרץ שוב את הפרוייקט והזן ערך למערך .בשדה Indexבחר באינדקס המתאים ובשדה Valueבחר בערך עבור
אותו פריט לאחר מכן לחץ .Letבאופן זה הזן מספר ערכים
השתמש ב Get-כדי לאחזר את הערכים הללו
השתמש ב Count-כדי לקבל את מספר האיברים החדש במערך
השתמש ב Clear-כדי לרוקן את המערך
נסה להזין ערך למערך באינדקס שלילי כלשהו ,אתה אמור לקבל שגיאה שהרכיב מעורר (עיין בקוד הרכיב
לפרטים נוספים)
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :11כתיבת Stored ProceduresבSQL Server-
בשיעור זה:
תבין מהם Stored Proceduresותלמד כיצד להוסיף Stored Procedureל Database-של SQL Server
תלמד לכתוב Stored Procedureהמקבלים פרמטים
תכיר מבני בקרה שונים בTransact SQL-
STORED PROCEDURES
Stored Procedureהיא פרוצדורה המאוחסנת בתוך הDatabase-
Stored Procedureיכול לקבל פרמטרים ולפיכך יכול לשמש לבקשות שונות
Stored Procedureמקומפל בתוך ה Database-ולפיכך כל תהליך ה( Parsing-ניתוח המשפט)בניית הExecution -
( Planמסלול הביצוע) נחסכים
כדי להבין את היתרון שבהפעלת Stored Procedureמתוך תוכנית לקוח לעומת בניית משפט SQLושליחתו
לביצוע ל Database-על ידי תוכנית לקוח ,נבחן את תהליך הביצוע בשני המקרים על ידי ה:Database-
תהליך הביצוע של משפט SQLהנשלח על ידי לקוח
נניח כי תוכנית לקוח יוצרת את משפט ה SQL-הבא ושולחת אותו לביצוע ב:Database-
* SELECT
FROM Employees
WHERE EmployeeID = 10
.1
.1
בתוך ה:Database-
מתבצע ניתוח סינטקטי (תחבירי) של המשפט
קיום הטבלה Employeesנבדק ,כמו כן נבדקות הרשאות הגישה לטבלה זו על ידי המשתמש המפעיל את משפט
הSQL-
נוצר Execution Planעבור משפט הSQL-
( Execution Planהיא תוכנית הביצוע של משפט ה SQL-הכוללת הנחיות כיצד יש לסרוק טבלאות כדי לאתר את
הרשומות ,האם יש להשתמש באינדקסים ,בצירוף טבלאות ,כיצד יש למזג את הטבלאות וכו')
משפט ה SQL-מופעל והתוצאות מוחזרות למשתמש
נניח שאותו משפט SQLנשלח שוב על ידי תוכנית הלקוח
ב Database-ישנו אזור זיכרון הכולל את משפטי ה SQL-האחרונים שהורצו וכן אזור נוסף הכולל את הרשומות
האחרונות שהתקבלו כתוצאהמהפעלת משפטי . SQLאם התמזל מזלך ,משפט ה SQL-יימצאו בתוצאות עבור
שאילתה זו ,או לפחות המשפט עצמו .במקרה כזה ,חלק מהשלבים שצוינו קודם יחסכו
אם המשפט אינו נמצא בין המשפטים האחרונים שבוצעו (זה יקרה אם עבר זמן רב מאז הרצת המשפט ,כי אז
אזורי הזכרון הללו פינו את מקומם למשפטים חדשים .ככה זה בשיטת )LRUכל השלבים שתוארו קודם יבוצעו
שוב
נניח שהמשפט הבא נשלח על ידי תוכנית הלקוח:
לכאורה נראה כי שני משפטי ה SQL-זהים רק התנאי שונה ,ובכל זאת אלו הם שני משפטי SQLשונים לגמרי וכל
התהליך שבוצע קודם יבוצע שוב עד להחזרת הרשומות לתוכנית הלקוח .מדוע? כיוון שלכל משפט SQLהרץ
.3
.1
* SELECT
FROM Employees
WHERE EmployeeID = 18
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :11כתיבת Stored ProceduresבSQL Server-
תהליך הביצוע של בקשה ל הפעלת Stored Procedureמתוך תוכנית לקוח
נניח כי ב Database-מאוחסנת פרוצדורה בשם GetEmployeeהמקבלת כפרמטר מספר המזהה את מספר העובד
()EmployeeID
תוכנית הלקוח שולחת בקשה לקבל את פרטי העובד שמספרו 10
בתוך ה:Database-
.1נבדק כי הפרמטר שהועבר תקין
.1מופעלת הפרוצדורה (שים לב כי הפרוצדורה כבר מקומפלת ואין צורך לקמפל אותה מחדש ,לפיכך כל השלבים
שתוארו במקרה הקודם נחסכים)
כעת נניח כי תוכנית הלקוח מבקשת את פרטי העובד שמספרו .18בקשה כזו לא תיחשב כבקשה שונה מהקודמת
כיוון שמספר העובד מועבר כפרמטר לפרוצדורה
כתיבת
STORED PROCEDURESבSQL SERVER-
פרוצדורות ב SQL Server-נכתבות בTransact SQL-
Transact SQLזוהי ההרחבה של שפת SQLהסטנדרטית במערכת ( SQL Serverבדיוק כפי ש PL SQL-היא
ההרחבה של שפת SQLבמערכת )Oracle
פרוצדורה פשוטה ללא פרמטרים
CREATE PROCEDURE proc_name
AS
statements...
GO
דוגמה 1
הוספת Stored ProcedureלNorthwind-
(לקוח מתוך )Microsoft SQL Server 7 Administrator Companion
הפרוצדורה LateShipmentsמחזירה את תאריך המבוקש למשלוח ( ,)RequiredDateתאריך המשלוח בפועל
( )ShippedDateושם חברת המשלוחים ( CompanyNameמהטבלה )Shippersעבור כל אותן הזמנות שהמשלוח
הגיע באיחור
דוגמה זו לקוחה מהספר Microsoft SQL Server 7.0 Administator Companion
CREATE PROCEDURE LateShipments
AS
SELECT RequiredDate, ShippedDate, Shippers.CompanyName
FROM Orders, Shippers
=
WHERE ShippedDate > RequiredDate AND Orders.ShipVia
Shippers.ShipperID
GO
הפעלת הפרוצדורה ב:Query Analyzer-
oאם זהו המשפט הראשון שמופעל מתוך סדרת משפטים ,ניתן לרשום:
LateShpments
- 112אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
:אם זהו אינו המשפט הראשון יש לרשום
EXECUTE LateShipments
או
EXEC LateShipments
פרוצדורה המקבלת פרמטרי ם
CREATE PROCEDURE proce_name @parameter1 type, @parameter2 type...
AS
statements...
GO
2 דוגמה
אלא שכאן מועבר שם חברת המשלוח כפרמטר ומוצגות רק השורות של חברה זו,דוגמה זו זהה לדוגמה הקודמת
Microsoft SQL Server 7.0 Administator Companion דוגמה זו לקוחה מהספר
CREATE PROCEDURE LateShippmentsByShipperName @shipperName char(40)
AS
SELECT RequiredDate, ShippedDate, Shippers.CompanyName
FROM Orders, Shippers
WHERE ShippedDate > RequiredDate
AND Orders.ShipVia = Shippers.ShipperID
AND Shippers.CompanyName = @shipperName
GO
:Query Analyzer הפעלת הפרוצדורה מתוך
EXECUTE LateShipmentsByShipperName "Speedy Express"
הג ד רת ערך ברירת מחדל לפרמטרים
CREATE PROCEDURE proce_name @parameter1 type [= deft_val], @parameter2
type [= def_val]...
AS
statements...
GO
1 דוגמה
דוגמה זו מציבה בפרוצדורה הקודמת ערך ברירת מחדל עבור שם חברת המשלוחים
Microsoft SQL Server 7.0 Administator Companion דוגמה זו לקוחה מהספר
CREATE PROCEDURE LateShippmentsByShipperName @shipperName char(40) =
"United Package"
AS
SELECT RequiredDate, ShippedDate, Shippers.CompanyName
FROM Orders, Shippers
WHERE ShippedDate > RequiredDate
AND Orders.ShipVia = Shippers.ShipperID
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור :11כתיבת Stored ProceduresבSQL Server-
AND Shippers.CompanyName = @shipperName
GO
הפעלת הפרוצדורה מתוך :Query Analyzer
EXECUTE LateShipmentsByShipperName
"EXECUTE LateShipmentsByShipperName "Speedy Express
החזרת ערך מפרוצדורה באמצעות משת נה
CREATE PROCEDURE proce_name @parameter1 type [= deft_val] OUTPUT,...
AS
statements...
GO
דוגמה 4
בדומה הבאה ניצור פרוצדורה בשם GetUnitPrice
פרוצדורה זו מחזירה באמצעות המשתנה unit_priceאת המחיר ליחידה של מוצר שמספר הזיהוי שלו נתון
בprod_id-
דוגמה זו לקוחה מהספר Microsoft SQL Server 7.0 Administator Companion
CREATE PROCEDURE GetUnitPrice @prod_id INT, @unit_price MONEY OUTPUT
AS
SELECT @unit_price = UnitPrice
FROM Products
WHERE ProductID = @prod_id
GO
הפעלת הפרוצדורה מתוך :Query Analyzer
oיש להצהיר (באמצעות )DECLAREעל משתנה שיאוחסן בו הערך המוחזר מהפרוצדורה
oאת הפרמטר יש להעביר תוך שימוש במילה OUTPUT
oניתן להדפיס ערך באמצעות הפונקציה PRINT
oאם רוצים להמיר סוג נתונים לסוג אחר ,ניתן להשתמש בפונקציה CONVERT
DECLARE @price MONEY
EXEC GetUnitPrice 77, @price output
)PRINT CONVERT(VARCHAR(8), @price
דוגמה 3
ניתן להשתמש במשתנה הן כדי להעביר ערך לפרוצדורה והן כדי לקבל ערך מוחזר מהפרוצדורה
בדוגמה זו ניצור פרוצדורה בשם GetBossהמחזירה באמצעות emp_idאת מספר הזיהוי של המנהל של עובד
שמספר הזיהוי שלו מועבר באמצעות emp_id
בטבלת ( Employeesב )Northwind-שינו שדה בשם ReportsToהמזהה את מספר המנהל
אם מדובר במנהל הראשי ,מוחזר המספר 0
שים לב שניתן להשתמש במשפט תנאי IF...BEGIN...END
כדי להשים ערך למשתנה יש להשתמש במילה SETלפני ההשמה
CREATE PROCEDURE GetBoss @emp_id INT OUTPUT
AS
SELECT @emp_id = ReportsTo
FROM Employees
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
WHERE EmployeeID = @emp_id
IF @emp_id IS NULL
BEGIN
SET @emp_id = 0
END
GO
:Query Analyzerהפעלת הפרוצדורה מתוך ה
DECLARE @emp INT
SET @emp = 8
EXEC GetBoss @emp OUTPUT
PRINT CONVERT(VARCHAR(4), @emp)
שימוש במשתנים מקומי ים
DECLARE ניתן להצהיר על משתנים מקומיים בפרוצדורה באמצעות
6 דוגמה
) (שניצור בהמשךPupilsTBL שורות חדשות לטבלת5 הפרוצדורה הבאה מכניסה
pupil_name- וpupil_id :בטבלה זו שני שדות
WHILE...BEGIN...END בפרוצדורה נעשה שימוש בלולאה
CREATE PROCEDURE Insert5Rows @low_val NUMERIC
AS
DECLARE @loop_counter NUMERIC
SET @loop_counter = 5
WHILE @loop_counter > 0
BEGIN
INSERT INTO PupilsTBL VALUES (@low_val, "new_pupil")
SET @low_val = @low_val + 1
SET @loop_counter = @loop_counter - 1
END
GO
:Query Analyzer הרצה מתוך
CREATE TABLE... תחילה ניצור את הטבלה באמצעות המשפטo
לאחר מכן נריץ את הפרוצדורהo
SELECT לבסוף נציג את התוצאות באמצעות המשפטo
CREATE TABLE PupilsTBL (pupil_id NUMERIC(4), pupil_name NVARCHAR(20))
EXEC Insert5Rows 8
SELECT * FROM PupilsTBL
RETURN יציאה מפרוצדורה באמצעות
RETURN ניתן לצאת מפרוצדורה באופן מיידי על ידי שימוש במילה
) לתוכנית הקוראתINT( ערך מסוג שלםRETURN ניתן להחזיר באמצעות
- 113 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
SQL Server- בStored Procedures כתיבת:11 שיעור
7 דוגמה
: המקבלת מספר מוצר ומחזירה את הערכים הבאיםGetPriceCategory בדוגמה זו ניצור פרוצדורה בשם
) לפרוצדורה (זהו יהיה גם ערך ברירת המחדלNULL אם הועבר-1 o
Products אם המוצר אינו קיים בטבלה0 o
דולר20- אם מחירו של המוצר קטן מ1 o
דולר30- אם מחירו של המוצר קטן מ2 o
דולר50- אם מחירו של המוצר קטן מ3 o
בכל מקרה אחר99 o
CASE...WHEN...THEN...END לצורך הדוגמה נשתמש במשפט
CREATE PROCEDURE GetPriceCategory @prod_id INT = NULL
AS
DECLARE @price INT
IF @prod_id IS NULL
RETURN -1
SELECT
@price = UnitPrice FROM Products WHERE ProductID = @prod_id
RETURN
CASE
WHEN
@price IS NULL THEN 0
WHEN @price < 20 THEN 1
WHEN @price < 30 THEN 2
WHEN @price < 50 THEN 3
ELSE 99
END
GO
:Query Analyzer הרצה באמצעות
DECLARE @cat_id INT
EXEC @cat_id = GetPriceCategory 38
PRINT @cat_id
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
בשיעור זה:
אסקור בפניך את אפשרויות החיבור השונות מהיישום שלך ב Visual Basic-למקורות נתונים
תכיר את מודל האובייקטים של הספרייה ADODB
תכיר את המאפינים ,השיטות והאירועים של האובייקטים השונים של ADO
סקירה של טכנולוגיות הגישה לנתונים
קיימות שיטות רבות לגישה לנתונים ,החל מטכנולוגיות מבוססות ממשקי קריאות ,APIוכלה באובייקטים
וויזואליים נוחים המתממשקים למסדי נתונים
Visual Basicתומכת באפשרויות רבות המאפשרות גישה לנתונים
בסעיף זה נסקור אוסף הרכיבים הללו ,ונראה את אפשרויות החיבור השונות
הגרף הבא מתאר את היררכית האובייקטים ,הספריות ורכיבי הקוד השונים המפרידים בין יישום Visual Basic
לבין שכבת הData-
Visual Basic Application
ADO Data
Control
Data
Control
Remote Data
Control
DAO
ODBCDirect
RDO
ADO
Jet Engine
ODBC Driver Manager
MSDASQL
OLE DB
Provider
Specific ODBC Driver
Database
) Open Database Connectivity ( ODBC
ODBCמספק ממשק APIלקישור עם Databases
ODBCמהיר מאוד כיוון שהוא מבוסס ,)Call Level Interface( CLIמשתמש המפעיל פונקציות ODBC API
מנצל תקורת ( )Overheadמשאבים נמוכה יחסית ,לעומת תקורת קוד גבוהה
,ODBCהחל מגרסה ,3תומך ב .Connection Pooling-כיוון שהתחברות לשרת Databaseהא פעולה ארוכה,
ODBCמנהל חיבורים פתוחים ,כך שייתכן שבקוד שלך מתבצעת פתיחה וסגירה של חיבורים ל Databases-אך
בפועל אותו חיבור ב ODBC-משרת את כל החיבורים שלך
בעת התחברות ,נבחר ה Driver-הספציפי המותאם לעבודה עם ה Database-הספציפי
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
המידע אודות ה ,Database-מיקומו ,אופן ההתחברות אליו ,שם המשתמש והסיסמה המשמשים בהתחברות אליו,
שם ה Driver-המשמש לתקשורת עמו ועוד נשמרים ב)Data Source Name( DSN-
ניתן ליצור DSNמתוך ה ,Control Panel-או מתוך הקוד של התוכנית
קיימים שלושה סוגים של :DSN
DSN :User DSN oהזמין לאותו משתמש בלבד
DSN :System DSN oהזמין לכל המשתמשים במערכת ,כולל שירותי IIS( NTממומש כשירות NT
ולפיכך יש לשתף Databasesשאמורים להשתמש בשירות זה)
DSN :File DSN oהמאפשר לשמור את ההגדרות בקובץ (עם הסיומת ,)*.dsnכך שמשתמשים ברחבי
הרשת יכולים לשתף אותו בניהם ,בתנאי שיש להם Driversמתאימים
הערה :בשני הסוגים הראשונים המידע מאוחסן בRegistry-
כרטיסיות ODBCבControl Panel-
הערה :ב Win2k-יש להיכנס ל Administration Tools-ומשם לפתוח )Data Sources (ODBC
:User DSNכרטיסייה ליצירת DSNשל משתמש ספציפי
:System DSNהכרטיסייה ליצרית DSNשל מערכת
:File DSNהכרטיסייה ליצירת DSNהנשמר בקובץ
:Driversמציג את רשימת ה Drivers-המותקנים ומידע נוסף לגביהם
:Tracingמאפשר לבצע מעקב אחר פעולות ה ,ODBC-כולל הפעלה משולבת יחד עם Visual Studio Analyzer
המאפשר ביצוע אבחון ברשת של פעולות היישום
:Connection Poolingמאפשר לקבוע את הגדרות ה Connection Pooling-עבור ה Drivers-הספציפיים
השונים של ODBC
) Data Access Object ( DAO
DAOהוא ממשק תכנות מונחה עצמים הפועל על גבי מנוע ( Jetמנוע Jetהוא מנוע ה Databases-היוצר ומנהל
קובצי *.mdbהמוכרים מ)Access-
DAOעוצב והותאם המיוחד לעבודה מול Databasesשל Access
ניתן לגשת לטבלאות מכל Databaseשקיים עבורו ,ODBC Driverבאמצעות שיטת הטבלאות המקושרות של
Access
חסרון השימוש במנוע Jetהוא בכך שכולו נטען לזכרון ,גם אם עובדים עם Databaseמסוג שונה מ*.mdb-
DAOאינו חושף את כל היכולות של ODBC API
DAOלא פותחה רבות מאז גרסת ,3.5וככל הנראה Microsoftרואה את העתיד כשייך לADO-
) Data Control ( DC
Data Controlהוא פקד סטנדרטי של Visual Basic
זהו ממשק וויזואלי המאפשר חיבור לDatabase-
Data Controlמהווה ממשק וויזואלי (לא כ"כ מתוחכם) לDAO-
ניתן לכרוך פקדים ( )to bindלמקורות מידע המסופקים ע"י הData Control-
כריכת פקדים היא פעולה שהופכת את היישום לדו שכבתי (שכבת תוכנית המשתמש ושכבת ה ,)Database-ולפיכך
קיימים בכך חסרונות עיצוב רבים
) Remote Data Object ( RDO
RDOמשלב את הפשטות של DAOעם הכוח של ODBC
RDOמדלג על מנוע Jetמה שמשפר את הביצועים באופן ניכר
RDOעוצב המיוחד לעבודה מול ODBC API
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
הגרסה האחרונה של RDOהיא ( 2.0והיא דיי ישנה) ,כך שניתן להסיק ש Microsoft-דוחפת אותנו "בגסות"
לכיוון הADO-
) Remote Data Control ( RDC
Remote Data Controlהוא פקד וויזואלי הדומה בתפקודו ל Data Control-הסטנדרטי של Visual Basic
כל היתרונות והחסרונות של הפקד Data Controlקיימים גם בRemote Data Control-
ההבדל בין Data Controlל Remote Data Control-הוא בשכבת הביניים .עבור DCזהו אובייקט DAOואילו
עבור RDCזהו אובייקט RDO
ODBCDirect
ODBCDirectהוא מצב פעולה של DAOהטוען את רכיב RDOבמקום מנוע Jet
כדי להפעיל אובייקט DAOבמצב ODBCDircetיש לרשום:
DBEngine.DefaultType = dbUseODBC
במקרה של מצב פעולה של ,ODBCDirectניתן לנצל את יתרונות ODBCואת פשטות הקוד של DAO
OLE DB
OLE DBמגדיר ממשקי COMסטנדרטיים שעל כל OLE DB Providerלתמוך בהם ,כדי שצרכני ()Consumers
מידע יוכלו להתקשר אליו באמצעות ממשקים אלו
התחברות ישירה יכולה להתבצע דרך קוד הכתוב בשפת Cמבוסס על קריאות ,COM APIהתחברות באופן כזה
מתוך קוד Visual Basicהיא כמעט בלתי אפשרית לשם כך קיימים רכיבי ADOשנכיר ונתמקד בהם בפרק זה
יתרונה הגדול של טכנולוגיה זו הוא בתמיכה בסוגי מידע שונים ולאו דווקאב-Database-ים רגילים
באמצעות OLE DBניתן לגשת למידע שבכל קובץ נתונים ,מסוג כלשהו ,כולל מסמך ,Excelהודעת דואר ועוד,
ובתנאי שקיים עבורו OLE DB Providerמתאים
השכבה היחידה שחוצצת בין ה Database-לבין היישום ,הוא .OLE DB Providerכיוון שברכיב זה קיימת
תמיכה בממשקי COMהדרושים ,אין צורך בשכבה מפרידה כמו בODBC-
הנתונים שאליהם ניתן לגשת ב OLE DB-הם כל הנתונים תומכי COMולא רק נתונים סטנדרטיים של SQL
) ActiveX Data Objects ( ADO
ADOהוא ממשק עילי לOLE DB-
כיאה לממשקי ADO ,COMתומך ב OLE DB Provider-המציעים ממשקים נוספים המרחיבים את יכולת
פעילותו של ADO
הפונקציונליות של ADOאינה ממוקמת ב DLL-יחיד ,אלה במספר -DLLים .לכן אין צורך להפיץ את כל
ה-DLL-ים למשתמש הקצה אם אין שימוש בפונקציונליות של כולם
ניתן להשתמש ב ADO-מתוך קוד HTMLוASP-
תת מערכת של ADOבשם Remote Data Servicesמאפשר שליחת רשומות ל Client-ברחבי הרשת ,ואפילו
הפעלת COM Componentsאצל הClient-
MSDASQL
MSDASQLהוא אחד מה-Proveder-ים של OLE DB
הייחוד ב MSDASQL-הוא בכך שהוא מהווה Providerמתאם בין OLE DBלODBC-
הצורך ב MSDASQL-קיים ,כיוון שישנם -DBMSים שעדיין לא פותח עבורם OLE DB Providerמתאים
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
) ADO Data Control ( ADODC
ADODCהינו אובייקט וויזואלי הדומה בעיקרו ל DC-ול ,RDC-אם כי ADODCמציג מספר שיפורים לעומת
DCוRDC-
ADODCמשתמש ב )OLE DB( ADO-כשכבת הביניים להתקשרות מול מקור הנתונים
תרגיל Nwi ndDSN – 1
בדוגמה זו ניצור DSNבאמצעות לוח הבקרה של Windows
.1פתח את חלון :ODBC Data Source Administrator
פתח את הControl Panel-
בWindows 2000-מתוך ה Control Panel-בחר בAdministrative Tools-
בחר ב ( ODBC-או ) Data Sources (ODBCב)Windows 2000-
.1הכר את הכרטיסיות השונות ביישום :ODBC Data Source Admiistrator
לפני שניגש להגדרת ה DSN-בתרגיל זה ,נכיר את הכרטיסיות השונות
הכרטיסיה :User DSN
בכרטיסייה User DSNאתה יכול להוסיף ( DSN )Add...חדש השייך למשתמש בנוכחי בלבד במערכת ( User
,)DSNולהגדיר ( )Configure...את המאפיינים שלו ,או להסיר User DSNקיים
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
הכרטיסיה :System DSN
בכרטיסייה System DSNניתן לבצע את אותם הפעולות כמו ב ,User DSN-אלא שה-DSN-ים הנוצרים
ומוגדרים בכרטיסייה זו יהיהו זמינים לכל משתמשי המערכת ()System DSN
הכרטיסיה :File DSN
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
בכרטיסייה File DSNתוכל ליצור -DSNים חדשים ולהגדירם ,כמו גם להסיר -DSNים קיימים .ה-DSN-ים
הנוצרים בכרטיסיה זו נשמרים בקבצים ()File DSN
File DSNנשמרים בדרך כלל בספרייה .C:\Program Files\Common Files\ODBC\Data Sourcesאם
תרצה לשנות את מיקום קובץ ה DSN-שאתה יוצר יהיה עליך ללחוץ על Set Directoryלאחר המעבר
לספרייה המתאימה
הכרטיסיה :Drivers
בכרטיסיה Driversמוצגים ה-Driver-ים השונים של ODBCהמותקנים במערכת והפרטים הבאים עבור כל
:Driver
:Version oמספר הגירסה של הDriver-
:Company oשם החברה המייצרת
:File oשם קובץ ה DLL-של הDriver-
:Date oהתאריך האחרון בו שונה הקובץ
- 112אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
הכרטיסיה :Tracing
בכרטיסיה Tracingתוכל להפעיל מעקב אחר פעולות ODBCשיירשמו בקובץ ששמו נתון בשדה Log file
.Pathאפשרות זו יכולה לסייע כשעובדים באופן ישיר או עקיף (באמצעות ADOלמשל) יחד עם .ODBC
תוכל גם להפעיל את Visual Studio Analyzerכדי לאבחן פעולות של היישום שלך ברחבי הרשת .בשדה
Custom Trace DLLתוכל לבחור DLLאחר שינהל את פעולות המעקב ,אן קיים אחד כזה ברשותך
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
הכרטיסיה :Connetion Pooling
בכרטיסייה Connection Poolingתוכל להגדיר את ההגדרות הבאות:
:Connetion Pooling Timeout oבשדה זה אתה מגדיר את משך הזמן שבו יישארו
-Connectionים בזיכרון לאחר סגירתם .המטרה בהשארת -Connectionים בזכרון ה Pooling-היא
לחסוך את זמן ההתחברות בעת יצירת חיבורים חדשים על ידי אותה תוכנית אם קיימים חיבורים
פנויים המתאימים לדרישות החיבור החדש של התוכנית .כדי לשנות הגדרה זו עבור Driverמסוים,
עליך להקליק על שמו ולהתאים את ההגדרות בתיבת הדו שיח המתקבלת (מוצגת להלן):
:)Performance Monitoring( PerfMon oסימון אפשרות זו מאפשר מעקב אחר ביצועי
ה Connection Pooling-של כל ה-Driver-ים
:Retry Wait Time oכאשר ניסיון התחברות למערכת ניהול -Databaseים נכשלת ,מתבצע ניסיון
נוסף .משך הזמן בשניות בין ניסיון אחד למשנהו מוגדר בשדה זה
מומלץ שלא לשנות ההגדרות של ה Connection Pooling-אלא אם אתה מודע למשמעות השינויים שאתה
מבצע
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
.3
.1
.1
.1
.1
.1
הכרטיסיה :About
בכרטיסייה Aboutתוכל לצפות במידע אודות קובצי הליבה ( )Coreהמנהלים את תת המערכת ODBCתחת
מערכת ההפעלה
הוסף :DSN
וודא שהכרטיסייה UserDSNנבחרה
לחץ על Add
בחר ב Driver-המתאים:
מתוך רשימת ה-Driver-ים המוצעים בחר בSQL Server-
לחץ על Finish
הקצה שם ל:DSN-
בשדה Nameהקצה את השם NwindDSN
הקצה תיאור ל:DSN-
בשדה Descriptionרשום DSNאם Northwind Database
קבע את מיקום ה Server-ברשת:
בשדה Serverבחר מהרשימה הנפתחת או הקלד ידנית את שם המחשב ברשת שבו נמצאת מערכת הSQL -
Serverשאליה תרצה להתחבר באמצעות DSNזה (אם מערכת ה SQL Server-מותקנת במחשב המקומי
ושמו אינו מוצג ברשימה הנפתחת ,תוכל להשתמש גם בכתובת ה)127.0.0.1 :IP-
בחר את שם המשתמש והסיסמה באמצעותם תתחבר ל:SQL Server-
אם שם מערכת ה SQL Server-אליה אתה מתחבר מאפשרת כניסה באמצעות שם המשתמש והסיסמה של
,Windows NT/2000אזי תוכל לבחור באפשרותWith Windows NT Authentication...
תוכל לבחור באפשרות With SQL Server Authentication...ובתחתית החלוןהקלד את שם המשתמש
והסיסמה באופן מפורש
- 113אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
בדוגמה זו הקלד saעבור שם המשתמש והשאר את הסיסמה ריקה (בעת התקנת SQL Serverנוסף באופן
אוטומטי מנהל מערכת בשם saללא סיסמה ,אם שינית את הסיסמה התאם את השדה Passwordבהתאם)
לחץ על Next
.1בחר ב Database-אליו תרצה להתחבר:
סמן Vב Change the default database to:-ומתוך הרשימה הנפתחת בחר Northwind
לחץ על Next
.12סיים את הגדרת ה:DSN
השאר את ההגדרות במסך האחרון ללא שינו ולחץ על Finish
)ACTIVEX DATA OBJECTS( ADO
כאמור ADO ,הוא ממשק עילי לOLE DB-
בסעיף זה נסקור את מודל העצמים של ADOונלמד להשתמש בכל אחד מהאובייקטים הללו
כדי לכלול את ספריית ADOבפרוייקט Visual Basicבצע את השלבים הבאים:
.1פתח את החלון Referencesעל ידי בחירת האפשרות Referencesמהתפריט Project
.1הוסף הפנייה לספרייה .Microsoft ActiveX Data Objects 2.7ייתכן שבמחשב שלך הגרסה 2.7לא תופיעה,
או שתופיעה גרסה מתקדמת יותר .בכל מקרה מומלץ לבחור בגרסה המעודכת היותר של הספרייה.
התרשים הבא מציג את היררכית ה-Object-ים וה-Collection-ים שבספרייה ( ADODBהספרייה ADODBהיא
הספרייה המכילה את האובייקטים של :)ADO
ADODB
Connection
Error
Errors
Property
Properties
Command
Parameter
Parameters
Property
Properties
Recordset
Field
Property
Fields
Properties
Property
Properties
מקרא:
( Libraryספרייה)
( Collectionאוסף)
( Objectאובייקט)
בהמשך השיעור נתעכב על כל אחד מהאובייקטים והאוספים הללו
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
Data Link
בדומה ל Data Link ,DSN-מהווה את אוסף הפרטים הנחוצים לשם פניה למקור נתונים על ידי אובייקט ADO
Data Linkהוא קובץ טקסט הכולל פרטי מידע אודות שם ה Provider-באמצעותו ניגשים למקור הנתונים ,שם
מקור הנתונים ומיקומו ועוד.
בעת בחירת Providerמשתנים הפרטים הנוספים הנדרשים לפי סוג ה .Provider-כך למשל אם בחרת
ב( MSDASQL-זהו ה Provider-עבור מקור נתונים של )ODBCתידרש להזין את שם ה DSN-ולא יהיה צורך
בציון מקור הנתונים כיוון שהוא כלול כבר בתוך ה .DSN-אם ,לעומת זאת ,בחרת ב( SQLOLEDB-זהו Provider
עבור )SQLServerתידרש להזין את שם המחשב עליו מצוי ה SQL Server-ושם ה Database-אליו ברצונך לגשת.
יצירת קובץ Data Link
תחת Windows 98או :Windows NT
.1פתח את הסייר ועבור לספרייה שברצונך ליצור בה את הקובץ
.1לחץ לחיצה ימנית על העכבר במקום ריק בספריה ובחר באפשרות New
.3בחר Microsoft Data Link
.1הקצה שם לקובץ
תחת ( Windows 2000פועל גם ב Windows 98-ו:)Windows NT-
.1פתח את הסייר ועבור לספרייה שברצונך ליצור בה את הקובץ
.1לחץ לחיצה ימנית על העכבר במקום ריק בספריה ובחר בNew-
.3בחר באפשרות Text Document
.1הקצה לקובץ שם כרצונך ,ושנה את הסיומת שלו ל( .udl-אם אינך רואה את סיומת הקובץ בחר באפשרות
Folder Optionsמתוך התפריט Toolsובכרטיסייה Viewנקה את הסימון ליד Hide file Extensions for
known file typesולחץ על )OK
.1אל תתייחס לאזהרה שתתקבל כתוצאה משינוי הסיומת
לאחר שיצרת את הקובץ הקלק עליו והתאם את ההגדרות בתיבת הדו שיח Data Link Properties
בתרגילים הבאים ובסעיף העוסק באובייקט ,Connectionתכיר היטב את פרטי המידע הנחוצים לשם הגדרת
Data Linkואת משמעותם
תרגיל NWind.udl : 2
בתרגיל זה ניצור קובץ Data Linkשיכיל את הנתונים הדרושים לשם פניה לNwind.mdb-
.1צור קובץ Data Linkריק:
צור קובץ עם הסיומת .udlכפי שהוסבר בסעיף הקודם
הקצה לקובץ את השם NWind.udl
.1פתח את תיבת הדו שיח Data Link Propertiesוהכר את הכרטיסיות שבו:
הקלק על הקובץ ,תיבת הדו שיח Data Link Propertiesאמורה להיפתח
לפני שנתאים את ההגדרות ,נבחן את הכרטיסיות השונות של תיבת הדו שיח Data Link
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
הכרטיסיה :Provider
בכרטיסייה Providerאתה בוחר את ה OLE DB Provider-לפי סוג מקור הנתונים שאליו אתה מתכוון
לגשת:
oעבור -Databaseים של Accessבחר ב Microsoft Jet 3.51 OLE DB Provider-או גירסה 4.0
שהיא מעודכנת יותר
oעבור -Databaseים של SQL Serverבחר בMicrosoft OLE DB Provider for SQL Server-
oעבור -Databaseים של Oracleבחר ב Microsoft OLE DB Provider for Oracle-או בProvider-
אחר המתאים ל Oracle-אם קיים כזה במחשב שלך
oעבור גישה ל Database-שלא קיים עבורו OLE DB Providerאך קיים עבורו Driverשל ,ODBC
בחר ב .Microsoft OLE DB Provider for ODBC Drivers-שים לב ש Provider-זה מסומן
כברירת מחדל אם לא בחרת Providerאחר
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
הכרטיסייה :Connection
הכרטיסייה Connectionמאפשרת להגדיר את מיקום ה ,Database-שם המשתמש והסיסמה וכו'.
הפרטים בתוך כרטיסייה זו משתנים בהתאם ל Provider-שנבחר בכרטיסייה הראשונה
את פרטי הכרטיסייה הזו תכיר בהמשך תרגיל זה ובשני התרגילים הבאים
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
הכרטיסייה :Advanced
Connect Timeoutמגדיר את משך הזמן בשניות בהן יתבצע ניסיון התחברות למקור הנתונים .אם החיבור
לא התליח בפרק זמן זה תתרחש שגיאה
Access Permissionsמגדיר את הרשאות הגישה ל Database-בסעיף העוסק במאפיין Modeשל האובייקט
( Connectionבהמשך) תמצא הסבר אודות האפשרויות השונות
Impersonation Levelו Protection Level-מאפשרים הגדרות שונות עבור חיבור למקורות נתונים ברחבי
הרשת המבוססים על שיטות קריאה שונות מאשר ,)Remote Procedure Call( RPCברוב המקרים הגדרות
אלו אינן רלוונטיות
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
הכרטיסייה :All
בכרטיסייה Allמוצגים כל המאפיינים של ה Provider-שבחרת בכרטיסייה הראשונה ,בין שהגדרת להם
ערכים ובין שלא הגדרת להם ערכים
המאפיינים המוצגים בכרטיסייה זו שונים עבור -Providerים שונים
תוכל לסמן מאפיין מסויים ולהגדיר את ערכו באמצעות לחיצה על הכפתור Edit Value...
בדרך כלל לא תצטרך להגדיר מאפיינים שאינם סטנדרטיים ,אך אם בכל זאת תרצה להבין את משמעותו של
מאפיין מסויים ,יהיה עליך לעיין בתיעור של ה Provider-המתאים
.3הגדר את מאפייני ה:Data Link-
בכרטיסייה :Provider
oבחר ב( Microsoft Jet 4.0 OLE DB Provider-אם ברשותך גרסה מעודכנת יותר מ 4.0-בחר בה)
בכרטיסייה :Connection
oבסעיף )Select or enter a database name( 1הזן את המסלול של ( NWIND.MDBקובץ זה נמצא
תחת ספריית ההתקנה של , Visual Basicבמחשב שלי המסלול הוא :
,C:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDBאם בחרת בספריית
התקנה שונה בעת התקנת Visual Studioהתאם את המסלול בהתאם)
oלחץ על Test Connectionכדי לוודא שההתחברות ל Database-מצליחה
בכרטיסייה :Advanced
oהשאר את הגדרת ה Access permissions-כמו שהיא
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
בכרטיסייה :All
oתוכל לעיין בכרטיסייה Allכדי לצפות בהגדרות שקבעת עד כה .תוכל גם לשנות הגדרות בכרטיסיה
זו ,או להגדיר ערכי מאפיינים שאינם מופיעים בכרטיסיות הקודמות
.1אשר את ההגדרות:
לחץ על OKוסגור את תיבת הדו שיח
.1עיין בקובץ :NWind.udl
פתח את הקובץ NWind.udlבאמצעות ה Notepad-ועיין במבנה הקובץ ובאופן שבו נשמרו ההגדרות השונות
כפי שקבעת בכרטיסיות השונות
תרגיל Pubs.udl : 1
בתרגיל זה ניצור קובץ Data Linkשיכיל את פרטי המידע הדרושים לשם פניה ל Database-בשם Pubsהנמצא
בSQL Server-
.1צור קובץ Data Linkריק:
צור קובץ Data Linkריק כפי שביצעת בתרגיל הקודם והקצה לו את השם Pubs.udl
.1הגדר את מאפייני ה:Data Link-
בכרטיסייה :Provider
oבחר בMicrosoft OLE DB Provider for SQL Server-
בכרטיסייה :Connection
oבסעיף )Select or enter a server name( 1בחר בשם המחשב בו נמצאת תוכנת הSQL Server-
שלך (אם התוכנה מותקנת על אותו המחשב בו ממוקם קובץ ה Data Link-ואינך יודע מה שמו של
המחשב ברשת ,תוכל להזין בשדה זה את כתובת ה .127.0.0.1 IP-כתובת זו היא כתובת
ה loopback-אשר מצביעה חזרה על המחשב המקומי)
oבסעיף )Enter information to log on to the server( 2קיימות שתי אפשרויות:
:Use Windows NT Integrated security אפשרות זו מתאימה אם התקנת הSQL -
Serverאליה אתה מתחבר מאפשרת התחברות אוטומטית באמצעות שם המשתמש
והסיסמה של מערכת ההפעלה Windows NTשעליה היא מותקנת
:Use a spesific username and password באפשרות זו אתה מזין את שם המשתמש
והסיסמה ידנית .בעת התקנת SQL Serverנוצר באופן אוטומטי usernameששמו הוא sa
בעל סיסמה ריקה .אם לא שינית את ההגדרות ב SQL Server-הזן saלשדה username
והשאר את הסיסמה ריקה .אם הסיסמה ריקה הוסף סימן Vליד האפשרות Blank
.passwordאם אתה מזין סיסמה שאתה מעוניין שתישמר בקובץ ה Data Link-עליך לסמן
Vליד האפשרות Allow Saving Password
oבסעיף 3עליך לבחור את ה Database-אליו תרצה להתחבר .באפשרותך לציין את הDatabase-
בשתי צורות:
לסמן Vליד האפשרות ,Select the database on the serverולבחור ב Pubs-מתוך רשימת
ה-Database-ים
לסמן Vליד האפשרות ,Attach a database file as a database nameולבחור את השם
Pubsבשדה הראשון ,ולהזין את מיקום הקובץ pubs.mdfבשדה השני (SQL Server
ממקם קובץ זה תחת תת הספרייה Dataשתחת ספריית ההתקנה של ,SQL Serverבדרך
כלל זהו )C:\Program Files\Microsoft SQL Server\Data\Pubs.MDF
הערה :בשונה מ Access-יישומים רציניים לניהול -Databaseים ,למשל ,SQL Server
DB2 ,Oracleועוד ,שומרים את הנתונים ופרטי המידע הדרושים עבור ניהולו השוטף של
Databaseבמספר קבצים .במקרה של SQL Serverקיימים שלושה סוגי קבצים:
קובץ עם הסיומת :.MDFזהו קובץ הנתונים הראשי של הDatabase-
- 112אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
קבצים עם הסיומת :.NDFאלו הם קובצי נתונים משניים של הDatabase-
קבצים עם הסיומת :.LDFאלו הם קובצי רישום ( )Log Filesהמשמשים
לפיעילותו השוטפת של הDatabase-
oתוכל לבדוק אם ההתחברות ל Database-מצליחה על ידי לחיצה על Test Connection
בכרטיסיה :Advanced
oבשדה Connect timeoutהקצה 30שניות לניסיון ההתחברות
oשים לב שה Provider-עבור SQL Serverאינו תומך באפשרות Access permissions
בכרטיסיה :All
oתוכל לעיין בערכי המאפיינים שהזנת
oתוכל גם לשנות את ערכי המאפיינים ,או להזין ערכים למאפיינים שאינם מופיעים בכרטיסיות
Connectionו( Advanced-אני ממליץ בפניך לא לשנות ערכי מאפיינים שאינך יודע את משמעותם)
.3אשר את ההגדרות:
לחץ על OKוסגור את תיבת הדו שיח
.1עיין בקובץ :Pubs.udl
פתח את הקובץ ,Pubs.udlשזה עתה יצרת ,באמצעות היישום ,Notepadובחן את תוכנו ואת מבנהו
תר גיל NWindDSN.udl : 4
.1
.1
.3
.1
בתרגיל זה ניצור קובץ Data Linkשיכיל את פרטי המידע הדרושים לשם פניה ל Database-בשם Northwind
המצוי ב SQL Server-תוך שימוש ב DSN-שיצרנו בתרגיל 1בשם NWindDSN
צור קובץ Data Linkריק:
צור קובץ Data Linkריק והקצה לו את השם NWindDSN.udlכפי שביצעת בשני התרגילים הקודמים
הגדר את מאפייני ה:Data Link-
בכרטיסייה :Provider
oבחר ב( Microsoft OLE DB Provider for ODBC Drivers-זוהי אפשרות ברירת המחדל)
בכרטיסייה :Connection
oבסעיף )Use data source name( 1בלר מהרשימה הנפתחת ב( NwindDSN-זהו הUser DSN-
שיצרנו בתרגיל .)1תוכל גם ליצור ConnectionStringאך נושא זה יילמד בהמשך השיעור.
oבסעיף )Enter information to log on to the server( 2הקצה שם משתמש וסיסמה מתאימים
לשם התחברות לDatabase-
oלחץ על Test Connectionעל מנת לוודא שההתחברות מצליחה
בכרטיסייה :Advanced
oתוכל לשנות את הגדרות ה Connect timeout-והגדרות ה( Access permissions-האפשרויות
השונות של ה Access permissions-יילמדו בהמשך ,כאשר תכיר את המאפיין Modeשל האובייקט
.)Connectionלצורך תרגיל זה אני ממליץ בפניך להשאיר את ההגדרות כמו שהן
אשר את ההגדרות:
אשר את ההגדרות על ידי לחיצה על OK
עיין בקובץ :NWindDSN.udl
באמצעות ה Notepad-פתח את הקובץ NWindDSN.udlכדי לעיין במבנהו ותוכנו של הקובץ
האובייקט Connection
אובייקט Connectionשולט על התקשרות אחת למקור נתונים
אובייקט Connectionמשמש כמכולה לטרנזקציות מול מקור הנתונים
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
מאפיינים ,מתודות ואירועים להכנה וביצוע התחברות למקור נתונים
הערה :לא כל המאפיינים נתמכים על ידי כל ה-Provider-ים השונים .למשל המאפיין Modeנתמך על ידי הProvider-
של )Microsoft.Jet.OLEDB( Accessאך אינו נתמך על ידי ה Provider-של .)SQLOLEDB( SQL Serverאינך צריך
לזכור את כל המאפיינים הנתמכים על ידי Providerמסויים כיוון שיצירת ה ConnectionString-הכוללת את
המאפיינים נעשית בדרך כלל על ידי .Wizard
:Provider מגדיר את שם ה OLE DB Provider-המשמש לביצוע ההתחברות .ברירת המחדל היא MSDASQL
המאפשר התחברות באמצעות Driverשל .ODBCניתן להגדיר מאפיין זה כחלק מהמאפיינים בתוך
ה ConnectionString-כפי שיוסבר להלן ,או כאובייקט .Propertyלדוגמה כדי להגדיר את הProveider
כ Provider( SQLOLEDB.1-עבור )SQL Serverניתן להשתמש בכל אחת מהצורות הבאות:
Dim conn As New ADODB.Connection
...
...
"conn.Provider = "SQLOLEDB.1
או
"conn.Properties("Provider") = "SQLOLEDB.1
או
"conn.ConnectionString = "Provider=SQLOLEDB.1;...
:ConnectionStringמחרוזת המכילה את מאפיני החיבור השונים .המחרוזת היא במבנה של
" "PropertyName1=Value; PropertyName2=Value;...כאשר PropertyNameהוא שם של מאפיין וValue-
הוא הערך המושם לאותו מאפיין .ניתן להגדיר את מאפייני החיבור גם באמצעות האוסף Propertiesכפי שהודגם
קודם .קיימים מאפיינים רבים עבור חיבור והם משתנים בין -Providerים שונים .נציין מספר מאפיינים נפוצים:
:Data Source oשם מקור הנתונים או שם של DSNהקיים במערכת במקרה של התחברות למקור נתוני
ODBC
:DSN oשם של DSNהקיים במערכת .מאפיין זה יכול להחליף את Data Sourceבמקרה של התחברות
למקור נתונים של ODBC
:File Name oשם של קובץ המכיל את נתוני ההתחברות .קובץ זה יכול להיות מסוג DSNעבור חיבור
למקור נתונים של ODBCאו שם של קובץ מסוג UDL
:Initial Catalog oהשם של הDefault Database-
:Database oשם ה .Database-ניתן להשתמש במאפיין זה בעת התחברות למקור נתונים של ODBC
:Password oסיסמת המשתמש באמצעותו מתבצע החיבור
:PWD oסיסמת המשתמש באמצעותו מתבצע החיבור .ניתן להשתמש במאפיין זה בעת התחברות למקור
נתונים של ODBC
:Persist Security Info oקובע האם ADOישמור ( )Persistאת שם המשתמש והסיסמה
( )Security Infoבקובץ הData Link-
:Provider oכפי שהוסבר קודם ,זהו שם ה OLE DB Provider-באמצעותו מתבצעת ההתחברות
:User ID oשם המשתמש באמצעותו מתבצעת ההתחברות
:UID oשם המשתמש באמצעותו מתבצעת הנתחברות .ניתן להשתמש במאפיין זה בעת התחברות למקור
נתונים של ODBC
:Default Databaseמחזיר את שם ה .Default Database-מאפיין זה זמין רק לאחר שההתחברות בוצעה ,ואז
הוא לקריאה בלבד
:ConnectionTimeoutמגדיר את משך הזמן (בשניות) המקסימלי שאובייקט ה Connection-ימתין עד להשלמת
ההתחברות למקור הנתונים .אם ההתחברות לא הסתיימה תוך פרק הזמן המוגדר ,תתעורר שגיאה מתאימה .ערך
ברירת המחדל למאפיין זה הוא 15שניות
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
:CommandTimeoutמגדיר את משך הזמן (בשניות) המקסימלי שאובייקט ה Connection-ימתין עד להשלמת
פקודה מול מקור הנתונים .אם הפקודה לא הושלמה תוך פרק הזמן המוגדר תתעורר שגיאה מתאימה .ערך ברירת
המחדל למאפיין זה הוא 30שניות .מאפיין זה משפיע על הפקודות המורצות באופן ישיר באמצעות Connection
זה ,ואינו משפיע על פקודות המורצות מאובייקט Commandהמשתמש באובייקט זה .לאובייקט Commandישנו
מאפיין CommandTimeoutמשלו
:CursorLocationקובע את מיקום ה .Cursor-מאפיין זה יכול לקבל אחד מהערכים הבאים:
הערה Cursor :הינו אובייקטהמכיל רשומה אחת או בלוק של רשומות מתוך אוסף הרשומות המוחזר על ידי
שאילתה ממקור הנתונים
:adUseServer oה Cursor-נוצר במחשב הServer-
:adUseClient oה Cursor-נוצרבמחשב הClient-
שים לב :ניתן ליצור את כל סוגי ה-Cursor-ים ב ,Server-ואילובמחשב ה Client-ניתן ליצור Cursor
מסוג adOpenStaticבלבד .הסבר אודות סוגי ה-Cursor-ים תמצא בהמשך השיעור
:Modeמאפיין זה מגדיר את הרשאות ה .Connection-מאפיין זה יכול לקבל אחד או יותר מהערכים הבאים:
:adModeRead oמאפשר קריאה ממקור הנתונים
:adModeWrite oמאפשר כתיבה למקור הנתונים
:adModeReadWrite oמאפשר קריאה ממקור הנתונים כמו גם כתיבה למקור הנתונים
:adModeShareDenyRead oמונע מלקוחות אחרים להתחבר לאותו מקור נתונים לשם קריאה
:adModeShareDenyWrite oמונע מלקוחות אחרים להתחבר לאותו מקור נתונים לשם כתיבה
:adModeShareExclusive oמונע מלקוחות אחרים התחברות לאותו מקור נתונים בהרשאה כלשהי
:adModeShareDenyNone oמאפשר ללקוחות אחרים להתחבר למקור הנתונים עם הרשאות כלשהן
יצירת Connection String
תוכל להגדיר את ה ConnectionString-במספר דרכים:
.1לקודד בעצמך מאפיין זה – הגדרה באופן כזה קשה למדי כיוון שקשה לזכור את רשימת המאפיינים הרבה
הקיימים עבור מאפיין זה .תוכל להשתמש בטריק קטן :צור קובץ Data Linkולאחר מכן העתק את ההגדרות
שבתוך הקובץ (תוכל לצפות בהן באמצעות ה ,Notepad-כפי שביצעת בתרגילים הקודמים) למאפיין
ConnectionStringשבקוד התוכנית שלך
.1ליצור קובץ Data Linkולהגדיר אותו באמצעות המאפיין File Nameב .Connection String-כך למשל ,כדי
להתחבר למקור הנתונים שהוגדר באמצעות קובץ ה Data Link-מתרגיל ,)Pubs.udl( 1ניתן להגדיר את
ה Connection String-באופן הבא:
Dim conn As New ADODB.Connection
...
...
"conn.ConnectionString = "File Name=...\Pubs.udl
כאשר יש לציין כמובן את המסלול המלא של הקובץ
שיטה זו מומלצת מאוד ,כיוון שתוכל לשנות את הגדרת מקור הנתונים בקובץ ה Data Link-מבלי לשנות
את קוד המקור של התוכנית או לקמפל את התוכנית מחדש
.3תוכל לבנות את המאפיין ConnectionStringבאמצעות האשפים השונים .בתיבות הדו שיח המגדירה את
מקור הנתונים עבור פקד ADODCקיים כפתור Buildליד השדה .Connection Stringלחיצה על כפתור זה
מפעילה אשף המאפשר לך להגדיר את מקור הנתונים .לאחר סיום פעולת האשף ,נוצר עבורך Connection
.Stringתוכל להעתיק Connection Stringזה לתוך הקוד שלך .באחת הדוגמאות הבאות תשתמש בטכניקה
זו.
- 113אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
ActiveX Data Objects :12 שיעור
SimpleConnection – התוכנ ית3 תרגיל
מוכןDSN- תוך שימוש בADO לבין מקור נתונים באמצעותVisual Basic בתרגיל זה ניצור חיבור בין תוכנית
: ושמור אותוStandard EXE צור פרוייקט.1
frmTestConnection ולטופס את השםSimpleConnection הקצה לפרוייקט את השם
: לטופס והגדר את המאפיינים הבאיםCommandButtons הוסף שני.1
ערך
Test Connection
3- Fixed Dialog
2-CenterScreen
cmdConnect
Connect
True
cmdDisconnect
Disconnect
False
מאפיין
Caption
BorderStyle
StartUpPosition
Name
Caption
Enabled
Name
Caption
Enabled
אובייקט
frmTestConnection
Command1
Command2
:הטופס צריך להיראות דומה לזה שבציור
:ADO הוסף הפנייה לספריית.3
References בחר באפשרותProject מתוך תפריט
(ייתכןMicrosoft ActiveX Data Objects 2.7 Library מתוך רשימת ספריות הרכיבים בחר בספרייה
) בחר בגירסה הכי מתקדמת.שבמחשב שלך מותקנת גירסה מוקדמת יותר או מאוחרת יותר של הספריה
: הוסף קוד לטופס.1
Option Explicit
Dim conn As ADODB.Connection
ADO שלConnection בחלק הגלובלי של הטופס הוצהר אובייקט
Private Sub Form_Load()
Set conn = New ADODB.Connection
End Sub
New בעת טעינת הטופס נוצר אובייט באמצעות המילה
Private Sub cmdConnect_Click()
conn.ConnectionString = "DSN=NwindDSN;User ID=sa"
conn.Open
If conn.State = adStateOpen Then
MsgBox "Connection successful"
cmdConnect.Enabled = False
cmdDisconnect.Enabled = True
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
Else
"MsgBox "Connection Failed
End If
End Sub
בעת לחיצה על Connectיוצרים Connection Stringעם הפניה ל DSN-שיצרנו בתרגיל הקודם וכפרמטר
נוסף מעבירים את שם המשתמש
לאחר קריאה לפרוצדורה Openבודקים את מצב החיבור adStateOpen .מצביע על חיבור מוצלח
)(Private Sub cmdDisconnect_Click
conn.Close
If conn.State = adStateClosed Then
"MsgBox "Disconnected
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
End If
End Sub
בעת ליחצה על Disconnectקוראים לשיטה Closeכדי לנתק את החיבור לDatabase-
)Private Sub Form_Unload(Cancel As Integer
If conn.State = adStateOpen Then
conn.Close
End If
Set conn = Nothing
End Sub
בעת הסרת הטופס מנתקים את החיבור (אם הוא עדיין לא נותק) ומשחררים את אובייקט הADO-
אם לא קוראים באופן מפורש ל ,Close-פעולה זו תתבצע באופן אוטומטי על ידי האובייקט ADOבעת
שיחרורו מהזיכרון
.1בחינת הפרוייקט:
הרץ את התוכנית ובדוק את פעולתה
- Eventים של אובייקט Connection
האובייקטים השונים של ADOחושפים -Eventים שונים .לחלק מבין ה-Event-ים ישנו מבנה קבוע:
:Willxxxx oאירוע זה מתרחש לפני שהפעולה xxxxמתרחשת
:xxxxComplete oאירוע זה מתרחש לאחר השלמת הפעולה xxxx
דוגמאות לצמדים כאלה של אירועים הם WillConnectוWillExecute ,ConnectComplete-
ו ExecuteComplete-וכו'
בעת כניסה לאירוע Willxxxxמועבר פרמטר adStatusשיכול להכיל את הערכים הבאים:
:adStatusOK oאין שום שגיאות
:adStatusErrorsOccured oהתרחשה שגיאה כלשהי
:adStatusCantDeny oלא התרחשה שגיאה ,אך לא ניתן לבטל את הפעולה
בעת כניסה לאירוע Willxxxxתוכל לשנות את ערכו של adStatusלאחד הערכים הבאים:
:adStatusCancel oמורה ל ADO-לבטל את הפעולה (כאמור ,לא ניתן לבצע זאת אם הערך הקודם של
adStatusהיה )adStatusCantDeny
:adStatusUnwantedEvent oמורה ל ADO-לחדול משליחת האירוע
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
תרגיל – 6התוכנ ית ConnectWithEvents
בתרגיל זה ניצור חיבור בין תוכנית Visual Basicלבין מקור נצונים באמצעות ADOתוך שימוש ב OLE
Providerעבור ,SQL Serverכמו כן נשתמש ב-Event-ים של האובייקט Connectionבתרגיל זה
.1שלבים 1-1בתרגיל זה ,זהים לתרגיל הקודם (לתוכנית זו הקצה את השם )ConnectWithEvents
.1צור :Connection String
בתרגיל זה ניצור Connection Stringשישתמש בMicrosoft OLEDB Provider for SQL Server-
שליטה בתחביר של ה Connection String-ויצירת ה Connection String-היא ,כאמור ,משימה מפרכת,
לפיכך נשתמש באובייקט ADODCבאופן זמני כדי ליצור את ה ConnectionString-באמצעות :Wizard
oמהתפריט Projectבחר ב Components-והוסף את הרכיב Microsoft ADO Data Control 6.0
) (OLEDBלפרוייקט
oהוסף אובייקט ADODCלטופס
oלחץ לחיצה ימנית על הפקד שהוספת ובחר ב ,Properties-חלון המאפיינים של ADODCאמור
להפתח
oבכרטיסייה Generalבחר ב Use Connection String-ולאחר מכן לחץ על הלחצן Build...הממוקם
מימין לתיבת הטקסט ,ייפתח חלון שכותרתו Data Link Properties
oמתוך רשימת ה OLEDB Providers-בחר בMicrosoft OLEDB Provider for SQL Server-
ולאחר מכן לחץ על Next
oבסעיף 1בכרטיסייה Connectionבחר ב Server-שבו ממוקמת מערכת SQL Serverשאליה אתה
מתחבר
oבסעיף 2הזן שם משתמש וסיסמה או שתבחר ב Use Windows NT Integrated Security-אם
מערכת ה SQL-שאליה אתה מתחבר מאפשרת זאת .תוכל להזין את שם המשתמש saבצירוף
סיסמה ריקה אם במערכת ה SQL Server-לא שונו ההגדרות
oבסעיף 3בחר מתוך רשימת ה-Database-ים את Northwind
oתוכל ללחוץ על Test Connectionכדי לבחון האם ה Connection-שהגדרת פועל
oלחץ על ,OKכעת חזרת לכרטיסייה General
oשים לב שבתיבת הטקסט מופיעה מחרוזת ,העתק מחרוזת זו ע"י סימונה ולחיצה על Ctrl+C
oסגור את חלון ה Property Pages-והסר את אובייקט ה ADODC-מהטופס ,תוכל להסיר גם את
ההתיחסות ל Microsoft ADO Data Control 6.0 (OLEDB)-שהוספת קודם
.3הוסף את הקוד הבא לטופס:
Option Explicit
Dim WithEvents conn As ADODB.Connection
בשורה זו מוצהר אובייקט Connectionתוך שימוש במילה WithEventsכדי שגם האירועים שלו יילכדו
)(Private Sub Form_Load
Set conn = New ADODB.Connection
End Sub
בעת טעינת הטופס יוצרים את האובייקט
)(Private Sub cmdConnect_Click
On Error Resume Next
_ & ";conn.ConnectionString = "Provider=SQLOLEDB.1
_ & ";"Persist Security Info=False
_ & ";"User ID=sa;Initial Catalog=Northwind
""Data Source=WIN2K
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
conn.Open
If Err.Number <> 0 Then
MsgBox "Error No. " & Trim(Str(Err.Number)) & ":" & vbCrLf & _
Err.Description
Err.Clear
conn.Errors.Clear
End If
End Sub
1 זוהי המחרוזת שהעתקת בשלב: (שים לבConnection String- מגדירים את הConnect בעת לחיצה על
) שהוספת באופן זמני לטופסADODC של האובייקטProperty Pages-מחלון ה
בוטלה או נכשלה, כדי לבחון האם ההתחברות הצליחהErr נבדק האובייקטOpen לאחר הפעלת הפרוצדורה
מסיבה כלשהי
Private Sub conn_WillConnect(ConnectionString As String, _
UserID As String, _
Password As String, _
Options As Long, _
adStatus As ADODB.EventStatusEnum, _
ByVal pConnection As ADODB.Connection)
If adStatus = adStatusOK Then
If MsgBox("Do you want to cancel the operation?", _
vbYesNo Or vbQuestion Or vbDefaultButton2) = vbYes Then
adStatus = adStatusCancel
End If
End If
End Sub
מציגים למשתמש שאלה המאפשרת לו לבטל את פעולת ההתחברותWillConnect באירוע
משמעותו היא שלאadStatusOK .adStatusOK- שווה לadStatus שאלה זו מוצגת רק אם ערך:שים לב
התרחשו שגיאות וכן ניתן לבטל את הפעולה
Private Sub conn_ConnectComplete(ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, _
ByVal pConnection As
ADODB.Connection)
If conn.State = adStateOpen Then
MsgBox "Connection successful"
cmdConnect.Enabled = False
cmdDisconnect.Enabled = True
End If
End Sub
אם כן מציגים הודעה למשתמש, בודקים אם ההתחברות הצליחהConnectComplete-ב
אירוע זה יטופל שם,cmdConnect_Click אם ההתחברות נכשלה אזי תיווצר שגיאה שתילכד באירוע
כיוון שבשלב זהConnectComplete לא תוכל לבדוק אם התרחשה שגיאה בהתחברות בתוך האירוע:שים לב
conn.Open שגיאה תתעורר רק בסיום נסיון ההתחברות לאחר בשורה שבה כתוב,0 יהיהErr.Number ערך
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
ActiveX Data Objects :12 שיעור
Private Sub cmdDisconnect_Click()
conn.Close
End Sub
Close נסגר החיבור על ידיDisconnect בעת לחיצה על
Private Sub conn_Disconnect(adStatus As ADODB.EventStatusEnum, _
ByVal pConnection As ADODB.Connection)
If conn.State = adStateClosed Then
MsgBox "Disconnected"
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
End If
End Sub
מציגים הודעה מתאימה למשתמשadStateClosed- שווה לconn.State אם פעולת הניתוק הצליחה וערכו של
Private Sub Form_Unload(Cancel As Integer)
If conn.State = adStateOpen Then
conn.Close
End If
Set conn = Nothing
End Sub
בעת הסרת הטופס מנתקים את החיבור אם לא נותק עד כה
: בחינת הפרוייקט.1
הרץ את הפרוייקט ובחן את פעולתו
כדי לבחון אותה מקרובF8 באמצעותStep By Step אני ממליץ בפניך להריץ את התוכנית
RECORDSET
האובייקט
DisplayEmployees – התוכנ ית7 תרגיל
Employees ונציג את תוכן הטבלהNorthwind- בתרגיל זה ניצור חיבור ל
: ושמור אותוStandard EXE צור פרוייקט.1
frmDisplayEmployees ולטופס את השםDisplayEmployees הקצה לפרוייקט את השם
שמור את הפרוייקט
:ADO לספרייתReference הוסף לפרוייקט.1
Project מתוך התפריטReferences בחר באפשרות
(אם יש לך גירסה מוקדמת יותר אוMicrosoft ActiveX Data Objects 2.7 Library ליד הספרייהV סמן
) ליד הספרייה המעודכנת ביותרV סמן,מאוחרת יותר
: והגדר את המאפיינים הבאים, אחד לטופסTextBox-ים ו-CommandButton הוסף שני.3
ערך
Test Connection
3- Fixed Dialog
2-CenterScreen
cmdUseTableName
Use table name
cmdUseSQLStatement
מאפיין
אובייקט
Caption frmDisplayEmployees
BorderStyle
StartUpPosition
Name
Command1
Caption
Name
Command2
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
לתוכניתניםVisual Basic 6
Use SQL statment
txtDisplay
True
3 - Both
Caption
Name
Multiline
ScrollBars
Text1
:הטופס צריך להיראות דומה לזה שבציור
: הוסף קוד לטופס.1
Option Explicit
Dim conn As ADODB.Connection
Dim rcs As ADODB.Recordset
עבור אחזור שלrcs- וNorthwind- עבור התחברות לconn ,בשתי השורות הנ"ל מצהירים עלש ני אובייקטים
)Recordset( אוסף רשומות
Private Sub Form_Load()
Set conn = New ADODB.Connection
conn.Open "Provider=SQLOLEDB.1;" & _
"Persist Security Info=False;" & _
"User ID=sa;" & _
"Initial Catalog=Northwind;" & _
"Data Source=WIN2K"
If conn.State = adStateClosed Then
MsgBox "Error: Fail to connect"
Unload Me
End If
Set rcs = New ADODB.Recordset
Set rcs.ActiveConnection = conn
End Sub
Open באמצעות הפרוצדורהNorthwind- פותחים חיבור לForm_Load באירוע
:שים לב
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
ActiveX Data Objects :12 שיעור
בדוגמאות.Open- או כפרמטר לOpen לפני הפעלתConn- לConnection String- ניתן להעביר את ה.1
Open לפני הפעלתConnection String-הקודמות העברנו את ה
כפי שעשית בתרגיל הקודםADODC צור באמצעות פקדConnection String- את ה.1
לחיבורconn והופכים את החיבור,New חדש באמצעות המילהRecordset יוצרים, לאחר יצירת החיבור
rcs ) עבור האובייקטActiveConnection( הפעיל
Private Sub cmdUseTableName_Click()
If rcs.State = adStateOpen Then
rcs.Close
End If
rcs.Source = "Employees"
rcs.Open , , , , adCmdTable
txtDisplay.Text = ""
DisplayRecordset rcs
End Sub
כדי לאחזר את רשומות הטבלהrcs שלOpen מפעילים את הפרוצדורהUse table name בעת לחיצה על
Employees
:שים לב
) (כפי שתראה בשגרה הבאהOpen בעת הפעלת המתודהrcs- לSourec String-ניתן להעביר את ה
.1
. וכו') אין חובה להעביר,adCmdText – SQL משפט,adCmdTable – את סוג הפקודה (בקשת טבלה
.1
יהיהחייב להחליט באיזה סוג פקודהOLE Provider- יהיה הפסד ביצועי קל כיוון שה,במקרה כזה
מדובר
באמצעותrcs ולהשימו לתוךADODB.Command ניתן להגדיר פקודה באמצעות אובייקט מסוג
.3
rcs.ActiveCommand המאפיין
שנכתוב בהמשךDisplayRecordset מוצגות הרשומות באמצעות הפרוצדורה, לאחר שהמשפט בוצע
Private Sub cmdUseSQLStatement_Click()
If rcs.State = adStateOpen Then
rcs.Close
End If
rcs.Open "SELECT * FROM Employees", , , , adCmdText
txtDisplay.Text = ""
DisplayRecordset rcs
End Sub
אלא שנשתמש,Employees נציג את תוכן הטבלהUse SQL Statement- גם ב,Use table name-בדומה ל
במקום שם טבלהSQL במשפט
SQL המציין כי מדובר במשפטadCmdText שים לב שסוג הפקודה שצויין הוא
Private Sub DisplayRecordset(rs As ADODB.Recordset)
rs.MoveFirst
Do Until rs.EOF
DisplaySingleRecord rs.Fields
txtDisplay.Text = txtDisplay.Text & vbCrLf
rs.MoveNext
Loop
End Sub
- 112 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
ברוטינה DisplayRecordsetמציגים את תוכן הטבלה באמצעות לולאה הסורקת את אוסף הרשומות עד
שמגיעים ל EOF-המציין את סיום אוסף הרשומות
השימוש במתודה MoveFirstנועד לאתחל את ה Recordset-כך שימוקם ברשומה הראשונה ברוסף
עבור כל רשומה מעבירים את אוסף השדות שלה למתודה ( DisplaySingleRecordמוגדרת בהמשך)
באמצעותה מציגים את הרשומה הנוכחית באוסף הרשומות
)Private Sub DisplaySingleRecord(flds As ADODB.Fields
Dim fld As ADODB.Field
For Each fld In flds
_ & txtDisplay.Text = txtDisplay.Text
_ & " = " & fld.Name
_ & )IIf(IsNull(fld.Value), "<Null>", fld.Value
)" " String(8,
Next
End Sub
עבור כל רשומה ,סורקים את אוסף השדות שבה ,תוך הצגת שמות השדות ותוכנם
אם ערך שדה מסוים הוא Nullמציגים את המחרוזת ><Null
)Private Sub Form_Unload(Cancel As Integer
Set rcs = Nothing
Set conn = Nothing
End Sub
באירוע Form_Unloadמשחריים את ה Connection-ואת הRecordset-
.1בחינה והרצת הפרוייקט:
הרץ את התוכנית ובדוק את פעולתה
המאפי ין CursorType
:adOpenForwardOnlyיוצר Cursorהנע קדימה בלבד .ב Cursor-מסוג זה תוכל להשתמש במתודות
MoveFirst , MoveNextאו Moveעם פרמטר חיובי .לא תוכל לדלג לרשומה האחרונה באמצעות MoveLastאו
לחזור לרשומותקודמות באמצעות MovePreviousאו Moveעם פרמטר שלילי Cursor .מסוג Forward Only
יכול להיות בצד ה Server-בלבד .ל Cursor-זה הביצועים הטובים ביותר.
:adOpenDynamicיוצר Cursorהמאפשר תנועה חופשית ב Cursor .Recordset-מסוג זה מעודכן תמיד
בנתונים העדכניים ביותר מה .Database-בעת מעבר לרשומה מסוימת ,מובאת הרשומה המעודכנת
מה Cursor .Database-מסוג זה יכול להיות ממוקם בצד ה Server-בלבד .ל Cursor-זה הביצועים הגרועים
ביותר.
:adOpenKeysetבדומה ל Cursor ,adOpenDynamic-מסוג זה מציג גם הוא את הנתונים העדכניים ביותר .עם
זאת Cursor ,מסוג Keysetאינו מציג רשומות חדשות שנוספו על-ידי משתמשים אחרים Cursor .מסוג Keyset
יכול להיות במחשב ה Server-בלבד.
Cursor :adOpenStaticמסוג זה יוצר העתק של הנתונים המאוחזרים מה .Database-ניתן לנוע בחופשיות בין
הרשומות שב Cursor-סטטי .שינויים הנעשים על ידי משתמשים אחרים ברשומות לא יעודכנו ב Cursor-מסוג זה.
ביצועיו של Cursorסטטי הם טובים למרות שמשך הטעינה הראשון הוא ממושך יחסית .מומלץ לעבוד עם Cursor
כזה כאשר מספר הרשומות המאוחזרות קטן יחסית Cursor .סטטי הוא ה Cursor-היחיד הניתן ליצירה בצד
הClient-
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
תנועה ב Recordset -
:MoveFirstהופך את הרשומה הראשונה ב Recordset-לרשומה הנוכחית
:MoveLastהופך את הרשומה האחרונה ב Recordset-לרשומה הנוכחית
:MoveNextהופך את הרשומה הבאה לרשומה הנוכחית
:MovePreviousהופך את הרשומה הקודמת לרשומה הנוכחית
) :Move(nהופך את הרשומה הנמצאת המרחק nמהרשומה הנוכחית ,לרשומה הנוחכית n( .יכול להיות גם מספר
שלילי)
( CURSORSסמנים)
Cursorהוא מערך רשומות המתקבל כתוצאה משליחת בקשה לDatabase-
ניתן לשלוט על שלושה מאפיינים של :Cursor
( CursorLocation oמיקום ה)Cursor-
( CursorType oסוג ה)Cursor-
( LockType oסוג הנעילה)
ניתן להגדיר מאפיינים אלו ,כל עוד לא נפתח ה Recordset-באמצעות הפרוצדורה Open
בשלושת הסעיפים הבאים יפורטו מאפיינים אלו
המאפי ין LockType
:adLockReadOnly
מאפיינים נוספים
:MaxRecordsקובע את מספר הרשומות המקסימלי שיאוחזר מהDatabase-
:CashSize
תרגיל – 3התוכנ ית Nevi gateRecords
בתוכנית זו תנווט בין רשומות באמצעות המתודות MoveFirst ,MovePrev ,MoveNextו .MoveLast-כמו כן
תשתמש באירועים MoveCo
.1לסיים
.1לסיים
.3
.1
.1
CONTROL
ADO DATA
ADODCהוא Controlהמבוסס על אובייקט מסוג ADO
ADODCניתן לקשר לאוסף רשומות מ Database-בדרכים שונות
ניתן להגדיר את ADODCכספק נתונים עבור פקד שהוא צרכן נתונים
רוב הפקדים הסטנדרטיים תומכים ב ,Data Binding-כלומר יכולים לשמש כצרכני נתונים
כדי שניתן יהיה להשתמש בADODC -יש להגדיר אליו הפניה בProject Components-
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
האובייקט Recordset
הוספת רשומה חדשה
מחיקת רשומה
התחלת טרנזקציה (באמצעות גישה ל ActiveConnection-מתוך ה)Recordset-
myadodc.Recordset.AddNew
myadodc.Recordset.Delete
myadodc.Recordset.ActiveConnection.BeginTrans
סיום תוך שמירה של הטרנזקציה
סיום ואי שמירה של הטרנזקציה
לפי בדיקה שלי אין תמיכה בTransaction Nested-
ADODCמבצע Commitאוטומטית בסוף ,אלא אם קראת לBeginTrans-
myadodc.Recordset.ActiveConnection.CommitTrans
myadodc.Recordset.ActiveConnection.RollbackTrans
Propertiesשל ADODC
:Alignמגדיר כיצד ייושר הפקד על פני הטופס
:BOFActionמגדיר מה יבוצע בעת ניסיון לחרוג מתחילת אוסף הרשומות (:)Beginning Of File -BOF
:adDoMoveFirst oגורם להחזרה לרשומה הרשואנה
:adStayBOF oנשאר בBOF-
:EOFActionמגדיר מה יבוצע ה ADODC-בעת ניסיון לחרוג מתחום אוסף הרשומות()End Of File - EOF
:adDoMoveLast oמחזיר לרשומה האחרונה
:adStayEOF oנשאר בEOF-
:adDoAddNew oגורם להוספת רשומה חדשה
:ConnectionStrinמחרוזת המכילה את כל הפרטים הדרושים לשם התחברות לDatabase-
Usernameו :Password-כוללים את שם המשתמש והסיסמה ,שבאמצעותם מתחברים לDatabase-
:ConnectionTimeoutמגדיר את משך זמן שלאחריו ייפסק הניסיון להתחבר אל הDatabase-
:Modeמגדיר את אוסף הפעולות המותר מול הDatabase-
:RecordSourecמגדיר את מקור הרשומות עבור ה .ADODC-קיימות ארבע אפשרויות:
:Table oטבלה או שאילתה
:StoreProcedure oשגרה מאוחסנת בDatabase-
:Text oמשפט SQL
:CommandTypeמגדיר את סוג הRecordSource-
:CommandTimeoutמגדיר את משך הזמן שלאחריו ייפסק ניסיון להפעיל פקודה מול הDatabase-
:Captionכותרת הפקד
Methodsשל ADODC
:Refreshמרענן את התצוגה (חשוב לאחר ביצוע שינויים כגון Deleteאו CommitTransאו ביטול שינויים
באמצעות )RollbakTrans
- 113אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור ActiveX Data Objects :12
Eventsשל ADODC
:WillChangeRecordמתרחש רגע לפני שרשומה מעודכנת .זהו המקום לבצע בדיקת ערכים ולאשר או לבטל
את השינוי
:Errorמתרחש כאשר מתרחשת שגיאה כלשהי .ניתן לבטל את ההודעה המוצגת ע"י שינוי ערכו של
fCancelDisplayהמועבר להודה – לערך True
עיצוב הנתונים
ניתן להשתמש במספר דרכים:
oהמאפיין DataFormatשל Bound Controlsאך לא תמיד מאפיין זה פועל כמו שצריך
oקוד בדיקה מותאם אישית – כרוך בעבודה רבה
oשימוש בStdDataFormat Objects-
StdDataFormats Obj ects
לסיים
יש להוסיף Referenceאליו מתוך ( Project References
הערות לגבי Data Bound Controls
כאשר משתמשים ב Data Bound Label Control-יש להגדיר את המאפיין UseMnemonicsלערך Falseכדי
שתוי אמפרסנד לא יוצגו כקו תחתי.
CheckBoxמקבל ערך vbCheckedעבור ערך שונה מ 2-ב vbUnchecked ,Database-לערך ,0וvbGrayed
לNull-
יש לקשר CheckBoxאך ורק לערך בוליאני ,כיוון שיש לו שני מצבים שהמשתמש שולט בהם True -או False
תמונות מ Access-יש לקשר לcontrol OLE-
תמונות מ SQL Server-ניתן לקשר לPicture Box-
OptionBoxאינו ,Data Bound Controlולפיכך כדי להשתמש בו בצמוד לשדה מה .Database-בכל אופן ,ניתן
לבצע טריקים כדי לפתור את הבעיה בדרך עקיפה ,וגם כמובן ליצור ActiveXמתאים
ניתן לשנות בזמן ריצה את ה DataSource-ל ADODC-אחר( .לא קיימת אפשרות כזו ב Data-ובRDO Data -
)Control
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור COM+ :11
בשיעור זה:
תכיר את המודל N Tiersותשווה אותו לTiers 1-
תכיר את ( MTS - Microsoft Transaction Serverזהו COM+ב ,)Windows 2000-תבין את פעולתו ביחס
לניהול טרנזקציות ,ותכיר בחשיבותו
תלמד להפוך את רכיבי הקוד שאתה מפתח ב Visual Basic-ל Business Objects-הפועלים תחת COM+
תרגיל COM+Demo : 1
בתרגיל זה ניצור אפליקצית COM+ריקה (כלומר ללא רכיבים)
בתרגילים הבאים תיצור רכיבי COM+באמצעות Visual Basicותוסיף אותם לאפליקציה זו
.1פתח את החלון :Component Services
פתח את ה Control Panel-ומשם עבור לAdministrative Tools-
בחר ב Component Services-החלון הבא אמור להיפתח:
.1הוסף אפליקצית COM+ריקה:
בפנל השמאלי הרחב את הענף Component Services
עבור ל My Computer-ומשם ל( COM+ Applications-לחץ על COM+ Applicationsבאמצעות הלחצן
השמאלי של העכבר כך שהאפליקציות המותקנות יוצגו בפנל הימני)
לחץ לחיצה ימנית על COM+ Applicationsובחר ב New-ואחר כך בApplication-
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור COM+ :11
Wizardהמשמש להתקנת אפליקציית COMייפתח:
oבמסך הראשון של ה Wizard-לחץ על Next
oבמסך השני של ה Wizard-קימות שתי אפשרויות .האפשרות הראשונה ,להתקין אפליקציה מוכנה
על ידי בחירת קובץ התקנה ,והאפשרות השניה ,ליצור אפליקציה חדשה .בחר באפשרות השניה
Create an empty application
oבמסך השלישי של ה Wizard-עליך להקצות שם לאפליקציה ולבחור את אופן ההפעלה של
האפליקציה .קיימים שני סוגי הפעלה לאפליקצית Library Application :COM+וServer -
Library Application .Applicationמציין כי האפליקציה תרוץ כמו DLLבתוך ה Process-שיצר
את רכיב מהאפליקציה Server Application .מציין כי האפליקציה תרוץ בתוך Processמשל
עצמה .הגדר את המאפיינים כפי שמתואר בציור שלפניך:
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
oבמסך הרביעי של ה Wizard-עליך לקבוע תחת איזה משתמש NTהאפליקציה תרוץ בעת טעינתה.
תוכל לבחור שם משתמש מסוים ולהזין את הסיסמה ,או לבחור Interactive userשמשמעותו היא
כי האפליקציה רצה תחת חשבון המשתמש המחובר למערכת
oבמסך האחרון של ה Wizard-לחץ על Finish
.3עיין במאפייני האפליקציה:
בפנל הימני של חלון ה Component Services-יוצג סמל האפליקציה COM+Demoשזה עתה יצרת
לחץ לחיצה ימנית על סמל האפליקציה ובחר באפשרות .Propertiesהחלון COM+Demo Propertiesאמור
להיפתח כפי שמוצג בציור הבא:
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור COM+ :11
בחלון זה מוצגות שש כרטיסיות:
oבכרטיסייה Generalתוכל להוסיף שדה תיאור ( )Descriptionלאפליקציה
oבכרטיסייה Securityתוכל להגדיר נושאי אבטחה שונים הקשורים להפעלת האפליקציה
oבכרטיסיה Identityזהה לזה שפגשת ב Wizard-בעת יצירת האפליקציה
oהכרטיסיה Activationזהה לאפשרות Activation typeשפגשת ב Wizard-בתחילת התרגיל
oשים לב :אם אתה משנה את אופן ההפעלה של האפליקציה ,האפשרויות בשאר הכרטיסיות ישתנו
בהתאם
oהכרטיסייה Queuingמגדירה את אופן הפעולה ההדי יחד עם MSMQ
oבכרטיסיה Advancedתוכל להגדיר הגדרות שונות ,כגון משך הזמן בו Processשל אפליקציה ישאר
מופעל ,למרות שהאפליקציה אינה פעילה באותו השלב ,הגנות מסוימות על האפליקציה ועוד
בתרגיל שלנו השאר את ההגדרות ללא שינוי ,וסגור את חלון הCOM+Demo Properties-
יצירת רכיבים המותאמים לפעולה תחת
COM+
המאפי ין MTSTransact ionMode
COM+משתמש במאפיין MTSTransactionModeכדי לקבוע האם יש להפעיל את האובייקט בתוך טרנזקציה,
והאם טרנזקציה נדרשת או אופציונלית
מאפיין זה משפיע רק על האובייקטים הנוצרים תחת .COM+אובייקטים שאינם נוצרים תחת COM+אינם
מושפעים ממאפיין זה
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
מאפיין זה יכול לקבל אחד מהערכים הבאים:
:NotAnMTSObject oהאובייקט אינו תומך בCOM+-
:NoTransactions oהאובייקט אינו תומך בטרנזקציות .מאפיין זה מציין שהאובייקט אינו רץ במסגרת
טרנזקציות .כאשר נוצר אובייקט חדש ,ל ObjectContext-המוצמד לאובייקט לא נוצרת טרנזקציה.
:RequiresTransaction oמאפיין זה מציין כי האובייקט חייב לרוץ במסגרת טרנזקציה .כאשר אובייקט
חדש נוצר ,ה ObjectContext-שלו יורש את הטרנזקציה מה ObjectContext-של ה .Client-אם אין
טרנזקציה ב ObjectContext-של ה Client-תיווצר טרנזקציה חדשה עבור האובייקט.
:UsesTransaction oערך זה מציין כי האובייקט משתמש בטרנזקציה של האובייקט המשתמש בו
(ה .)Client-כאשר נוצר אובייקט חדש הוא יורש את הטרנזקציה מאובייקט ה .Client-אם לאובייקט
ה Client-אין טרנזקציה ,אזי גם ל ObjectContext-של האובייקט הנוצר לא תיווצר טרנזקציה.
:RequiresNewTransaction oערך זה מציין שלאובייקט הנוצר חייבת להיווצר טרנזקציה חדשה
בתוכה הוא ירוץ .כאשר נוצר אובייקט חדש COM+יוצר עבורו טרנזקציה חדשה ללא קשר לקיום או
היעדר טרנזקציה באובייקט ה.Client-
לרוב תקצה לאובייקטים שלך את המאפיינים UsesTransactionאו .RquiresTransactionההבדל בין שני
הערכים הללו הוא במקרה שטרנזקציה אינה קיימת באוביקט היוצר אותם ,שאז עבור אובייקטים בהם מוגדר
המאפיין כ RquiresTransaction-נוצרת טרנזקציה חדשה ,ואילו עבור אובייקטים בהם מוגדר המאפיין
כ UsesTransaction-לא תיווצר טרנזקציה
הגדרת מאפיין כ RequiresNewTransaction-כמו RequiresTransactionמבטיחה כי האובייקט יפעל במסגרת
טרנזקציה .עם זאת הערך RequiresNewTransactionיוצר טרנזקציה חדשה שאינה תלויה בטרנזקציה של
האובייקט המכיל (אובייקט ה .)Client-מאפיין זה שימושי כאשר רוצים לבצע רישום פעילות של אובייקט
ה Client-ללא קשר להצלחה או כישלון של הטרנזקציה שלו.
האובייקט ObjectContext
להוסיף הסבר אודות Objetct Context
תרגיל MTSSample.dll : 2
בתרגיל זה ניצור רכיב DLLאשר יתמוך בCOM+-
לרכיב שניצור נוסיף פונקציה בשם ExecuteTransactionהמקבלת שני פרמטרים:
oמערך של -Stringים המייצגים -ConnectionStringים למקורות מידע שונים
oמערך של -Stringים של משפטי SQLשיש להריץ מול מקורות המידע הללו
הרעיון שבבסיסו של רכיב זה :אם אחד ממשפטי ה SQL-המבוצע מול אחד ממקורות הנתונים נכשל ,יתבצע
Rollbackלכל משפטי ה SQL-שבוצעו עד כה
.1צור תוכנית ActiveX DLLריק:
הקצה לפרוייקט את השם MTSSampleDLL
הקצה ל Class-בפרוייקט את השם MTSObj
שמור את הפרוייקט
.1התאם את הגדרות הפרוייקט:
מתוך התפריט Projectבחר ב ,MTSSampleDLL Properties...-כך שיוצג חלון המאפיינים של הפרוייקט
בכרטיסיה Generalסמן Vליד האפשרות .Unattended Executionאפשרות זו מבטיחה כי הרכיב לא יציג
ממשק משתמש (למשל על ידי שימוש בפונקציה .)MsgBoxאם הרכיב ינסה להציג ממשק ,תירשם שגיאה
מתאימה בקובץ ה Log-של המערכת
בכרטיסיה Generalוודא כי ב Threading Model-נבחרה האפשרות Apartment Threaded
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
שיעור COM+ :11
.3הוסף הפניות לספריות רכיבים בפרוייקט:
כיוון שהפרוייקט משתמש ברכיבי ADOוברכיבי COM+כדי לגשת למקורות הנתונים יש להוסיף הפניות
מתאימות בחלון הReferences-
בחר באפשרות References...מתוך התפריט Project
סמן Vליד הספריה Microsoft ActiveX Data Objects 2.7או גירסה אחרת (בחר את הגירסה המעודכנת
ביותר במחשב שלך)
סמן Vליד הפריט COM+ Services Type Library
.1הגדר את המאפיין :MTSTransactionMode
האפשרויות השונות של המאפיין MTSTransactionModeהוסברו קודם
בחר באפשרות 2 - RequiresTransaction
כך אנו מבטיחים שהאובייקט שלנו ירוץ בתוך טרנזקציה .אם האובייקט נקרא על ידי אובייקט אחר שיש לו
טרנזקציה ,האובייקט שניצור ישתתף בטרנזקציה של אובייקט האב .אם אין לאובייקט האב טרנזקציה
משלו ,תיווצר טרנזקציה חדשה עבור האובייקט
.1הוסף קוד למחלקה:
במודול המחלקה MTSObjהוסף את הקוד הבא:
Option Explicit
_ Public Sub ExecuteTransaction(strSQLStatements() As String,
)strConnectionStrings() As String
Dim l As Long
Dim u As Long
On Error GoTo Err_Handler
בעת התרחשות שגיאה תתבצע קפיצה ל Err_Handler-שם תיקרא השגרה SetAbortותוחזר שגיאה
מתאימה לפונקציה הקוראת
)l = LBound(strSQLStatements
)u = UBound(strSQLStatements
Do While l <= u
)adoExecute strSQLStatements(l), strConnectionStrings(l
l = l + 1
Loop
בלולאה זו מפעילים את הפונקציה ( adoExecuteמוגדרת בהמשך) אשר מריצה כל משפט SQLיחד עם
ה ConnectionString-המתאים לו
GetObjectContext.SetComplete
בשורת קוד זו ,לאחר שכל הקריאות לפרוצדורה adoExecuteשבלולאה לא נתקלו בשום שגיאה ,קוראים
ל SetComplete-כדי להשלים את הטרנזקציה
Exit Sub
Err_Handler:
GetObjectContext.SetAbort
"Err.Raise vbObjectError + 1024, , "Transaction Failed
- 112אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
Visual Basic 6לתוכניתנים
אם התרחשה שגיאה כלשהי ,קוראים ל SetAbort-כדי לבטל את הטרנזקציה .בנוסף ,מעוררים שגיאה החוצה
כדי לסמן לאובייקט חיצוני המריץ טרנזקציה חיצונית (אם קיים אחד כזה) כי הטרנזקציה של האובייקט
נכשלה .באופן כזה מאפשרים לאובייקט החיצוני להגיב בהתאם
End Sub
_ Private Sub adoExecute(ByVal strSQL As String, ByVal
)strConnectionString As String
Dim oConn As ADODB.Connection
Set oConn = New ADODB.Connection
oConn.Open strConnectionString
oConn.Execute strSQL
oConn.Close
End Sub
הפונקציה adoExecuteפשוט למדי .בפונקציה זו ,מתבצע חיבור למקור נתונים באמצעות אובייקט
Connectionשל .ADODBומתוך אובייקט זה מורצת פקודת ה SQL-תוך שימוש בפרוצדורה Executeשל
האובייקט Connection
.1קמפל את הרכיב:
מתוך התפריט Fileבחר בMake MTSSampleDLL.dll...-
תקן שגיאות במידת הצורך
.1הגדר רמת תאימות בינרית לרכיב שיצרת:
מתוך התפריט Projectבחר באפשרות MTSSampleDLL Properties...
בכרטיסיה Componentבחר בBinary Compatibility-
אפשרות זו תבטיח שאם תנסה לשנות את ממשק הרכיב שיצרת ,תקבל הודעת אזהרה מתאימה
תרגיל : 1הוספת MTSSampleDLL.dllל COM+ -
לסיים
תרגיל : 4בחינת פעולת MTSSample.dllתחת COM+
לסיים
תרגיל : 3הוספת Rolesלאפליקצית COM+
לסיים
תרגיל : 6בדיקת הרשאות מתוך רכיב
לסיים
יש להשתמש במתודה IsCallerInRoleשל הObjectContext-
תרגיל : 7העברת ConstructStringלרכיב
לסיים
תרגיל : 1קליטת ConstructStringמרכיב
לסיים
Option Explicit
- 111אילן אמויאל © כל הזכויות שמורות
אין להעתיק ,לשדר או להציג את הספר או חלקים ממנו בשום צורה.
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
COM+ :11 שיעור
Implements COMSVCSLib.IObjectConstruct
להעביר מחרוזת אתחולCOM+- המאפשר לIObjectConstruct בשורת קוד זו מממשים את הממשק
לאובייקט
Dim strConstruct As String
Private Sub IObjectConstruct_Construct(ByVal pCtorObj As Object)
strConstruct = pCtorObj.ConstructString
מעביר לאובייקט את מחרוזת האתחולCOM+ מתרחש כאשרIObjectConstruct_Construct האירוע
ConstructString- מחזיר את ה, המועבר באירועpCtorObj של האובייקטConstructString המאפיין
End Sub
Public Property Get Constructor() As String
Constructor = strConstruct
End Property
- 111 אילן אמויאל © כל הזכויות שמורות
. לשדר או להציג את הספר או חלקים ממנו בשום צורה,אין להעתיק
מותר להפיץ את הספר חינם בשלמותו בלבד אך לא למטרות מסחריות
www.kita.co.il
כתיבה עריכה :אילן אמויאל
כתובת אימיילilan.amoyal@gmail.com :
אתר אינטרנטwww.kita.co.il :
© כל הזכויות שמורות למחבר
אין להעתיק או לשדר בכל אמצעי שהוא ספר זה או קטעים ממנו בכל צורה ובכל אמצעי אלקטרוני
או מכני ,לרבות צילום והקלטה ,אמצעי אחסון והפצת מידע ללא צורך באישור מאת המחבר.
מותר להפיץ את הספר חינם וללא ביצוע כל שינוי בתוכנו ,אך שלא למטרות מסחריות
© Copyright 2025