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

नीचे

अपने गैर-विज़ुअल घटक से प्रपत्र गुण कैसे बदलें इसी तरह की शाखाएँ खोजें


Мыш   (2003-04-18 17:25) [0]

मैं फॉर्म पर एक घटक को फेंक देता हूं, इसे tcomponent के आधार पर बनाया गया है, कोड बहुत सरल है, यह केवल टाइमर द्वारा बनाए जा रहे रंग, रूप, आदि को बदलता है - मैं ट्रेन करता हूं।

उस फॉर्म के गुणों को कैसे प्राप्त करें जिस पर मैंने अपना घटक फेंक दिया?
मैंने यह कोशिश की:
1। कंस्ट्रक्टर में
tform (aowner)। कपैशन: = "asdf";


2 को निजी:
ftm: ^ tcomponent;
निर्माता में:
ftm: = @ aowner;

मुझे वास्तव में पता नहीं है कि इस सूचक के साथ क्या करना है

3.in निजी:
फ़ंक्शन GetForm: TForm;
संपत्ति प्रपत्र: TForm GetForm पढ़ा;


कार्यान्वयन में आगे:


फ़ंक्शन TFormPos.GetForm: TForm;
शुरू करना
यदि स्वामी TCustomForm है तो परिणाम
और परिणाम: = नील;
अंत;



किसी भी प्रक्रिया में आगे:
GetForm.Caption: = "asfdd";


हर जगह पहुंच उल्लंघन का मुद्दा है



MBo   (2003-04-18 17:28) [1]

1) ^ और @ आवश्यक नहीं है।
2) मालिक नहीं, बल्कि जनक
3) बहुत सारी किताबें पढ़ते हैं और मदद करते हैं



Игорь Шевченко   (2003-04-18 17:28) [2]

ValidParentForm (AControl: TControl): TCustomForm



MBo   (2003-04-18 17:30) [3]

क्षमा करें, मेरा दूसरा बिंदु गलत है - गैर-दृश्य घटक



Skier   (2003-04-18 17:34) [4]

> माउस
ओवरराइड अपने डिजाइनर के लिए लेखन?



мыш   (2003-04-18 17:43) [5]

मैं ओवरराइड लिखता हूं। पढ़ने में मदद करें, स्रोत पढ़ें, जैसा कि आम तौर पर कुछ भी समझ में नहीं आया :), मैं पूरी तरह से बेवकूफ नहीं हूं, मैंने अभी-अभी समझा कि एक-दो दिन पहले एक क्लास क्या है, जब मैंने अपने आप को एक साथ खींचा और टोबेजेक्ट से टफॉर्म के लिए पूरे पदानुक्रम को पढ़ा। और घटक पहले ही कर चुका है! और केवल एक ही क्षण काम नहीं करता है - यह शर्म की बात है, लेकिन मैं एक ही बार में सब कुछ चाहता हूं :)

यहां, उदाहरण के लिए, यह स्पष्ट नहीं है कि फ़ंक्शन क्यों है
फ़ंक्शन TFormPos.GetForm: TForm;
शुरू करना
यदि स्वामी TCustomForm है तो परिणाम
और परिणाम: = नील;
अंत;
getform.widht लिखने के लिए पूर्वज के रूप में सही संदर्भ नहीं देता है: = ... क्योंकि मैंने इसे rxlib से चुराया था, और यह विधि वहां काम करती है।



мыш   (2003-04-18 17:46) [6]

2Igor Shevchenko: मुझे पैरामीटर में किसे पास करना चाहिए? मुझे नहीं पता कि एक विशिष्ट घटक उदाहरण कैसे कहा जाएगा।



Skier   (2003-04-18 17:48) [7]

> माउस
स्टूडियो में घटक कोड!



мыш   (2003-04-18 18:10) [8]

यूनिट फॉर्मपोस;

इंटरफेस

का उपयोग करता है
विंडोज, संदेश, SysUtils, कक्षाएं, QExtCtrls, प्रपत्र, QForms,
वेरिएंट, नियंत्रण,
डायलॉग्स, एक्स्ट्रेक्टल्स, स्टडट्रेल्स;

प्रकार TFormPosition = (fpLeft, fpRight, fpTop, fpBottom, fpCenter);


टाइप
TFormPos = वर्ग (TComponent)
निजी

टिमकैचरहाउस: टीटीमर;
FInfoPanel: Tpanel;

