עבר עריכה לאחרונה בתאריך 05.02.03 בשעה 12:27
אהלן שוב FALKON.הפתרון לבעיה הזו באקסס הוא לא הכי פשוט אבל בהחלט אפשרי.
דבר ראשון אני אסביר את הרעיון בגדול:
ישנו ארוע שנקרא MOUSEOVER לכל פקד ולטופס עצמו, הארוע הזה חל כאשר מזיזים את העכבר מעל הפקד. הבעיה היחידה היא שאנחנו לא יכולים באירוע הזה לזהות מתי הוא יוצא מהפקד. אז מה שאנחנו עושים זה בארוע MOUSEOVER של הפקד אנחנו מחליפים את התמונה, פשוט וקל, ובארוע המקביל של מיקום האובייקט אנחנו מחזירים אותו חזרה. לדוגמה, אם יש כפתור אשר נקרא COMMAND1 בארוע שלו אנחנו נחליף לתמונה כלשהי ואם הוא יושב על ה-DETAIL של הטופס אז בארוע MOUSEOVER של ה-DETAIL אנחנו נחליף חזרה.
אם עד כאן זה נשמע מורכב, זה יתבהר בהמשך.
כמובן שאם יש כפתור אחד שאיתו אתה רוצה לשחק אז זה לא ממש מורכב, אבל אם ישנם כמה כפתורים אז זה נהיה טיפה יותר מסובך. אז בוא ניגש לפתרון עצמו:
אנחנו יוצרים 2 משתנים גלובליים לטופס:
Dim strPrevControl As String 'משתנה המחזיק את הכפתור האחרון שהוחלף Dim strPrevControlPicture As String 'מחזיק את התמונה של הכפתור האחרון שהוחלף
|
עכשיו כתבתי 2 פרוצדורות, האחת להחלפת תמונה פעם ראשונה והשניה להחלפה חזרה:
Private Sub ChangePicture(strControlName As String, strNewPicPath As String) 'אם יש בזכרון פקד קודם שהחלפנו אז תחליף אותו חזרה לתמונה הישנה If strPrevControl <> "" Then With Me(strPrevControl) 'כמובן שצריך להחילף רק אם הוא עוד לא הוחלף If .Picture <> strPrevControlPicture Then .Picture = strPrevControlPicture End With End If 'נשמור את הפקד שאנחנו מחליפים עכשיו strPrevControl = strControlName 'עכשיו נבצע את ההחלפה With Me(strControlName) 'קודם נשמור את שם התמונה הקודם strPrevControlPicture = .Picture 'ועכשיו נחליף אם צריך If .Picture <> strNewPicPath Then .Picture = strNewPicPath End With End Sub Private Sub ReturnPictureToNormal() 'זוהי פונקציה להחזרת התמונה הקודמת לפקד אם צריך If strPrevControl <> "" Then With Me(strPrevControl) If .Picture <> strPrevControlPicture Then .Picture = strPrevControlPicture End With End If End Sub
|
זהו בעצם כל הקוד הבסיסי ועכשיו רק צריך לקרוא לקוד במקומות המתאימים.
אז בוא נגיד שיש לנו טופס שעל הDETAIL שלו ישנם 2 כפתורים COMMAND1 ו-COMMAND2. אז הנה הארועים של הפקדים ושל הDETAIL:
'זה הארוע של תזוזת עכבר מעל שטח ה 'DETAIL 'של הטופס ובו אנחנו פשוט קוראים להחזיר את הפקד האחרון למצבו הקודם Private Sub Detail_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Call ReturnPictureToNormal End Sub 'זהו הארוע של כפתור 'COMMAND1 Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'נקרא לפונקציה עם שם הפקד שלנו ועם הקובץ של התמונה החדשה Call ChangePicture("Command1", "c:\balloon.bmp") End Sub
'זהו הארוע של כפתור 'COMMAND2 Private Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'נקרא לפונקציה עם שם הפקד שלנו ועם הקובץ של התמונה החדשה Call ChangePicture("Command2", "c:\ball.bmp") End Sub
|
זהו זה, זה כל הפתרון וזה עובד יפה מאד.
אם יהיו לך עוד שאלות, אשמח לענות.
א.