PracticU

פרויקט מעשי ב-#C - תוכנת צייר - חלק 38

בלי כתוביותעם כתוביות
PracticU › פרויקט מעשי ב-#C - תוכנת צייר › פרויקט מעשי ב-#C - תוכנת צייר - חלק 38
מילון מושגים:
חריגה - מצב שגיאה שמתרחש בזמן ריצת התוכנית ומפסיק את המהלך הרגיל, אלא אם הקוד תופס ומטפל בו.
אינדקס - מבנה במסד נתונים שמאיץ חיפוש ושליפה. גם מספר המציין מיקום של איבר במערך.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).

פרויקט מעשי ב-#C - תוכנת צייר - חלק 38
השיעור מוסיף מחיקה והזזה של צורות. המחיקה פשוטה, ההזזה דורשת חישוב של ההפרש מהעכבר, ו-FreeHand מציג בעיה שנפתרה בשמירת הפרש.
השלבים העיקריים
1. מחיקה: כשכלי המחיקה פעיל ולוחצים על צורה, היא מוסרת מהרשימה והציור מתעדכן ב-Invalidate. בניסוי התקבלה חריגה של אינדקס מחוץ לתחום, כשהרשימה הייתה ריקה, ולכן נדרשת בדיקת הכלי הפעיל לפני הפעולה.
2. שמירת נקודת העכבר: בלחיצה נשמרת נקודת העכבר. במהלך הגרירה מחושב ההפרש (דלתא) בין המיקום הנוכחי לנקודה ששמורה. ל-E יש גם שדה Delta, אבל הוא מייצג את גלגל העכבר ולא את הגרירה.
3. שיטת Move: ב-Shape מוגדרת שיטה Move שמקבלת את ההפרש ב-x וב-y, והיורשים מממשים אותה. בליין מזיזים את P1 ו-P2, ואז מחשבים מחדש את השיפוע והחיתוך.
4. טקסט: המיקום של הטקסט מתעדכן לפי ההפרש. הלוקיישן היה read only, וההזזה דרשה להסיר את זה.
5. FreeHand: נקודות המערך הן מסוג Point, שהוא struct. כשקוראים מהמערך מקבלים עותק, ולכן שינוי העותק לא משנה את הנקודה במערך. ניסיון להזיז כל נקודה לא עבד.
6. הפתרון: במקום להזיז את הנקודות, נשמר ההפרש המצטבר ב-delta, ובזמן הציור מחשבים כל נקודה כנקודת המקור פלוס delta. אחרי השינוי FreeHand זז כמו שצריך.
השיעור הבא בקורס: פרויקט מעשי ב-#C - תוכנת צייר - חלק 39

פרקי ההרצאה: פרויקט מעשי ב-#C - תוכנת צייר - חלק 38

  1. 00:00

    מחיקת צורה בעזרת כלי המחק

  2. 02:52

    הסרת הצורה מהרשימה ורענון המסך

  3. 06:57

    שגיאת אינדקס מחוץ לטווח במחיקה

  4. 08:03

    הזזת צורה בגרירת העכבר

  5. 10:46

    שמירת נקודת הסמן לחישוב ההזזה

  6. 12:08

    חישוב ההפרש והפעלת מתודת Move

תמלול ההרצאה: פרויקט מעשי ב-#C - תוכנת צייר - חלק 38