FormPosition: TFormPosition;
AllowMoveMessage: बूलियन;

FActive: बूलियन;
एफफार्मवर्थ: पूर्णांक;
FMyOwner: स्ट्रिंग;

फ़ंक्शन GetForm: Tcustomform;
फ़ंक्शन सेटगेटफार्मवर्थ: पूर्णांक;
फ़ंक्शन GetMyOwner: स्ट्रिंग;

{निजी घोषणाएँ}
संरक्षित
प्रक्रिया TimCheckMouseTimer (प्रेषक: Tobject);
प्रक्रिया SetFormPos (AFormPos: TformPosition);
प्रक्रिया wmmove (var मेस: twmmove); संदेश wm_move;

संपत्ति प्रपत्र: Tcustomform GetForm पढ़ा;

{संरक्षित घोषणाएँ}
सार्वजनिक
निर्माणकर्ता (Aowner: Tcomponent); ओवरराइड;
{सार्वजनिक घोषणाएँ}
प्रकाशित
प्रॉपर्टी IsActive: बूलियन ने फैक्टिव लिखा FActive default true;
प्रॉपर्टी फॉर्मविद: पूर्णांक सेटगेटफार्मवर्थ पढ़ें;
संपत्ति MyOwner: स्ट्रिंग पढ़ें GetMyOwner;
{प्रकाशित प्रकाशन}
अंत;

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

कार्यान्वयन

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

{} TFormPos

निर्माता TFormPos.create (Aowner: Tcomponent);
शुरू करना
विरासत में मिला बनाएँ (AOwner);

//tform(aowner).Caption:="asdf ";

टिमकैचरहाउस: = टीटीमर.क्रीट (स्व);
TimCheckMouse.Interval: = 100;
TimCheckMouse.OnTimer: = TimCheckMouseTimer;
अंत;

फ़ंक्शन TFormPos.GetForm: Tcustomform;
शुरू करना
यदि स्वामी TForm है तो परिणाम: = TCustomForm (स्वामी)
और परिणाम: = नील;
अंत;


प्रक्रिया TFormPos.wmmove (var मेस: twmmove);
शुरू करना
विरासत में मिला;
अगर AllowMoveMageage नहीं है
शुरू करना
AllowMoveMessage: = true;
बाहर जाएं;
अंत;
सूत्र: = fpcenter;
अगर मेस.एक्सपोस <एक्सएनयूएमएक्स तो फॉर्मपोजिशन: = fpLeft;
अगर mess.XPos + GetForm.width> स्क्रीन .idth-16 तो FormPosition: = fpRight;
अगर मेस.YPos <32 तो फॉर्मपोजिशन: = fpTop;
अगर मेस.YPos + GetForm.height> स्क्रीन। Hight-32 तो FormPosition: = fpBottom;
सेटफ़ॉर्मपोस (फॉर्मपोज़िशन);
//GetForm.caption:="mv"+floattostr(mess.XPos) + "" + फ्लोटोस्टर (mess.yPos);
अंत;

प्रक्रिया TFormPos.SetFormPos (एफ़ॉर्मपोस: TFormPosition);
शुरू करना

मामला aFormPos का
fpLeft:
शुरू करना
GetForm.Left: = 0;
अंत;
fpRight:
शुरू करना
GetForm.Left: = screen.Width-GetForm.width;
अंत;
fpTop:
शुरू करना
GetForm.Top:=0;
अंत;
fpBottom:
शुरू करना
GetForm.top:=screen.Height-GetForm.height;
अंत;
अंत;
अंत;

प्रक्रिया TFormPos.TimCheckMouseTimer (प्रेषक: Tobject);
था
x, y: पूर्णांक;
शुरू करना
यदि यह निष्क्रिय नहीं है तो बाहर निकलें;
x: = mouse.CursorPos.X;
Y: = mouse.CursorPos.Y;

अगर x <32 तो setformpos (fpleft);
अगर x <screen.Width-getform .idth-32 तब setformpos (fpright);
यदि y <32 तो setformpos (fptop);
अगर y> screen.Height-getform.Height-32 तो setformpos (fpbottom);

अंत;


फ़ंक्शन TFormPos.SetGetFormWidth: पूर्णांक;
शुरू करना
परिणाम: = ट्विनकंट्रोल (मालिक)।
अंत;

