घर
Top.Mail.Ru Yandeks.Metrika
मंच: "मुख्य";
वर्तमान संग्रह: 2002.01.08;
डाउनलोड करें: [xml.tar.bz2];

नीचे

घटक तैयार नहीं है, और यह बात है ... इसी तरह की शाखाएँ खोजें


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

प्रिय साथियों,
मुझे इस घटक को बनाने की आवश्यकता थी। TGraphicControl से स्पॉन द्वारा बनाया गया। मैंने इसे फॉर्म पर डाल दिया - सब कुछ क्रम में है, गुण दिखाई दे रहे हैं, लेकिन यह तैयार नहीं है, और यह बात है ... कोड इस प्रकार है:

टाइप
ट्वायट्री = वर्ग (TGraphicControl)
निजी
...
संरक्षित
प्रक्रिया पेंट; ओवरराइड;
सार्वजनिक
निर्माता बनाएँ (AOwner: TComponent);
प्रकाशित
...
संपत्ति का रंग डिफ़ॉल्ट क्लिहाइट;
संपत्ति दृश्यमान डिफ़ॉल्ट सत्य;
अंत;

प्रक्रिया रजिस्टर;

कार्यान्वयन

प्रक्रिया TWayTree.Paint;
था
कीट: TRect;
शुरू करना
विरासत में मिला;
कैनवस.ब्रश। रंग: = रंग;
ARect.Left: = वाम;
ARect.Top:=Top;
ARect.Bottom: = शीर्ष + ऊंचाई;
ARect.Right: = Left + Width;
कैनवस.फिल्टरक्ट (एरेक्ट)
अंत;

निर्माता TWayTree.Create;
शुरू करना
इनहेरिटेड क्रिएट (AOwner);
...
अंत;

प्रक्रिया रजिस्टर;
शुरू करना
रजिस्टरकमपर्स ("वेइट्स", [टायट्री])
अंत;

समाप्त।

इतना ही नहीं, जब मैं अभी भी FPen और FBrush संपत्तियों को जोड़ने की कोशिश कर रहा हूं (डिजाइन समय में अलग पहुंच के लिए):

ट्वायट्री = वर्ग (TGraphicControl)
निजी
FPen: TPen;
एफब्रश: टीबीआरश;
प्रक्रिया RePaintRequest (प्रेषक: Tobject);
प्रक्रिया सेटब्रश (मूल्य: टीबीआरश);
प्रक्रिया सेटपेन (मूल्य: टीपीएन);
संरक्षित
प्रक्रिया पेंट; ओवरराइड;
सार्वजनिक
निर्माता बनाएँ (AOwner: TComponent);
नाश करने वाला;
प्रकाशित
संपत्ति का रंग डिफ़ॉल्ट क्लिहाइट;
संपत्ति दिखाई देने योग्य;
प्रॉपर्टी ब्रश: टीबीआरश ने एफब्रश लिखा सेटब्रश पढ़ा;
प्रॉपर्टी पेन: टीपीएन पढ़ी हुई एफपीएन सेटपेन;
अंत;

प्रक्रिया रजिस्टर;

कार्यान्वयन

प्रक्रिया TWayTree.Paint;
था
कीट: TRect;
शुरू करना
विरासत में मिला;
कैनवस.पेन: = एफपेन;
कैनवस.ब्रश: = एफब्रश;
कैनवस.ब्रश। रंग: = रंग;
ARect.Left: = वाम;
ARect.Top:=Top;
ARect.Bottom: = शीर्ष + ऊंचाई;
ARect.Right: = Left + Width;
कैनवस.फिलरेक्ट (एरेक्ट);
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;
शुरू करना
रद्द करना
अंत;

प्रक्रिया रजिस्टर;
शुरू करना
रजिस्टरकंपर्स ("वेइट्स", [टायट्री]);
अंत;

