בכל פעם שאתה מציב לוח על טופס וכפתור בלוח זה אתה מבצע חיבור "בלתי נראה". הטופס הופך להיות בעלים של הכפתור, והלוח מוגדר להיות שלו הורה.
לכל רכיב דלפי יש נכס בעלים. הבעלים דואג משחרר הרכיבים בבעלות כאשר הוא משוחרר.
דומה, אך שונה, המאפיין הורה מציין את הרכיב המכיל את המרכיב "ילד".
הורה
הורה מתייחס לרכיב שנמצא בו רכיב אחר, כגון TForm, TGroupBox או TPanel. אם שליטה אחת (הורה) מכילה אחרים, ה- מכיל פקדים הם בקרות ילדים של ההורה.
הורה קובע כיצד מוצג הרכיב. לדוגמה, המאפיינים שמאל ועליונה כולם יחסית להורה.
ניתן להקצות ולשנות את המאפיין אב במהלך זמן ריצה.
לא לכל המרכיבים יש את ההורה. לטפסים רבים אין הורה. לדוגמה, טפסים המופיעים ישירות בשולחן העבודה של Windows מוגדרים על ידי האב. רכיב HasParent שיטה מחזירה ערך בוליאני המציין אם הרכיב הוקצה להורה או לא.
אנו משתמשים במאפיין הורה כדי להשיג או להגדיר את ההורה לבקרה. לדוגמה, הצב שני חלונות (לוח 1, לוח 2) על טופס והניח כפתור אחד (כפתור 1) בלוח הראשון (לוח 1). זה מגדיר את מאפיין ההורה של לחצן ללוח 1.
כפתור1.הורה: = Panel2;
אם אתה מציב את הקוד לעיל באירוע OnClick עבור הפאנל השני, כאשר אתה לוחץ על לוח 2 הכפתור "קופץ" מפאנל 1 לפאנל 2: פאנל 1 אינו עוד ההורה של הכפתור.
כאשר ברצונך ליצור כפתור TB בזמן ריצה, חשוב שנזכור להקצות הורה - הפקד המכיל את הכפתור. כדי שרכיב יהיה גלוי, זה חייב להיות הורה כדי להציג את עצמו בתוכו.
הורה זה והורה
אם תבחר בלחצן בזמן העיצוב ותסתכל במפקח האובייקט תבחין בכמה מאפיינים "מודעים להורים". ה ParentFontלדוגמה, מציין אם הגופן המשמש לכיתוב של הכפתור זהה לזה ששימש להורה של הכפתור (בדוגמה הקודמת: Panel1). אם ParentFont נכון לכל הלחצנים בלוח, שינוי מאפיין הגופן של הפאנל למצב מודגש גורם לכל כיתובו של לחצן בלוח להשתמש בגופן הזה (מודגש).
שולט ברכוש
כל הרכיבים החולקים אותו הורה זמינים כחלק מה- בקרות רכושו של אותו הורה. לדוגמה, ניתן להשתמש בבקרות חזרו על כל ילדי השליטה בחלון.
ניתן להשתמש בקטע הקוד הבא כדי להסתיר את כל הרכיבים הכלולים בלוח 1:
ל ii: = 0 ל Panel1.ControlCount - 1 לעשות
Panel1.Controls [ii]. נראה: = שקר;
טריקים
פקדי סתום יש שלושה מאפיינים בסיסיים: הם יכולים לקבל את מיקוד הקלט, הם משתמשים במשאבי מערכת והם יכולים להיות הורים לשליטה אחרת.
לדוגמה, רכיב הכפתור הוא פקד חלונות ואינו יכול להיות האב להרכיב אחר - אינך יכול למקם עליו רכיב אחר. העניין הוא שדלפי מסתירה מאיתנו את התכונה הזו. דוגמה לכך היא האפשרות הנסתרת של TStatusBar לכלול כמה רכיבים כמו TProgressBar.
בעלות
ראשית, שימו לב שטופס הוא הבעלים הכולל של כל הרכיבים השוכנים עליו (ממוקם על הטופס בזמן העיצוב). משמעות הדבר היא שכאשר טופס נהרס, כל הרכיבים בטופס נהרסים גם הם. לדוגמה, אם יש לנו יישום עם יותר טופס אחד כשאנחנו קוראים לשיטת Free או Release עבור אובייקט טופס, אנו אל תצטרך לדאוג לשחרור מפורש של כל האובייקטים בטופס הזה - מכיוון שהטופס הוא הבעלים של כל הדברים האלו רכיבים.
כל רכיב שאנו יוצרים, בזמן התכנון או בזמן ההפעלה, חייב להיות בבעלות של רכיב אחר. הבעלים של רכיב - הערך של נכס הבעלים שלו - נקבע על ידי פרמטר שהועבר לבנאי Create בעת יצירת הרכיב. הדרך היחידה האחרת להקצות מחדש את הבעלים היא באמצעות שיטות InsertComponent / RemoveComponent במהלך זמן הריצה. כברירת מחדל, טופס הוא הבעלים של כל הרכיבים עליו והוא בתורו בבעלות היישום.
כאשר אנו משתמשים במילת המפתח עצמי כפרמטר עבור שיטת יצירת - האובייקט שאנו יוצרים נמצא בבעלות הכיתה בה נמצאת השיטה - שהיא בדרך כלל צורה של דלפי.
אם מצד שני, אנו הופכים רכיב אחר (לא הטופס) לבעלים של הרכיב, אז אנו הופכים את אותו רכיב לאחראי על סילוק האובייקט כאשר הוא נהרס.
כמו כל אחד אחר רכיב דלפי, ניתן ליצור, להשתמש ולהשמיד רכיב TFindFile בהתאמה אישית בזמן ריצה. ליצירה, השתמש ושחרור א רכיב TFindFile בהפעלה, אתה יכול להשתמש בקטע הקוד הבא:
שימושים מצא קובץ;
...
var FFile: TFindFile;
תהליך TForm1.InitializeData;
התחל // form ("עצמי") הוא הבעלים של הרכיב // אין הורה שכן // זה מרכיב בלתי נראה.
FFile: = TFindFile. צור (עצמי);
...
סוף;
הערה: מכיוון שה- FFile נוצר עם בעלים (טופס 1), איננו צריכים לעשות דבר כדי לשחרר את הרכיב - הוא ישוחרר כאשר הבעלים ייהרס.
רכוש רכוש
כל הרכיבים השותפים לאותו בעל זמינים כחלק מה- רכוש רכוש של אותו בעל. הנוהל הבא משמש לניקוי כל הרכיבים בעריכה שנמצאים בטופס:
תהליך ClearEdits (AForm: TForm);
var
ii: מספר שלם;
התחל
ל ii: = 0 ל טופס. ComponentCount-1 לעשות
אם (טופס. רכיבים [ii] הוא TEdit) לאחר מכן TEdit (AForm. רכיבים [ii]). טקסט: = '';
סוף;
"יתומים"
חלק מהבקרות (כמו פקדי ActiveX) כלולות בחלונות שאינם VCL ולא בבקרת אב. עבור בקרות אלה, הערך של הורה הוא אפס וה חלון הורים המאפיין מציין את חלון האב שאינו VCL. הגדרת ParentWindow מזיזה את הפקד כך שהוא כלול בחלון שצוין. ParentWindow מוגדר אוטומטית בעת יצירת פקד באמצעות CreateParented שיטה.
האמת היא שברוב המקרים לא צריך לדאוג להורים ובעלי בית, אלא כשמדובר ב- OOP ו- פיתוח רכיבים או כשרוצים לקחת את דלפי צעד אחד קדימה ההצהרות במאמר זה יעזרו לכם לעשות את הצעד הזה מהר יותר.