फ़ंक्शन TFormPos.GetMyOwner: स्ट्रिंग;
शुरू करना
परिणाम: = (tpersistent के रूप में स्वामी) ।GetNamePath
अंत;



समाप्त।





Skier   (2003-04-18 18:16) [9]

यह संदिग्ध है!
प्रक्रिया wmmove (var मेस: twmmove); संदेश wm_move;
क्यों है!



мыш   (2003-04-18 18:17) [10]

प्रपत्र की गति को ठीक करने और तुरंत परिवर्तन करने के लिए



Мыш   (2003-04-19 12:10) [11]

^
|
|



Юрий Зотов   (2003-04-19 12:49) [12]

> प्रक्रिया wmmove (var मेस: twmmove); संदेश wm_move;
> फॉर्म के मूवमेंट को ठीक करने और तुरंत बदलाव करने के लिए

यह है कि आपके घटक को ऐसा संदेश कैसे मिलेगा? और किससे?

जैसा कि आप स्वयं कहते हैं, केवल कुछ दिनों पहले ही आप समझ गए थे कि एक वर्ग क्या है (वैसे, क्या आप इस बारे में सुनिश्चित हैं?) और वीसीएल पदानुक्रम को टीएफ़ॉर्म तक पढ़ें। और यहाँ क्यों यह पदानुक्रम इस तरह से बनाया गया है और अन्यथा नहीं। सार и नियुक्ति इसमें प्रत्येक वर्ग, कैसे ये कक्षाएं विंडोज के साथ बातचीत करती हैं - क्या आप इसे भी समझते हैं?

मुझे डर है न। अन्यथा, आपके घटक में ऐसी विधि नहीं होगी जो कभी किसी के द्वारा नहीं बुलाई जाएगी। और यदि हां, तो क्या यह बहुत जल्दी नहीं है? क्या आपने घटक लिखना शुरू कर दिया है?

तथ्य यह है कि, कम से कम उस एबीसी (!!!) को नहीं समझना, जो मैंने ऊपर कहा था, घटकों को लिखने के बारे में सोचने के लिए भी कुछ नहीं है। यह गंभीर नहीं है।

कोनपोकी पुस्तक को खोजने का प्रयास करें। पढ़ कर और समझ में आ रहा है उसे, आप लंबे समय तक अपने पहले "घटक" पर हंसेंगे।



мыш   (2003-04-19 14:10) [13]

Wm_move के लिए, मैं पहले ही समझ गया था कि यह एक गलती थी, क्योंकि केवल विंडोज़ को यह संदेश प्राप्त होता है।
एक वर्ग उनके और अन्य डेटा के प्रसंस्करण के लिए गुणों और प्रक्रियाओं का संग्रह है। टोबेज-बेस क्लास, जो स्मृति को आवंटित करने के लिए ज़िम्मेदार है, इसे नए बनाए गए उदाहरण के लिए आवंटित करना, मुक्त करना और अन्य बुनियादी चीजें। प्रत्येक नई कक्षा को मौजूदा एक पर बनाया जाना चाहिए, ताकि यह न लिखा जा सके कि बोरलैंड प्रोग्रामर द्वारा पहले से ही क्या लिखा गया है। प्रत्येक वर्ग विंडोज से अपने संदेश प्राप्त करता है, उदाहरण के लिए, केवल विंडोज़ मूसडाउन प्राप्त करते हैं, आदि, इन संदेशों को संसाधित करते हैं। आप संदेशों और पूर्वजों वर्ग की प्रक्रियाओं के प्रसंस्करण को ओवरराइड कर सकते हैं।
यहाँ, संक्षेप में, मुझे सब पता है। क्या आपको अभी भी लगता है कि मेरे लिए एक घटक लिखना बहुत जल्दी है?
वैसे, मेरा मानना ​​है कि कुछ भी बहुत जल्दी नहीं है, अगर कोई इच्छा है, तो यह किसी भी तरह आगे बढ़ेगा। उदाहरण के लिए, मैं कभी मदद के लिए इन वर्गों पर नहीं चढ़ता अगर मैं इतना महत्वाकांक्षी नहीं होता और एक घटक लिखना शुरू नहीं करता।
मैं एक किताब खरीदने का जोखिम नहीं उठा सकता ...: लेखक पर सलाह के लिए धन्यवाद।



vuk   (2003-04-19 14:27) [14]

माउस को:
यदि आपका घटक केवल मालिक के रूप में एक टीसीट्यूफ़ॉर्म वारिस के साथ काम करता है, तो इसे फॉर्म के अलावा कहीं और "जीवित" से प्रतिबंधित क्यों न करें? यह बस किया जाता है:
1 चरण। कंस्ट्रक्टर में जांच करें। यदि स्वामी अनुपयुक्त है - अपवाद।
2 चरण। वैलिडेटेटोनेटर को ओवरराइड करें। यदि कंटेनर उपयुक्त नहीं है - अपवाद।

तब हर बार किसी प्रकार की जाँच की आवश्यकता नहीं होगी।



Юрий Зотов   (2003-04-19 14:59) [15]

> प्रत्येक वर्ग विंडोज से अपने संदेश प्राप्त करता है

नहीं। से संदेश विंडोज मिलना केवल खिड़कियां। और बस इतना ही। बड़ा कोई नहीं VCL वर्ग से कोई संदेश नहीं विंडोज प्राप्त नहीं होता है। यदि केवल इसलिए कि विंडोज में किसी वीसीएल या इसके किसी भी वर्ग के बारे में कोई सुराग नहीं है। यहां तक ​​कि TWinControl के वंशजों के बारे में भी। वह जानती है केवल विंडोज़ स्वयं, लेकिन वीसीएल ऑब्जेक्ट जो उन्हें एनकैप्सुलेट नहीं करते हैं। इसके अलावा, वह बाकी को नहीं जानती।

एक और बात यह है कि वीसीएल में एक आंतरिक संदेश अनुवाद (डिस्पैच, प्रदर्शन, आदि के तरीके) हैं - लेकिन यह वास्तव में है। BROADCAST के बजाय सीधे संदेश प्राप्त करने से प्रणाली .


> आप अभी भी सोचते हैं कि मेरे लिए एक घटक लिखना बहुत जल्दी है

VCL में इस तरह का एक पदानुक्रम हुक है:

TObject TPersistent TComponent TControl TWinControl TCustomControl TGraphicControl

अपने आप को निम्नलिखित प्रश्नों का उत्तर दें:

- क्या जरूरत है हर इन वर्गों की उसकी क्या है सार और किस लिए विशेष रूप से वह जवाब देता है;

- इसमें क्या दिखाई देता है मुख्य गुण, विधियाँ और घटनाएँ, और वे क्यों दिखाई देते हैं बस इसमें;

- इनमें से कौन सी नई विधियां स्थिर हैं, जो गतिशील हैं, जो आभासी हैं, जो अमूर्त हैं, और जो वर्ग और हैं क्यों ;

- इनमें से कौन से नए गुण (और घटनाएं) संरक्षित खंड में घोषित किए गए हैं, जो सार्वजनिक रूप से, और जो प्रकाशित (और) में हैं क्यों );

- इन वर्गों में से किसकी संगत मेटाक्लास और है क्यों इस मेटाक्लस की जरूरत है;

- से डब्ल्यूएचओ и कैसे संदेश प्राप्त हो सकता है हर इन वर्गों में, कैसे वह उन्हें संसाधित कर सकता है और क्यों उन्हें उनकी जरूरत है।

इसलिए: जैसे ही आप इन सवालों का जवाब दे सकते हैं, उनके सार की पूरी समझ और कोई बात नहीं - तो आप लिखना शुरू करने के लिए तैयार हैं सामान्य घटक (और शिल्प नहीं, जिसे आप या तो रो सकते हैं या हंस सकते हैं, लेकिन उनके साथ और कुछ नहीं किया जा सकता है)।

क्योंकि के लिए सामान्य कम्पोनेंट राइटर ”और ये सभी प्रश्न अभी बाकी हैं एबीसी । आवश्यक न्यूनतम। और बाकी अनुभव के साथ आएंगे।



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

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

ऊपर









मेमोरी: 0.63 एमबी
समय: 0.036 c
1-559
alexvan
2003-04-18 08:49
2003.05.01
प्रकार के साथ मदद करें


14-755
gn
2003-04-14 10:29
2003.05.01
जिज्ञासा


14-781
DeepProg
2003-04-14 23:04
2003.05.01
आने वाले कनेक्शन और लैन। WinXP c WinME / 98 नहीं बोलता है


9-370
PPavel
2002-07-31 08:40
2003.05.01
आंकड़े बनाएँ


3-466
Lika
2003-04-14 13:57
2003.05.01
त्रुटि:





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