PDA

צפה בגרסה המלאה : פעולות עזרה



sivan1233210
14-11-2008, 14:30
בס"ד

כתוב פעולה המקבלת מספר מהתכנית הראשית ומדפיסה כוכביות בהתאם למספר הנקלט.



Dim i As Integer
Public Sub Form_Load()
MsgBox Kohaviyot(5)
End Sub
Public Sub Kohaviyot(num As Integer)
For i = 1 To num
Print "*"
Next i
End Sub


לא עובד לי

מה הבעיה?

תודה לעזורים
שבת שלום :)!

Hurricane
14-11-2008, 14:38
כמו שהמורה שלנו אומר אחרי שאנחנו לא רושמים Form1.: "על מה הפקודה תצייר? על השמיים? על התקרה?".
צריך לרשום Form1.print, ובכך להגיד ל- VB לצייר על הטופס הראשון (תוכלי לשנות את זה בהתאם). בהצלחה! :)

אריאל
14-11-2008, 14:42
MsgBox Kohaviyot(5)

מזה ? :S

תכתבי במקום זה


call Kohaviyot(5)

וגם לא רק Print אלא form1.print ..

ובחייאת תתחילי לעבוד עם רווחים כבר העירו לך על זה ...

sivan1233210
14-11-2008, 14:46
בס"ד

חח טוב.
משום מה שיניתי את זה לפורם 1 נקודה פרינט ועדיין לא עובד לי...

תודה על העזרה.
שבת שלום :)!

Hurricane
14-11-2008, 14:59
אה נכון, רשמת גם:

MsgBox Kohaviyot(5)
בתוך הפרוצדורה את כבר מדפיסה כוכביות, אין שום צורך לרשום MsgBox.
מקווה שהבנת. :)

sivan1233210
14-11-2008, 15:01
בס"ד

הבנתי.
שיניתי את שתי הדברים.
גם עם הפורם.
וגם שיניתי שזה יהיה call.
עדיין זה לא עובד.

תודה על העזרה.

Hurricane
14-11-2008, 15:10
הנה תוכנית עובדת שכתבתי ב- VB. תסתכלי היכן שגית ותלמדי לעתיד. :)

Private Sub Kohavit(num As Integer)
Dim i%
For i = 1 To num
Form1.Print "*"
Next i
End Sub

Private Sub Form_Resize()
Kohavit 5 'You can write call Kohavit (5) as well...
End Sub

sivan1233210
14-11-2008, 15:14
בס"ד

למה שאני עושה: Form_Resize זה עובד

ושאני עושה Form_Load לא עובד????

תודה על העזרה

sivan1233210
14-11-2008, 15:16
בס"ד

איך עושים שזה לא ירד שורה?

Hurricane
14-11-2008, 15:21
Form_Load היא פרוצדורה אשר נקראת כאשר הטופס נטען.
ב- VB, הטופס נטען (כלומר, ה- VB מזהה את כל הנתונים של הטופס, הגודל, הפקדים וכדומה) ורק אחר כך מצייר אותו על המסך.
אם נרשום את הפעולה של הכוכביות ב- Form_Load, יVB ינסה לצייר כוכביות על טופס שבכלל לא נוצר! (שוב, הוא רק נטען, אבל עדיין אין את הטופס עצמו, ככה שאין על מה לצייר).
הפונקציה Form_Resize נקראת לפחות פעם אחת בתוכנית.
לאחר שהטופס נטען, VB מזמן את הפונקציה Form_Resize לפי הנתונים שה- VB טענה קודם (ב- Form_Load). אם נכתוב פקודות בפרוצדורה Form_Resize, יVB קודם כל יצייר את הטופס מחדש ורק אז יבצע את שאר הפעולות שכתובות בפרוצדורה.
ככה שבמקרה שלנו, ה- VB טען את הנתונים שלו וביצע את מה שיש ב- Form_Load, ואז צייר טופס וביצע את מה שיש ב- Form_Resize (ציור הכוכביות).
שימי לב שה- Form_Resize נקרא מספר פעמים בתוכנית. כאשר מגדילים ו\או מקטינים את גודל הטופס, הפונקציה מזומנת מחדש. זה לעומת Form_Load, אשר מזומנת רק פעם אחת בתוכנית, כל פעם שהטופס נטען (יש אפשרות למחוק את הטופס מהזכרון ו"לטעון" אותו שוב, אבל זה לא בתוכנית הלימודים, אז תתעלמי מזה).

בהצלחה!

sivan1233210
15-11-2008, 19:33
בס"ד

הבנתי.
תודה רבה!

:)

sivan1233210
15-11-2008, 20:05
בס"ד

איך פתאום שאני עושה רק פרינט בלי הפורם1 זה עובד לי?

Hurricane
16-11-2008, 05:36
המורה שלנו הסביר את זה בשיעור שלא הייתי, אך יכול להיות שאני טועה.
בכל אופן, זה תלוי בפרוצדורה שקוראת לפעולה print.
אם למשל, אני רושם print בפרוצדורה Form_load,Form_Resize,Form_BLABLABLA, אז אין צורך לרשום form1.print, מכיוון שזה כבר ידפיס על הטופס.
אם למשל היית רושמת את Print בפרוצדורה אחרת, למשל Picture1_BLABLABLA אז זה היה מצייר על התמונה.
כאשר את רושמת print, זה מצייר על הפרוצדורה שקוראת לו. אם תרשמי form1.print בפרוצדורה אחרת כמו picture, זה יצייר על הטופס כי רשמת לפני זה form1. :)

sivan1233210
16-11-2008, 06:17
המורה שלנו הסביר את זה בשיעור שלא הייתי, אך יכול להיות שאני טועה.
בכל אופן, זה תלוי בפרוצדורה שקוראת לפעולה print.
אם למשל, אני רושם print בפרוצדורה Form_load,Form_Resize,Form_BLABLABLA, אז אין צורך לרשום form1.print, מכיוון שזה כבר ידפיס על הטופס.
אם למשל היית רושמת את Print בפרוצדורה אחרת, למשל Picture1_BLABLABLA אז זה היה מצייר על התמונה.
כאשר את רושמת print, זה מצייר על הפרוצדורה שקוראת לו. אם תרשמי form1.print בפרוצדורה אחרת כמו picture, זה יצייר על הטופס כי רשמת לפני זה form1. :)

בס"ד

הבנתי תודה רבה.
ומצאתי דרך כדי שזה יעבוד גם ב -
form_load.
פשוט לרשום
form1.show
לפי מה שאתה הסברת לי למה זה לא עובד כי קודם הוא צריך להטען אז צרכים לרשום form1.sohw ועכשיו זה עובד.

תודה רבה על העזרה :)
למדתי הרבה דברים שלא ידעתי קודם :)!