मैं डेल्फी में कस्टम नियंत्रण कर रहा हूं (TCustomControl
से विरासत में मिला) जिसमें कई बहुभुज सूची आइटम (अनियमित आकार) शामिल हैं। मुझे प्रति आइटम माउस इवेंट्स को लागू करने की ज़रूरत है, लेकिन पहले मुझे यह पता लगाने में सक्षम होना चाहिए कि माउस की स्थिति किसी दिए गए पॉलीगॉन (array of TPoint
) के भीतर है या नहीं। मैं हिट टेस्ट संदेश (WM_NCHITTEST
) पकड़ रहा हूं और यह वह जगह है जहां मुझे यह सत्यापन करने की आवश्यकता होगी। मेरे पास कई बहुभुज हैं, मैं प्रत्येक पॉलीगॉन आइटम के माध्यम से एक लूप करूँगा और यह जांचने के लिए यह जांच करूँगा कि माउस की एक्स/वाई स्थिति इस बहुभुज के भीतर है या नहीं।पहचानें कि कोई बिंदु बहुभुज के भीतर है या नहीं?
procedure TMyControl.WMNCHitTest(var Message: TWMNCHitTest);
var
P: TPoint; //X/Y of Mouse
Poly: TPoints; //array of TPoint
X: Integer; //iterator
I: TMyListItem; //my custom list item
begin
P.X:= Message.XPos;
P.Y:= Message.YPos;
for X := 0 to Items.Count - 1 do begin
I:= Items[X]; //acquire my custom list item by index
Poly:= I.Points; //acquire polygon points
//Check if Point (P) is within Polygon (Poly)...?
end;
end;
बस इंगित करने के लिए, मुझे कोड 'पी: = स्क्रीनटॉक्लिएंट (पी) कोड की एक पंक्ति याद आ रही है,' केवल 'पीएक्स' और 'पी। वाई' असाइन करने के बाद। यह उन बिंदुओं को नियंत्रण के सापेक्ष होने के लिए स्क्रीन के सापेक्ष होने से परिवर्तित करता है। –
बेशक यह 'पी: = स्क्रीनटॉक्लिएंट (प्वाइंट (संदेश.एक्सपीओएस, संदेश.वायपीओएस)) जितना आसान हो सकता है; '(कोड में 3 लाइनों को एक में बदलें) –