הטקסט המלא של הדקות הראשונות בהרצאה «פרויקט מעשי ב-#C - תוכנת צייר - חלק 38» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:04

    טוב, אז מה אנחנו רוצים היום לעשות? ארייס ומוב. אז ארייס דומה לסלקטור, שאם ארייס לחוץ ואני בוחר באובייקט, הוא צריך פשוט להיעלם.

  2. 00:24

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

  3. 01:33

    שונה זה טיפול של אירייסור. אז פה למה נגיד אם זה טלקטור שווה לטרו או אירייסור, אירייסר שווה לטרו.

  4. 02:04

    אז אם זה אירייסר, פה נגיד אם זה טלקטור, סליחה, אם זה סלקטור, ככה, ואם זה אירייסור, שוב אחר.

  5. 02:51

    אז מה אני עושה באירייסור? באירייסור אני רוצה פשוט למחוק אותו. אז איך אני... איך מוחקים? אני בסך הכל רוצה להוציא אותו מהרשימה ולעשות invalidate.

  6. 03:07

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

  7. 03:23

    panel-whiteboard invalidate זה אמור למחוק נריץ אז נצייר משהו field-rectangle ו-non-field-rectangle נשנה אותו להיות רק עבה יותר וזה נשנה להיות חלחל ועכשיו נגיד לו erase אותו זה מחק אותו וגם מוסיף לנו עוד משהו מוזר וגם אותו למחוק זה לא בדיוק עובד הוא מייצר לנו משהו אולי כי לא עשינו return אבל פה יש לנו return

  8. 04:15

    פה אנחנו בכל מקרה יוצאים כי מצאנו בואו נראה מה הסיפור שלו הוא מחק ולא מחק טוב הוסיף מריץ מחדש ונגיד לו non-field rectangle וline וfree hand נבחר זה לא מעניין ואולי אני אבחר את e ונגיד לו נבחר את המלבן בואו נראה מה קורה אז הוא אמור עכשיו למחוק את המלבן זה אמור להיות פיגר מחק אותו והוא עושה invalidate שגורם

  9. 05:15

    לסיור מחדש מה הוא עושה אחרי זה זה לא צ'ק אז הוא עושה return והוא סיים בפיינק עוברים על הרשימה אמורים להישאר פה שניים בואו נחלט יש פה שניים מי הם השניים האלה אחד זה הליין נשאר שם ליין ופרי-הנד זה הליין והשני זה הפרי-הנד זה פה בסדר אז מה מה הוא מצייר שם בנוסף, יש רק שניים, הוא סיים,

  10. 05:52

    מה עוד יש לו לעשות, זהו, ומה הוא סמוב, מה הוא סמוב כמובן לא מעניין, הוא רק נכון לגבי אם פרי-הנד כרגע בחור והוא לא בחור, הוא נקרא מה שרצינו, מוזר, בואו ננסה למחוק את הפרי-הנד, היא נוגעה בפרי-הנד, והוא עשה רימוב לפרי-הנד והוא ציין ולידייט, וכנ"ל לגבי הליין, אחת הכל, משהו שם לא היה בסדר עם הפילד רקטאנגל,

  11. 06:38

    שוב, נעשה field rectangle, וגם non-field ellipse ככה, ואז נגיד לו erase את ה-ellipse, מוחק אותה, ו-erase את המלבן הוא מוחק אותו, ויש לנו חריגה.

  12. 07:09

    Index was out of range shape בגודל 0, חוט אחד, כמובן אין דבר כזה. למה הגענו לכאן? אנחנו בפונקציה mouse-up, בואו נסגור את זה רגע, ב-mouse-up עם סלקטור, אז גם, כמובן, עם eraser, eraser ואני חושב שבעצם מיצינו את הדין עם eraser.

  13. 07:45

    כן, זה עובד די מצוין. freehand, eraser, מוחק אותו. non-feel-beliefs, eraser, מוחק. אז זה עובד מצוין, אני לא רואה את הבעיה. מה עוד רצינו לעשות? אז זה היה erase.

  14. 08:03

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

  15. 08:27

    אני הולך לקוד ובמאוס דאון, כאשר, או יותר נכון אפשר להגיד מאוס דאון, אם יש לי את סלקטור ובחרתי, אז עכשיו במאוס מוב עם פרי-הנד, אז ככה. אבל אם רדיו בטון לא הרייסר אלא סלקטור שק שווה לטרו אז זה בעצם move אז בעצם יש לי כרגע זהו אם הוא לחוץ ויש לי סלקטד שייפ אז אם סלקטד שייפ אם הוא שווה לנעל אין לי מה לעשות פה

  16. 09:31

    זאת אומרת שהיוזר לחץ זיז אבל בעצם לא רוצה להזיז שום דבר הוא לא בחר עדיין משהו פשוט נעשה פה ריטרן אבל אם אנחנו עדיין כאן זה אומר שהוא בחר והוא רוצה באמת להזיז אותו אז בעצם אני רוצה להגיד לסלאקטד שייף שלי שהלוקיישן שלו בעצם אמור להשתנות או להגיד לו מוב אני יודע בעזרת E, ל-E יש דלתא get a sign count, רגע, לא, לא, זה לא קשור

  17. 10:23

    זה גלגול הגלגל של העכבר, זה לא מעניין מה זה לוקיישן? sign count, the number of the, גם זה mouse wheel זה לא קשור אז מה שיש לי זה לא מעניין טוב אז אחרי דיון קצר אנחנו הגענו למסקנה שאנחנו חייבים לשמור את הנקודה xy כדי לחשב את הדלתא כי הדלתא הזו זו הדלתא של המהוס וויל כמה הוא זז אבל אין לנו את הדלתא של כמה העכבר

  18. 11:06

    עצמו הקרסר זז אז לכן אנחנו חייבים לשמור את הנקודות האלה אז נגדיר ב-Variables את private point נגיד cursor ובמאוס דאון ובמאוס אפ אנחנו נעדכן את המספר הזה אז נגיד שcursor שווה ל-new point e.x, e.y ו-selected shape נגיד לו לזוז את הדלתא בעצם.

  19. 12:04

    השאלה היא מה הדלתא אז כדי לחשב זה בעצם הנקודה הבאה לאן אנחנו מובילים אותה אבל כרגע נגדיר פה פוינט קאונט פוינט זה ככה וקרסר שווה בסוף לקאונט פוינט אבל באמצע אני צריך לחשב את דלתא אז נגדיר את Delta שווה ל-New Point שהיא ההפרש בין E.X פחות Cursor.X E.Y פחות Cursor.Y

  20. 13:39

    זאת Delta ונלך ל-Move ונוסיף את Move ונלך

לקורס המלא: פרויקט מעשי ב‑#C אונליין

ההרצאה הקודמת: פרויקט מעשי ב-#C - תוכנת צייר - חלק 37

ההרצאה הבאה: פרויקט מעשי ב-#C - תוכנת צייר - חלק 39

הרצאות קשורות מקורסים אחרים

  • תרגיל 24 - תוכנת צ'אט - חלק 1
  • פרויקט מעשי ב-#C - ספר טלפונים - חלק 1
  • תרגיל מעשי Delegate Event
  • שדרוג צייר שלנו על canvas

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס תכנות מתקדם - #Advanced .NET C
  • קורס WCF - תקשורת למתקדמים בדוט-נט