בית
Top.Mail.Ru Yandeks.Metrika
פורום: "ראשי";
ארכיון נוכחי: 2002.01.08;
הורדה: [xml.tar.bz2];

למטה

הרכיב לא נמשך, וזהו ... מצא סניפים דומים


Aleksandr   (2001-12-18 13:03) [0]

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

סוג
TWayTree = כיתה (TGraphicControl)
פְּרָטִי
...
מוּגָן
הליך צבע; לעקוף;
ציבורי
בנאי צור (AOwner: TComponent);
לאור
...
מאפיין צבע ברירת מחדל clWhite;
נכס ברירת מחדל גלוי נכון;
הסוף;

הליך הרשמה;

הפעלה

נוהל TWayTree.Paint;
היה
קו: טרקט;
להתחיל
בירושה;
Canvas.Brush.Color: = צבע;
ARect.Left: = שמאל;
ARect.Top:= Top;
ARect.Bottom: = למעלה + גובה;
חץ.ימין: = שמאל + רוחב;
Canvas.FillRect (ARect)
הסוף;

בנאי TWayTree.Create;
להתחיל
בירושה יצירה (AOwner);
...
הסוף;

הליך הרשמה;
להתחיל
RegisterComponents ("WayTrees", [TWayTree])
הסוף;

הסוף.

לא רק זאת, כשאני עדיין מנסה להוסיף את המאפיינים FPen ו- FBrush (לגישה נפרדת בזמן העיצוב):

TWayTree = כיתה (TGraphicControl)
פְּרָטִי
FPen: TPen;
FBrush: TBrush;
נוהל RePaintRequest (שולח: נושא);
נוהל SetBrush (ערך: TBrush);
נוהל SetPen (ערך: TPen);
מוּגָן
הליך צבע; לעקוף;
ציבורי
בנאי צור (AOwner: TComponent);
הרס להרוס;
לאור
מאפיין צבע ברירת מחדל clWhite;
נכס גלוי;
רכוש מברשת: TBrush קרא FBrush לכתוב SetBrush;
עט רכוש: TPen קרא FPen לכתוב SetPen;
הסוף;

הליך הרשמה;

הפעלה

נוהל TWayTree.Paint;
היה
קו: טרקט;
להתחיל
בירושה;
Canvas. פן: = FPen;
Canvas.Brush: = FBrush;
Canvas.Brush.Color: = צבע;
ARect.Left: = שמאל;
ARect.Top:= Top;
ARect.Bottom: = למעלה + גובה;
חץ.ימין: = שמאל + רוחב;
Canvas.FillRect (ARect);
Canvas.TextOut (ARect.Left, ARect.Top, "AAA");
הסוף;

הרס TWayTree.Destroy;
להתחיל
FPen.Free;
FBrush.Free;
בירושה להרוס
הסוף;

בנאי TWayTree.Create;
להתחיל
בירושה יצירה (AOwner);
FPen: = TPen.Creat;
FBrush: = TBrush. ליצור;
FPen.OnChange: = צבוע מחדש;
FBrush.OnChange: = צבוע מחדש בחשבון
הסוף;

נוהל TWayTree.SetBrush;
להתחיל
אם ערך = אפסי אז
יציאה;
FBrush.Assign (ערך);
לא חוקי
הסוף;

נוהל TWayTree.SetPen;
להתחיל
אם ערך = אפסי אז
יציאה;
FPen.Aignign (ערך);
לא חוקי
הסוף;

נוהל TWayTree.RePaintRequest;
להתחיל
לא חוקי
הסוף;

הליך הרשמה;
להתחיל
RegisterComponents ("WayTrees", [TWayTree]);
הסוף;

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



csf   (2001-12-18 13:09) [1]

הפעל מחדש את דלפי, הם אומרים, עוזר.
על מאוחסן אתה עדיין יכול לקרוא ...



Aleksandr   (2001-12-18 13:11) [2]

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



csf   (2001-12-18 13:19) [3]

... יהיה נחמד לבדוק עם Paint FPen & FBrush באפס ...



Юрий Зотов   (2001-12-18 14:30) [4]

> csf

1. > הפעל מחדש את דלפי, הם אומרים, עוזר.
עצות בעלות ערך.

2. > אתה עדיין יכול לקרוא על מאוחסן ...
אתה יכול. רק לסאבץ 'זה לא קשור.

3. > ... יהיה נחמד לבדוק עם Paint FPen & FBrush באפס ...
למה? הם נוצרים במבנה הרכיב. ניל לא יכול להיות שם.

סה"כ: כתבת ביטויים של 3 וכל 3, סליחה, שטויות. האם היה שווה לכתוב? האם עליי לענות באופן כללי על שאלות שאתה נושא זה, בלשון המעטה, לא מכיר אותך במיוחד?


> אלכסנדר

עם עקיפה, כבר הבנת את זה בעצמך, אבל זה לא הכל - יש לך ציור כפול מחדש:

נוהל TWayTree.SetBrush;
להתחיל
אם ערך = אפסי אז // זה מיותר ואפילו מזיק - הוא מסתיר שגיאות משתמש
יציאה;
FBrush.Assign (ערך); // צור FBrush.OnChange והתקשר ל RePaintRequest
Invalidate // זה מיותר - הרישום מחדש מתבצע
הסוף;

