כשאני לוחץ על כפתור command אני

arnonsa

New member
כשאני לוחץ על כפתור command אני

לא מצליח להפעיל שום דבר אחר על המסך (עד שכפתור זה סיים את עבודתו, וזהו זמן ארוך למדי). כיצד אפשר להזיז פסי גלילה של תיבת טקסט תוך כדי עבודתו של כפתור זה? או כיצד אפשר להפעיל כפתור אחר תוך כדי עבודתו של כפתור זה?
 
אז זהו, שאי אפשר!

כי ויבי קורא את הקוד מההתחלה ועד הסוף של הפונקציות והפעולות. אבל בתוך אותה פקודה אתה יכול להכניס Call לסברינה (Sub) אחרת. אבל איך הגעת למצב כזה ארוך ומסובך? תחזור על הקוד ותצמצם אותו ותכתוב אותו בדרכים פשוטות יותר.
 

arnonsa

New member
הקוד לא ארוך

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

לעשות שתי תוכנות שעובדות במקביל.. (רעיון קצת יותר מתקדם, שתוכנה X תייצר את תוכנה Y ואח"כ תפתח אותה, ואז תוכל לעשות כמה דברים ביחד, זה אפשרי ולא מסובך כ"כ (אני עצמי בניתי משו כזה). ואםזה פעולות פשוטות, אז תעשה ב F S O שייצר קובץ BAT ובו תהיה הפעולה, שהתחלתי להשתמש בזה, גיליתי הרבה דברים מעניינים וקלים לביצוע...)
 

arnonsa

New member
איך עושים זאת?

האם אלו תוכנות שעובדות ברצות במקביל ממש או שתוכנה x פועלת ואז מפעילה (או מייצרת) את תוכנה y? מה זה FSO ? איך אפשר למצוא חומר על זה?
 

metachnet

New member
למה לענות תשובות שגויות???

"הקוסם המעופף" אם אתה לא יודע אל תענה. ע"י הפונקציה DoEvents ניתן למנוע את "תקיעת" התוכנית, וכך להפעיל לחצנים נוספים, פסי גלילה וכו' וכו'. רק תקח בחשבון שכאשר אתה משתמש ב DoEvents המשתמש יוכל ללחוץ על אותו לחצן שוב ולגרום לתוצאות בלתי צפויות. ניתן לפתור את הבעיה ע"י שימוש במשתנה בוליאני כבדגל שימנע לחיצה נוספת על הלחצן. לדוגמה:
Dim Busy As Boolean 'משתנה גלובלי לטופס Private Sub Command1_Click() If Busy = True Then MsgBox "התוכנית מבצעת פעולה אחרת, נא המתן" Exit Sub End If Busy = True 'כתוב פה את הקוד לביצוע בעת הלחיצה DoEvents 'תשתמש בפונקציה איפה שאתה רוצה Busy = False End Sub​
בהצלחה
 

nolie

New member
אישית, אני מאמין בשימוש ב-Enabled

במקום משתנה גלובלי, אבל זה אותו רעיון. פשוט תכבה את הכפתור כשהוא מבצע את הפעולה שלו.
 

arnonsa

New member
ה-DoEvents לא עובד

הכנסתי אותו, אבל התוכנה עדיין לא עוצרת ופסי הגלילה לא פועלים.
 

בסג

New member
צריך לעשות DOEVENTS

הרבה פעמים. בכל הפעלת DOEVENTS הוא בודק את כל הפקדים האחרים. אם תשים רק DOEVENTS אחד בתחילת הפונצקיה זה כמובן לא יעזור. אם יש לך לולאה בתוך הפונקציה, שים אותו בסוף הלולאה. אם יש כמה לולאות ייתכן שעדיף בלולאה פנימית, תלוי כמה זמן לוקח לכל לולאה להתבצע.
 

arnonsa

New member
תודה . זה עובד.

אבל יש לו עדיין בעיה קטנה: בזמן ריצה הוא מראה את תחילתן של ה-Text boxes (אני כמובן יכול לגלול אותן לסוף אבל נוח לי יותר שיראה את הסוף מבלי שאגלול). כ
 

בסג

New member
אני חושב שזה

Text1.SelStart = Len(Text1.Text) Text1.SelLength = 0​
אמור לעשות את המלאכה. ייתכן שהשורה השנייה מיותרת.
 
למעלה