समाप्त।
घटक को प्रपत्र में सम्मिलित करते समय शपथ ली जाती है, जो पेन को शून्य पर सेट नहीं कर सकता है। इंस्पेक्टर में पेन और ब्रश दिखाई देते हैं, लेकिन जब आप + पर क्लिक करते हैं, तो निफेगा बाहर नहीं निकलता है, जब आप घटकों को उसी त्रुटि का आकार देते हैं ... तो मैं यहां क्या गलत कर रहा हूं?



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

डेल्फी को पुनरारंभ करें, वे कहते हैं, मदद करता है।
पर संग्रहित आप अभी भी पढ़ सकते हैं ...



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

क्षमा करें, मुझे लैंडफिल पर जाना है ... मुझे लगा कि मैं विध्वंसक के साथ निर्माणकर्ता के सामने एक ओवरराइड खींचना भूल गया ... मुझे आश्चर्य है कि आप इस घटक के लिए एक ऊर्ध्वाधर स्क्रॉलबार कैसे कनेक्ट कर सकते हैं ...



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

... पेंट FPen और FBrush के साथ nil पर जांच करना अच्छा होगा ...



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

> सीएसएफ

1। > डेल्फी को फिर से शुरू करें, वे कहते हैं, मदद करता है।
मूल्यवान सलाह।

2। > आप अभी भी संग्रहीत के बारे में पढ़ सकते हैं ...
आप कर सकते हैं। केवल sabzh के लिए यह करने के लिए कुछ भी नहीं है।

3। > ... पेंट FPen और FBrush के साथ नील पर जांच करना अच्छा होगा ...
क्यों? वे घटक निर्माता में बनाए जाते हैं। नील नहीं हो सकता।

कुल: आपने 3 वाक्यांश लिखे और सभी 3, क्षमा करें, बकवास है। क्या यह लिखने लायक था? क्या मुझे आम तौर पर उन सवालों के जवाब देने चाहिए जिनके विषय आप हैं, इसे हल्के ढंग से रखना, बहुत परिचित नहीं हैं?


> हांग्जो

ओवरराइड के साथ, आपने पहले से ही अपने आप को समझ लिया था, लेकिन यह सब नहीं है - आपके पास एक डबल रिड्रा है:

प्रक्रिया TWayTree.SetBrush;
शुरू करना
यदि मान = शून्य तो // यह अनावश्यक और हानिकारक है - यह उपयोगकर्ता की त्रुटियों को मिटा देता है
बाहर निकलें;
FBrush.Assign (मूल्य); // FBrush.OnChange उत्पन्न करें और RePaintRequest को कॉल करें
अमान्य // यह अतिशयोक्ति है - पुनर्विकास जारी है
अंत;

और सेटपेन में भी यही बात है। इसके अलावा, पेंट में ARect वेरिएबल पूरी तरह से अनावश्यक है - ClientRect या Canvas.ClipRect का उपयोग करें।

अंत में, मुख्य बात यह है कि आपका FBrush और FPen बिल्कुल बेकार हैं - केवल अतिरिक्त संसाधन नष्ट हो जाते हैं। अंतर्निहित कैनवस का उपयोग करें:

प्रकाशित
प्रॉपर्टी पेन: टीपीएन रीड गेटेन राइट सेटपेन;
...

समारोह ... GetPen: TPen;
शुरू करना
परिणाम: = कैनवास
अंत;

प्रक्रिया ... सेटपेन (कास्ट वैल्यू: टीपीएन);
शुरू करना
Canvas.Pen.Assign (मान)
अंत;

निष्कर्ष - यहां तक ​​कि ऐसे सरलतम घटकों को अधिक सावधानी से सोचा जाना चाहिए और अधिक सटीक रूप से किया जाना चाहिए।



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

एक्सएनयूएमएक्स यूरी ज़ोटोव
जानकारी के लिए धन्यवाद। हालांकि, कैनवास के गुणों का एक सीधा संदर्भ यह कारण होगा कि डिफ़ॉल्ट रूप से कोई "मानक" नहीं होगा - यह हमेशा उस रंग के साथ पेंट करना जारी रखेगा जो पिछले उपयोग किया गया था। और, तदनुसार, OnChange पर कुछ भी नहीं लगाया जा सकता है - एक प्राथमिक लूप होगा - कैनवास के रंग को OnChange सेट करना, यह एक redraw का कारण बनता है, और कैनवास का रंग फिर से redraw में बदल जाता है।
एजेंडे पर एक सवाल बाकी है: TScrollBar घटक को कैसे जोड़ा जाए? TGraphicControl से और TScrollBit से - मैं कुछ भी दोहरी विरासत करने के लिए नहीं कर सकता हूँ ...



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)
निर्दिष्ट करने का प्रयास करें: = आकार बदलने से पहले गलत



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

> हांग्जो © (18.12.01 15: 50)

> वह हमेशा उस रंग में रंगती रहेगी जो पिछले इस्तेमाल किया गया था।

जिसकी आवश्यकता है।


> और, तदनुसार, OnChange पर कुछ भी नहीं लगाया जा सकता है

और कोई जरूरत नहीं। आपके पेंट विधि को स्वचालित रूप से कहा जाएगा, और कुछ और की आवश्यकता नहीं है।

> एक प्राथमिक लूप होगा - कैनवास का रंग सेट करना
> OnChange को कॉल करता है, इसे redraw कहता है, और फिर redraw में
> कैनवास का रंग बदलता है।

सबसे पहले, आप स्वयं इस बात की पुष्टि करते हैं कि कैनवास के गुणों को बदलना स्वचालित रूप से आपकी पेंट विधि कहलाता है। इसलिए, आपको पिछले बिंदु से सहमत होना चाहिए - आपको किसी भी ऑनचेंज हैंडलर की जरूरत नहीं है (ऑनचेंज हैंडलर केवल अतिरिक्त रिडरिंग देते हैं - इसलिए अतिरिक्त ब्लिंकिंग)।

दूसरे, redrawing में, कैनवास के गुणों को न बदलें। क्यों? वास्तव में, यदि आप घटक के गुणों को कैनवास के गुणों से जोड़ते हैं, तो जब आप पेंट विधि को कॉल करते हैं, तो कैनवास के ये गुण ALREADY आवश्यकतानुसार सेट हो जाएंगे। कुछ भी बदले बिना, उनके साथ ड्रा करें। और फिर कोई लूपिंग नहीं होगी।

सामान्य तौर पर, मैं आपको इसे आज़माने की सलाह देता हूं - आप अपने लिए देखेंगे। मुझे लगता है कि झिलमिलाहट में काफी कमी आएगी।

इसके अलावा, झिलमिलाहट और स्क्रॉलबार के बारे में - पोल्वी की सलाह सुनें। TCustomControl एक खिड़की है। स्क्रॉलबेर को वहां केवल Create_arams में WS_HSCROLL / WS_VSCROLL शैलियों को सेट करके डाला जाता है, और आप DoubleBuffered संपत्ति सेट करके झिलमिलाहट को कम कर सकते हैं।



पन्ने: 1 पूरी शाखा

मंच: "मुख्य";
वर्तमान संग्रह: 2002.01.08;
डाउनलोड करें: [xml.tar.bz2];

ऊपर









मेमोरी: 0.61 एमबी
समय: 0.03 c
3-21963
szap
2001-12-05 11:53
2002.01.08
गति


4-22482
PONTIY
2001-11-01 10:06
2002.01.08
WinExec या ShellExecute


1-22165
पकड़ लेना
2001-12-20 20:18
2002.01.08
फ़ॉर्म पर एक लोगो बनाना और रखना


1-22131
Katya
2001-12-20 08:27
2002.01.08
मुझे वास्तव में जरूरत है


3-21987
अच्छी तरह से
2001-12-06 08:44
2002.01.08
RxLib





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский