रन टाइम पर नियंत्रणों को स्थानांतरित करना और उनका आकार बदलना

एक माउस के साथ नियंत्रण (डेल्फी फॉर्म पर) को खींचने और आकार बदलने में सक्षम करने का तरीका यहां है, जबकि एप्लिकेशन चल रहा है।

रन-टाइम में फॉर्म एडिटर

एक बार जब आप प्रपत्र पर एक नियंत्रण (दृश्य घटक) रखते हैं, तो आप इसकी स्थिति, आकार और अन्य डिज़ाइन-टाइम गुणों को समायोजित कर सकते हैं। हालांकि, ऐसी स्थितियां हैं, जब आपको अपने एप्लिकेशन के उपयोगकर्ता को फॉर्म-कंट्रोल को फिर से तैयार करने और रन-टाइम में उनके आकार को बदलने की अनुमति देनी होती है।

रनटाइम यूजर मूवमेंट को सक्षम करने और माउस के साथ एक फॉर्म पर नियंत्रण का आकार बदलने के लिए, तीन माउस से संबंधित घटनाएं विशेष हैंडलिंग की जरूरत है: ऑनमूवडाउन, ऑनमाउसमोव और ऑनमाउसअप।

सिद्धांत रूप में, मान लें कि आप किसी उपयोगकर्ता को माउस कंट्रोल के साथ, रन-टाइम पर ले जाने (और आकार बदलने) के लिए सक्षम करना चाहते हैं। सबसे पहले, आप बटन को "हथियाने" के लिए उपयोगकर्ता को सक्षम करने के लिए OnMouseDown घटना को संभालते हैं। अगला, OnMouseMove ईवेंट को बटन को पुन: स्थापन (स्थानांतरित, खींचें) करना चाहिए। अंत में, OnMouseUp को ऑपरेशन को पूरा करना चाहिए।

अभ्यास में प्रपत्र नियंत्रण को खींचना और आकार देना

instagram viewer

सबसे पहले, एक फ़ॉर्म पर कई नियंत्रण छोड़ें। रन-टाइम पर नियंत्रणों को सक्षम या आकार बदलने में सक्षम या अक्षम करने के लिए एक चेकबॉक्स है।

अगला, तीन प्रक्रियाओं को परिभाषित करें (में इंटरफेस प्रपत्र घोषणा का अनुभाग) जो ऊपर वर्णित के अनुसार माउस की घटनाओं को संभालेगा:

प्रकार
TForm1 = कक्षा(TForm)... प्रक्रिया ControlMouseDown (प्रेषक: Tobject; बटन: TMouseButton; शिफ्ट: TShiftState; एक्स, वाई: इंटेगर); प्रक्रिया ControlMouseMove (प्रेषक: Tobject; शिफ्ट: TShiftState; एक्स, वाई: इंटेगर); प्रक्रिया ControlMouseUp (प्रेषक: Tobject; बटन: TMouseButton; शिफ्ट: TShiftState; एक्स, वाई: इंटेगर); निजी
inReposition: बूलियन; oldPos: TPoint; 

नोट: नियंत्रण आंदोलन हो रहा है, तो दो प्रकार के स्तर चर को चिह्नित करना आवश्यक है (inReposition) और पुरानी स्थिति को नियंत्रित करने के लिए (oldPos).

प्रपत्र के ऑनलैड इवेंट में, माउस ईवेंट हैंडलिंग प्रक्रियाओं को संबंधित इवेंट्स के लिए असाइन करें (उन नियंत्रणों के लिए जिन्हें आप ड्रैग करने योग्य / संशोधित करने योग्य बनाना चाहते हैं:

प्रक्रिया TForm1.FormCreate (प्रेषक: Tobject); शुरू
Button1.OnMouseDown: = ControlMouseDown; Button1.OnMouseMove: = ControlMouseMove; Button1.OnMouseUp: = ControlMouseUp; Edit1.OnMouseDown: = ControlMouseDown; Edit1.OnMouseMove: = ControlMouseMove; Edit1.OnMouseUp: = ControlMouseUp; पैनल 1 .nMouseDown: = ControlMouseDown; पैनल 1।nMouseMove: = ControlMouseMove; पैनल 1 .nMouseUp: = ControlMouseUp; Button2.OnMouseDown: = ControlMouseDown; Button2.OnMouseMove: = ControlMouseMove; Button2.OnMouseUp: = ControlMouseUp; समाप्त; (* FormCreate *)

नोट: उपरोक्त कोड Button1, Edit1, Panel1 और Button2 के रन-टाइम रिपोजिशन को सक्षम करता है।

अंत में, यहाँ जादू कोड है:

प्रक्रियाTForm1.ControlMouseDown ( प्रेषक: Tobject; बटन: TMouseButton; शिफ्ट: TShiftState; एक्स, वाई: इंटेगर);शुरूअगर (ChkPositionRunTime। जांच की गई) तथा
(प्रेषक है TWinControl) फिरशुरू
inReposition: यह सच है =; सेटकैप्ट्योर (TWCControl (प्रेषक) ।हैंडल); GetCursorPos (oldPos); समाप्त; समाप्त; (* ControlMouseDown *)

ControlMouseDown संक्षेप में: एक बार जब कोई उपयोगकर्ता नियंत्रण पर माउस बटन दबाता है, यदि रन-टाइम रिपोजिशन सक्षम हो (चेकबॉक्स) chkPositionRunTime जाँच की जाती है) और जो नियंत्रण माउस को प्राप्त हुआ था, वह भी TWinControl से प्राप्त होता है, यह दर्शाता है कि नियंत्रण का स्थान ले रहा है (InReposition: = True) और सुनिश्चित करें कि नियंत्रण के लिए सभी माउस प्रसंस्करण पर कब्जा कर लिया गया है - डिफ़ॉल्ट "घटनाओं" को रोकने से रोकने के लिए संसाधित।

प्रक्रियाTForm1.ControlMouseMove ( प्रेषक: Tobject; शिफ्ट: TShiftState; एक्स, वाई: इंटेगर);स्थिरांक
minWidth = 20; मिनहाइट = 20; वर
newPos: TPoint; frmPoint: TPoint; शुरूअगर inReposition फिरशुरूसाथ में TWinControl (प्रेषक) करशुरू
GetCursorPos (newPos); अगर ssShift में खिसक जाना फिरशुरू//resize
स्क्रीन। कर्सर: = crSizeNWSE; frmPoint: = ScreenToClient (माउस)। CursorPos); अगर frmPoint। एक्स> माइनीडथ फिर
चौड़ाई: = frmPoint। एक्स; अगर frmPoint। य> माइनहाइट फिर
ऊँचाई: = frmPoint। Y; समाप्तअन्य//moveशुरू
स्क्रीन। कर्सर: = crSize; लेफ्ट: = लेफ्ट - ओल्डपोस। एक्स + न्यूपोस। एक्स; शीर्ष: = शीर्ष - ओल्डपोस। Y + newPos Y; oldPos: = newPos; समाप्त; समाप्त; समाप्त; समाप्त; (* ControlMouseMove *)

ControlMouseMove संक्षेप में: ऑपरेशन को प्रतिबिंबित करने के लिए स्क्रीन कर्सर को बदलें: यदि Shift कुंजी दबाया जाता है तो नियंत्रण आकार बदलने की अनुमति देता है, या बस नियंत्रण को एक नई स्थिति में ले जाएं (जहां माउस जा रहा है)। ध्यान दें: minWidth तथा minHeight स्थिरांक आकार की कमी (न्यूनतम नियंत्रण चौड़ाई और ऊंचाई) का एक प्रकार प्रदान करते हैं।

जब माउस बटन छोड़ा जाता है, तो खींचना या आकार बदलना खत्म हो जाता है:

प्रक्रियाTForm1.ControlMouseUp ( प्रेषक: Tobject; बटन: TMouseButton; शिफ्ट: TShiftState; एक्स, वाई: इंटेगर);शुरूअगर inReposition फिरशुरू
स्क्रीन। कर्सर: = crDefault; ReleaseCapture; inReposition: = गलत; समाप्त; समाप्त; (* ControlMouseUp *)

ControlMouseUp संक्षेप में: जब किसी उपयोगकर्ता ने मूविंग (या नियंत्रण का आकार बदलना) समाप्त कर दिया है, तो माउस कैप्चर (डिफ़ॉल्ट क्लिक प्रोसेसिंग को सक्षम करने के लिए) को छोड़ दें और चिह्नित करें कि रिपोजिशन समाप्त हो गया है।

और वह यह करता है! नमूना एप्लिकेशन डाउनलोड करें और अपने लिए प्रयास करें।

नोट: रन-टाइम पर नियंत्रण स्थानांतरित करने का एक और तरीका डेल्फी का उपयोग करना है खींचें और छोड़ें संबंधित गुण और विधियाँ (DragMode, OnDragDrop, DragOver, BeginDrag, आदि)। खींचने और छोड़ने का उपयोग उपयोगकर्ताओं को एक नियंत्रण से वस्तुओं को खींचने के लिए किया जा सकता है - जैसे कि सूची बॉक्स या ट्री दृश्य - दूसरे में।

नियंत्रण स्थिति और आकार को कैसे याद रखें?

यदि आप किसी उपयोगकर्ता को प्रपत्र नियंत्रणों को स्थानांतरित करने और आकार बदलने की अनुमति देते हैं, तो आपको यह सुनिश्चित करना होगा कि नियंत्रण प्लेसमेंट किसी तरह है प्रपत्र बंद होने पर सहेजा गया है और जब प्रपत्र बनाया / लोड किया गया है, तो प्रत्येक नियंत्रण की स्थिति को पुनर्स्थापित किया जाता है। यहाँ एक फ़ॉर्म पर प्रत्येक नियंत्रण के लिए वाम, शीर्ष, चौड़ाई और ऊँचाई गुणों को संग्रहीत करने का तरीका बताया गया है INI फ़ाइल।

कैसे के बारे में 8 आकार संभालती है?

जब आप किसी उपयोगकर्ता को डेल्फी फॉर्म पर नियंत्रण करने और माउस का उपयोग करके रन-टाइम पर, स्थानांतरित करने की अनुमति देते हैं पूरी तरह से डिज़ाइन-टाइम परिवेश की नकल करें, आपको नियंत्रण में आठ आकार के हैंडल जोड़ने चाहिए आकार दिया।

instagram story viewer