
הטקסט המלא של הדקות הראשונות בהרצאה «פרויקט מעשי ב-#C - תוכנת צייר - חלק 33» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בשיעור הקודם, תיארנו את זה ולמדנו איך מציירים את זה, טיפלנו במלבנים, אמרנו שהדבר האחרון זה בעצם הפיצ'ר האחרון של המערכת הזו, וזה הוספת טקסט.
הרעיון הוא שאני אוכל ללחוץ פה על כפתור נוסף, T, טקסט, ואז כאשר אני אלחץ כאן יופיע פה מלבן של טקסטבוקס, אני אוכל להקליד כאן, ואז אם אני אגע במקום אחר, אז הוא פשוט יהפוך לטקסט עד לאותו רגע הוא טקסט בוקס ואז בעצם יופיע שם הטקסט אם אני נוגע בכפתור אחר גם בקיצור אם אני מוציא את
הפוקוס מהנקודה הזו אז היא הופכת לטקסט אם אני לוחץ על הסקייפ אז הוא אמור פשוט להיעלם כאילו התחרטתי זה גם יכול להיות פיצ'ר מעניין באמת read-u ו-end-u אנדו ורידו, בשבילכם, אני עוד לא יודע אם אני אעשה את זה אז טוב, בואו נתחיל לעבוד על הטקסט הרעיון הוא בעצם שיש כאן בעצם טקסט בוקס אנחנו נוסיף עכשיו טקסט בוקס לכאן, שהיא לא
תהיה ויזיבול וכאשר בעצם אנחנו נלחץ על הכפתור של הטקסט בוקס ואז נלחץ כאן, אז תופיע טקסט בוקס ואז נכתוב אל תוך התוכן שלה.
אבל היא תהיה כאן כל הזמן. אז ניקח טקסטבוקס מכאן, ונשים אותה כאן, ונעשה לה פרופרטיז כך שוויזיביליטי שלה, דאבל קליק, תהיה false.
אז היא לא ויזיבל. יפה. עכשיו נוסיף כפתור, נעשה קרופי, ונעשה פייס, ונשים את הכפתור כאן. אז זהו, זה קצת גורם לשיבושי תנועה. אולי קצת נגדל את זה, ניגע בזה ונעשה אסקייפ ואז נזיז את זה קצת כלפי מטה.
אולי כלפי, בעצם זה מקום טוב הרי, אז בעצם אולי אפשר לעשות כלפי מעלה. בוא נגיד עד לכאן ואז בעצם אפשר להגיד שזה הגודל המינימלי. אולי ננסה את זה להזיז אחרי שהוא ככה, מופלם.
אז כן, אולי גם באותה הזדמנות נשנה את השם פה לנטקורס וויידבורד. נטקורס זה שם חברת האם של המכללה. אז במקום ne אנחנו עכשיו נגיד פה t זה טקסט והטול טיפ יהיה והשם של הכפתור יהיה טקסט וכאשר בעצם אנחנו עושים פה מיוס דאון ו-T לחוץ אז נלך למיוס דאון מיוס דאון ו-T לחוץ
אולי נציף את זה להתחלה זה היה פרי-הנד כאשר טקסט צ'ק אז האמת, פה אנחנו לא יוצרים שאיפ חדש מה אנחנו עושים?
רק הופכים את הטקסט בוקס ל-Visible אז נגיד טקסט בוקס 1.Visible שווה ל-True אבל צריך גם להזיז אותה למקום הנכון אז טקסטבוקס אחד נקודה לוקיישן שווה לניו פוינט לאן זה אמור להגיע ל-e נקודה x e נקודה y בואו נראה איך זה נראה טקסטבוקס ניגע פה ניגע מה קרה במאוס אפ אנחנו בעצם אין אז לא יצרנו שייק
והאמת היא שאם זה כמו ב-freeN בעצם במאוסאפ אין לנו בעצם מה לעשות אז או שנעשה איף נוסף, שזה מה שאני חושב שכדאי לעשות או שנעשה אור, אם זה זה או זה אם זה מה? אם זה טקסט, אז גם נעשה ריטאנס אפילו לדעתי זה יותר קריא, אם זה זה או זה זה או לכתוב את זה ככה, אם זה זה ריטאנס, אם
זה זה ריטאנס יותר קריא להפריד את זה מאשר לשים אם זה זה או זה זה אז return או זה דבר הרבה יותר קשה למוח האנושי מאשר לראות שני דברים נפרדים ככה מוצקים נריץ שוב טקסט קלאק קלאק מצוין מה קרה או אז s הוא נעל בעצם יצא מזה יש לו בעיה במאוס דאון בעצם אנחנו מבצעים קוד כמו כולם והקוד המשותף פה בסוף הוא להוסיף את s ו-s
הוא נעל כי לא התחלנו אותו בשום ערך אז אפשר להגיד שבמקרה של טקסט בעצם אנחנו לא רוצים לעשות שום דבר מעבר לנקודה הזו אז פה אנחנו נעשה return ונריץ שוב טקסט טק טק טק טק טק טק מצוין, יפה מאוד האם ניתן לכתוב?
כן, ניתן לכתוב מצוין אז הרעיון הוא שאחרי שאני נוגע כאן אם כתבתי כאן ואז אני נוגע כאן אז הטקסט הופך לטקסט, זאת אומרת שאני עושה Mouse Down והטקסט בחור אז אם הטקסטבוק הוא כבר Visible בעצם אני רוצה להפוך אותו ל-Visible False, אולי אני רוצה להוסיף עוד טקסטבוק, שנייה אחת, טוב אז בדקנו בנט מיטינג בוויידבורד של נט
מיטינג שזה הוויידבורד שאנחנו בעצם לומדים ממנו ושם באמת אם כל הטקסט לחוץ ואני לוחץ בעוד מקום אז מופיע לי שם הטקסט בוקס אבל הטקסט במקום הישן מופיע, זאת אומרת אם כתבתי כאן אני כותב בו aaa ואז אני לוחץ כאן אז פה מופיע לי טקסט בוקס ריק אבל כאן מופיע לי aaa אפשר להגיד שכאן מופיע לי aaa ככה רק שנייה, זה הרעיון, אז גם זה מה שאנחנו רוצים, אבל לעומת זאת
אם אני אחרי שהטקסט בוקס ויזיבל ואני נוגע בכפתור אחר, אז נעלם הטקסט בוקס, כרגע אני נוגע בטקסט בוקס, כותב כאן, נוגע במקום אחר, הטקסט בוקס עובר לכאן, ויזיבל, אבל במקום הישן מופיע לי הטקסט עצמו.
זאת אומרת שבאמת במרס דאון אני רוצה ליצור את הטקסט, אובייקט טקסט אם הטקסטבוקס כבר היה ויזיבל מלפני כן אז נעצור את הריצה ובמאוס דאון אם זה שווה לטרו אני עושה את זה, זה יפה מאוד אבל גם אם זה לא טרו, לא, אם זה טרו אז אני עושה את זה אז אם זה טרו, אם הכפתור לחוץ אני הופך את
ה... אני מזיז את הטקסטבוקס והופך אותו לוויזיבל אבל אם הוא כבר היה ויזיבל, כי אני לא יכול לבדוק את זה אחרי אני חייב לבדוק את זה לפני כי אחרי הוא בוודאי ויזיבל אבל אם הוא היה ויזיבל כאן היא בעצם רוצה להוסיף אותו הבעיה היא שפה יש לי את הריטרן וההוספה נמצאת בסוף הפונקציה כאן אז איך אני אתמודד עם זה אני עדיין לא יודע
אחד מהפתרונות בעצם זה אוקיי כאן אנחנו הולכים להקצות שייפ חדש כאן נבדוק אם שייפ עדיין נל אם s עדיין שווה ל-nal אז return אין טעם להישאר בסונקציה יפה כאן אנחנו נייצר את הטקסט החדש אז נגדיר פה טקסט טקסט קצת בעייתי כי יש לנו שדה טקסט אם אני אכתוב פה למעלה טקסט אתם תראו שיש לי שדה כן פרופרטי שנקרא טקסט אז לכן
להשתמש בטקסט זה לא דבר חכם לכן פה הייתי נותן לו את השם המלא shapes.txt ונגדיר את shapes.txt שלהם יהיו יורש קודם כל בואו ניצור אותו אז הוא יהיה אינטרנל קלאס טקסט ונגדיר לו אינטרנל קונסטרקטור שכמובן מפעיל את הבייס ובבייס הוא עדיין לא יורש מ-שייפ אני צריך לתת לו color ו-width אז זהו האמת היא שהוא
לא לפי השטאנט אין לי אווי אין אווי אין דבר כזה אולי יש פונט אבל אין אווי אבל האמת היא גם לא כל כך משנה כי אני לא אעשה שימוש בכל התכונות שאני יורש אלא רק במיעוט מהן וזה מייצג בעצם תכנות ככה ככה כשאנחנו מתכננים מערכות אז אין עולם מושלם אפשר להתקרב לשלמות אבל אוקיי זה מה שיש אפשר
להפוך את זה ליותר ויותר מושלם אבל תמיד יהיה איזשהו פנלטי שנשלם אז צבע אבל כן יש לנו אז אנחנו נקבל את צבע color C כן מעניין אותנו מה נעשה במקרה שכזה אנחנו את C יכולים להעביר אין לנו בעיה אבל מה נעשה עם with זה לא מעניין אותנו שנעביר 0 אז זהו, אבל דבר שכן נתנו זה הסטרינג בעצמו, מה בעצם, מה כתוב שם?
סטרינג s, ואולי בעצם את זה אנחנו נשמור בתור private read only, נקרא לזה סטרינג, סטרינג l, סטרינג, אותו, ככה.
מה אנחנו בעצם מחויבים לממש? בואו נסתכל, implement, אז יש לנו שתי פונקציות, בואו נתחיל מדרו, בדרו אנחנו רוצים בעצם לצייר, אז נגיד g נקודה, אבל שנייה בואו רק נשים using זה שטקסט לא מתנגש בשום דבר, טוב לא נראה שהוא מתנגש, אם הוא מתנגש נתמודד אז זה g נקודה דרו, דרו טקסט יש לו? לא, דרו סטרינג, אוקיי
אז בדרו סטרינג הוא רוצה את סטרינג שלנו, הוא רוצה את הפון, אז זה אחד משש, בואו נראה אם יש למה שצריך יותר פשוט, לא כולם לא פשוטים, אז בואו נגדיר פה פונט, תכף נחזור לפונט, ובראש, זה נראה לי הכי פשוט, אז צריך פה את בראש, יש לנו את בראש,
וצריך בו נקודה, אז נגדיר pt, ונגדיר point pt שווה ל-new point, אז בעצם אנחנו צריכים את הקורדינטות, אז נגדיר private read only את point p, אולי נעשה את זה עם underscore נקרא לזה בעצם point המיקום שלה או שנקרא לזה לוקיישן נהיה קונסיסטנטיים עם המערכת הזו ונגדיר את זה עם אותיות קטנות
וכאן בעצם נגיד שלוקיישן וזה בדרו בדרו כבר יש לנו את לוקיישן היינו אמורים לקבל אותו פה אז כאן נקבל את זה בתור int x וint y כי ככה בעצם הטופס הראשי יראה את זה וכאן נגדיר את לוקיישן שווה לניו פוינט של X ו-Y כאן בעצם יש לנו כבר את לוקיישן ככה אז רק פונט נשאר כרגע את פונט נגדיר כאיזה משהו סטטי, אחרי
זה כבר נראה מה לעשות איתו פרייבט ריד אונלי פונט שווה לניו שנייה, טוב אז אחרי קצת משחקים איתו, הנה הוא מתפקד לא היינו, לא מתפקד, אנחנו פשוט, אה, לא ידענו פה פונט, אנדרסקור, הוא רצה את האנדרסקור, ככה טוב, יש לנו פה כמה קונספקטים לפונט, פונט פרוטייפ, פונט סטייל, וכל מיני, ועוד ועוד,
ועוד ועוד, רק אנשים יותר ויותר מסובכים אז פה הוא רוצה פונט פרוטוטייפ, זהו, האמת היא שאני לא חייב לשמור את זה אני יכול לקבל את זה בקונסטרוקציה אז נגדיר כאן את פונט f תנו לנו אותו אנחנו פשוט נקבל אותו ונשמח איתו אז נגדיר פה פונט שווה ל-f וזהו וכאן יש לנו אחרי זה את under score font והכל מצוין רק נשנה את זה עם f כנה על מנת לשמר קונסיסטנטיות יפה אז זאת היא draw וב-update זה בעצם ההחלטה
לצייר, ההחלטה לקבע מיקום, אז פה אנחנו בעצם נשמר את ה-X ואת ה-Y, נכון? אז זהו, שפה בעצם לא צריך, אין לנו בעצם צורך ב-update, אז אנחנו לא צריכים אותה, אז אם באמת מישהו יקרא לה, אז שיחטוף את החריגה הזו,
אולי לא בדיוק את זו, אולי נגדיר איזה משהו אחר, כי בגדול אף אחד לא היינו אמורים להגיע לנקודה הזו.
אז for new, נגיד invalid operation או invalid program accession, לא היינו אמורים להגיע למצב כזה. השורה הזו לא אמורה לפעול.
We should never use this function. Not we,