منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "Main";
الأرشيف الحالي: 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: = Left؛
ARect.Top:=Top.
ARect.Bottom: = أعلى + الارتفاع ؛
ARect.Right: = اليسار + العرض ؛
Canvas.FillRect (منتصب)
الغاية؛

منشئ TWayTree.Create.
بدأ
إنشاء وراثة (AOwner) ؛
...
الغاية؛

سجل الإجراءات ؛
بدأ
RegisterComponents ("WayTrees"، [TWayTree])
الغاية؛

نهاية.

ليس ذلك فحسب ، عندما ما زلت أحاول إضافة خصائص FPen و FBrush (للوصول المنفصل في وقت التصميم):

TWayTree = فئة (TGraphicControl)
خاص
FPen: TPen ؛
FBrush: TBrush؛
الإجراء RePaintRequest (المرسل: TObject) ؛
الإجراء SetBrush (القيمة: TBrush) ؛
الإجراء SetPen (القيمة: TPen) ؛
محمي
الإجراء الطلاء ؛ تجاوز.
جمهور
إنشاء منشئ (AOwner: TComponent) ؛
المدمرة تدمير.
نشرت
خاصية اللون الافتراضي clWhite؛
الملكية مرئية ؛
فرشاة الملكية: قراءة TBrush FBrush إرسال SetBrush؛
القلم الملكية: TPen قراءة FPen إرسال SetPen؛
الغاية؛

سجل الإجراءات ؛

التنفيذ

الإجراء TWayTree.Paint.
فار
منتصب:
بدأ
الموروثة.
Canvas.Pen: = FPen؛
Canvas.Brush: = FBrush؛
Canvas.Brush.Color: = اللون ؛
ARect.Left: = Left؛
ARect.Top:=Top.
ARect.Bottom: = أعلى + الارتفاع ؛
ARect.Right: = اليسار + العرض ؛
Canvas.FillRect (منتصب) ؛
Canvas.TextOut (ARect.Left، ARect.Top، "AAA")؛
الغاية؛

المدمر TWayTree.Destroy.
بدأ
FPen.Free.
FBrush.Free.
تدمير الموروثة
الغاية؛

منشئ TWayTree.Create.
بدأ
إنشاء وراثة (AOwner) ؛
FPen: = TPen.Create؛
FBrush: = TBrush.Create؛
FPen.OnChange: = RepaintRequest؛
FBrush.OnChange: = RepaintRequest
الغاية؛

الداخلي TWayTree.SetBrush؛
بدأ
إذا القيمة = لا شيء بعد ذلك
الخروج؛
FBrush.Assign (القيمة) ؛
إبطال
الغاية؛

الإجراء TWayTree.SetPen؛
بدأ
إذا القيمة = لا شيء بعد ذلك
الخروج؛
FPen.Assign (القيمة) ؛
إبطال
الغاية؛

الإجراء TWayTree.RePaintRequest ؛
بدأ
إبطال
الغاية؛

سجل الإجراءات ؛
بدأ
RegisterComponents ("WayTrees"، [TWayTree]) ؛
الغاية؛

نهاية.
يقسم المكون عند إدخاله في النموذج ، والذي لا يمكن ضبط القلم على لا شيء. يظهر القلم والفرشاة في المفتش ، ولكن عند النقر فوق + ، لا تتسرب nifiga ، عند تغيير حجم المكونات بنفس الخطأ ... ماذا أفعل الخطأ هنا؟



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

إعادة تشغيل دلفي ، كما يقولون ، يساعد.
حول تخزين لا يزال بإمكانك القراءة ...



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

آسف ، يجب أن أذهب إلى المكب ... لقد اكتشفت أنني نسيت رسم تخطي مقابل المنشئ مع المدمر ... وأتساءل كيف يمكنك توصيل شريط تمرير رأسي بهذا المكون ...



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

... سيكون من الرائع التحقق من تطبيق Paint FPen & FBrush على الصفر ...



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

> CSF

1. > يقولون إن إعادة تشغيل دلفي تساعد.
نصيحة قيمة.

2. > لا يزال بإمكانك القراءة عن المخزن ...
يمكنك ذلك. فقط ل sabzh هذا ليس لديه ما يفعله.

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؛
بدأ
النتيجة: = Canvas.Pen
الغاية؛

الإجراء ... SetPen (const القيمة: TPen)؛
بدأ
Canvas.Pen.Assign (القيمة)
الغاية؛

خاتمة - حتى أبسط هذه المكونات يجب التفكير فيها بعناية أكبر وفعلها بدقة أكبر.



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

2 يوري زوتوف
شكرا للمعلومات ومع ذلك ، فإن الإشارة المباشرة لخصائص اللوحة القماشية ستؤدي إلى عدم وجود "معايير" بشكل افتراضي - ستظل دائمًا ترسم بالألوان التي تم استخدامها مؤخرًا. وبناءً على ذلك ، لا يمكن زرع أي شيء على OnChange - ستحدث حلقة أولية - لتعيين لون المكالمات القماشية OnChange ، فإنه يتسبب في إعادة الرسم ، ويتغير لون Canvas مرة أخرى في إعادة الرسم.
يتبقى سؤال واحد على جدول الأعمال: كيفية إضافة إلى مكون 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]

> Aleksandr © (18.12.01 16: 19)
حاول تحديد ممكّن: = خطأ قبل تغيير الحجم



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

> Aleksandr © (18.12.01 15: 50)

> ستستمر دائمًا في الطلاء باللون الذي تم استخدامه مؤخرًا.

ما هو مطلوب.


> وبالتالي ، لا يمكن زرع أي شيء على OnChange

ولا حاجة. سيتم استدعاء طريقة الطلاء الخاصة بك تلقائيًا ، ولا يلزم أي شيء آخر.

> ستحدث حلقة أولية - تحدد لون اللوحة القماشية
> يستدعي OnChange ، فإنه يستدعي الرسم ، ويعيد الرسم مرة أخرى
> يتغير لون قماش.

أولاً ، أنت نفسك تؤكد أن تغيير خصائص اللوحة القماشية يستدعي تلقائيًا طريقة الطلاء. لذلك ، يجب أن توافق على النقطة السابقة - لا تحتاج إلى أي من معالجات OnChange (تعطي معالجات OnChange إعادة رسم إضافية فقط - وبالتالي الوامض الإضافي).

ثانياً ، في إعادة الرسم ، لا تقم بتغيير خصائص اللوحة. لماذا؟ في الواقع ، إذا قمت بربط خصائص المكون بخصائص اللوحة القماشية ، فعندما تستدعي طريقة الرسام ، سيتم ضبط خصائص اللوحة القماشية عند الحاجة. ارسم معهم ، دون تغيير أي شيء. وبعد ذلك لن يكون هناك حلقات.

بشكل عام ، أنصحك بتجربته - سترى بنفسك. أعتقد أن وميض سوف تنخفض بشكل كبير.

علاوة على ذلك ، بخصوص وميض و ScrollBar - استمع إلى نصيحة Polevi. TCustomControl هو نافذة. يتم إدراج شريط التمرير هناك ببساطة عن طريق تعيين أنماط WS_HSCROLL / WS_VSCROLL في CreateParams ، ويمكنك تقليل وميض عن طريق تعيين خاصية DoubleBuffered.



صفحات: 1 فرع كامل

المنتدى: "Main";
الأرشيف الحالي: 2002.01.08;
تنزيل: [xml.tar.bz2];

الطابق العلوي









الذاكرة: 0.61 ميغابايت
الوقت: 0.03 ج
1-22226
غذاء
2001-12-15 13:06
2002.01.08
لماذا لا يعمل هذا الكود البسيط ...


3-21921
MVova
2001-12-04 10:41
2002.01.08
التواصل بين الكثيرين ؛)


14-22377
sudiv
2001-11-08 10:54
2002.01.08
C ++؟


14-22331
فاسكو دا جاما
2001-10-26 17:57
2002.01.08
هل هناك الكثير من اليسار بين المبرمجين؟


3-21970
تشوك
2001-12-05 15:46
2002.01.08
مساعدة في التعبئة والتغليف





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch أنجليزي الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский