2010-12-03 13 views
5

में डेल्फी माउस व्हील इवेंट मैं एक घटक लिखना चाहता हूं जो माउस व्हील का उपयोग ज़ूम करने के लिए माउस धरती के समान कुछ है।घटक

मैं एक घटक onMouseWheel का उपयोग कर है और मैं गुण होते हैं Maxzoom MinZoom और ज़ूम कि StretchDraw बिटमैप के साथ मैं रूप में घटकों क्षेत्र के स्थान पाने के लिए कोशिश कर रहा हूँ एक बेहतर विकल्प है

मैं क्या समझ मुझे प्रत्येक माता-पिता को तब तक खोजना है जब तक कि मैं tCustomform नहीं ढूंढता और ऑब्जेक्ट्स स्थान ढूंढने के लिए ऑब्जेक्ट्स स्थान प्राप्त करने के लिए सभी घटक के शीर्ष और घटकों को छोड़ देता हूं। क्या कोई बेहतर तरीका है

एक बार मेरे पास स्थान होने पर मैं माउस कर्सर स्थान से एक मानचित्र ज़ूम कर सकता हूं यदि माउस मेरी ऑब्जेक्ट पर है और जहां से ज़ूम करना है।

किसी भी किसी भी कोड देखा एक है कृपया

+0

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

+0

देखें [TGraphicControl से निकले घटक को माउस व्हील समर्थन कैसे जोड़ें?] (Http://stackoverflow.com/a/34463279/757830), और [ध्यान केंद्रित करने के बजाए कर्सर के नीचे माउस व्हील इनपुट को नियंत्रित करने के लिए कैसे निर्देशित करें? ] (http://stackoverflow.com/a/34386680/757830)। – NGLN

उत्तर

2

यह किस तरह की सामग्री आप ज़ूम करने के लिए जा रहे हैं पर निर्भर करता है; मैं केवल यहां पोस्ट करें कि कैसे कब तक व्हील पर

ले जाया गया है प्राइवेट घोषणा

private 
{ Private declarations } 
procedure FormMouseWheel(Sender: TObject; Shift: TShiftState; 
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); 

पर प्राप्त करने के लिए बना सकते हैं या किसी अन्य का मूल्य उस प्रक्रिया

OnMouseWheel := formMouseWheel; // depends on you 

FormMouseWheel इस

की तरह आता है
procedure FormMouseWheel(Sender: TObject; Shift: TShiftState; 
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); 
begin 
// your code here 
// WheelDelta returns you - or + values (in my computer -120 and + 120 ; 
// It depends on control panel mouse wheel settings) 

// If it is a font make the font size bigger or 
// if it is a image 
// strech := true; 
// increase width and height of the Timage 
//and put them inside a scrollbox 
// 
end; 

मैंने इसे वीसीएल फॉर्म (इन नहीं) का उपयोग करके चेक किया आईडीई घटक), आप ज़ूम करने के लिए हमें पोस्ट किस तरह की सामग्री आप ज़ूम करने के लिए

1

चाहते आप एक घटक लिख रहे हैं तो आप अपनी घटक में इन 2 तरीकों अधिभावी की कोशिश करनी चाहिए चाहते हैं:

 
function DoMouseWheelDown(Shift :TShiftState; MousePos :TPoint) :Boolean; override; 
function DoMouseWheelUp(Shift :TShiftState; MousePos :TPoint) :Boolean; override; 

जो टीकंट्रोल की संरक्षित गतिशील विधियां हैं। जब भी माउस व्हील घुमाया जाता है तो उन्हें बुलाया जाता है।