ואותו דבר ב- SetPen. בנוסף, המשתנה של ARect בצבע הוא מיותר לחלוטין - השתמש ב- ClientRect או ב- Canvas.ClipRect.

לבסוף, העיקר ש- FBrush ו- FPen שלך הם חסרי תועלת לחלוטין - רק משאבים מיותרים נהרסים. השתמש בבד המובנה:

לאור
עט רכוש: TPen לקרוא GetPen לכתוב SetPen;
...

פונקציה ... GetPen: TPen;
להתחיל
תוצאה: = קנבס
הסוף;

נוהל ... SetPen (const ערך: TPen);
להתחיל
Canvas.Pen.Aignign (ערך)
הסוף;

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



Aleksandr   (2001-12-18 15:50) [5]

2 יורי זוטוב
תודה על המידע. עם זאת, התייחסות ישירה למאפייני הבד תגרום לכך שלא יהיו "סטנדרטים" כברירת מחדל - היא תמשיך לצבוע תמיד עם הצבע בו נעשה שימוש לאחרונה. ובהתאם, לא ניתן לשתול דבר ב- OnChange - תתרחש לולאה אלמנטרית - הגדרת צבע הבד קוראת OnChange, זה גורם לצביעה מחדש, וצבע הבד משתנה שוב בציור מחדש.
עומדת על הפרק שאלה אחת: כיצד להוסיף למרכיב TScrollBar? משהו שאני לא יכול לעשות כדי לעשות ירושה כפולה - מ- TGraphicControl ומ- TScrollBar ...



DieHard   (2001-12-18 16:01) [6]

ירושה כפולה לא תעבור.
נסה לרשת מ- TScrollBox.



MBo   (2001-12-18 16:02) [7]

אין ירושה כפולה.
אולי לרשת מ- TWinControl?



Polevi   (2001-12-18 16:19) [8]

TCustomControl



Aleksandr   (2001-12-18 16:19) [9]

הממ ... אוקיי, בואו נשאיר את זה לעת עתה ... הנה איך להימנע ממרכיבים מהבהבים כל הזמן בעת ​​שינוי גודל של צורות?



panov   (2001-12-18 16:31) [10]

> © אלכס (18.12.01 16: 19)
נסה לציין Enabled: = לא נכון לפני שינוי הגודל



Юрий Зотов   (2001-12-18 17:25) [11]

> אלכסנדר © (18.12.01 15: 50)

> היא תמיד תמשיך לצייר בצבע שהיה בשימוש לאחרונה.

מה שנדרש.


> ובהתאם, לא ניתן לשתול שום דבר ב- OnChange

ולא צריך. שיטת הצביעה שלך תיקרא אוטומטית ולא נדרש שום דבר אחר.

> תתרחש לולאה אלמנטרית - הגדרת צבע הבד
> מתקשר ל- OnChange, הוא קורא לשרטוט מחדש, ובציור מחדש מחדש
> צבע בד משתנה.

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

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

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

יתר על כן, לגבי הבהוב ו- ScrollBar - הקשיבו לעצתו של פולבי. TCustomControl הוא חלון. סרגל גלילה מוכנס לשם על ידי הגדרת פשוט הסגנונות WS_HSCROLL / WS_VSCROLL ב- CreateParams, ותוכלו להפחית את הבהוב על ידי הגדרת המאפיין DoubleBuffered.



עמודים: 1 ענף שלם

פורום: "ראשי";
ארכיון נוכחי: 2002.01.08;
הורדה: [xml.tar.bz2];

למעלה





זיכרון: 0.6 MB
זמן: 0.027 c
6-22273
דניס טיטוב
2001-10-06 11:50
2002.01.08
בניין LAN


1-22154
מרינה
2001-12-20 15:42
2002.01.08
מחיקת תוכן הספרייה


14-22345
petr_v_a
2001-11-05 20:13
2002.01.08
להגנה על לאנה רוזנובה ושות '!!!


6-22297
שואל
2001-10-10 17:09
2002.01.08
ייעץ למי שזה יכול


1-22108
מיכאל
2001-12-19 19:10
2002.01.08
הדפסה ארוכה על מדפסת מטריצה





אפריקאנס אלבני ערבי אַרְמֶנִי אזרביג'אן הבסקים בלארוסית בולגרי קטלאנית הסיני (פשוט) סינית (מסורתית) קרואטית צ'כיה דני הולנדי אנגלית אסטוני פיליפיני פיני צרפתית
גליציה גאורגיה גרמני יווני קריאולית האיטית עברי הינדי הונגרי איסלנדי אינדונזי אירי איטלקי יפני קוריאני לטבי ליטאי מקדוניה מלאית מלטזית נורבגי
פרסי פולני פורטוגזי רומנית רוסי סרבית סלובקי סלובני ספרדי סוואהילית שבדי תאילנדי תורכי אוקראיני אורדו ויאטנמית וולשית יידיש בנגלית בוסנית
קבואנו אספרנטו גוג'ראטית האוסה המונג איגבו יָאוָנִי קנאדה לחמר לאו הלטינית מאורים מרתי מונגולי נפאלית פונג'בית סומליה טמילית טלוגו יורובה
זולו
Английский Французский Немецкий Итальянский Португальский Русский Испанский