سؤال

لقد كتبت مكونًا مخصصًا لرسم دائرة في Flex. ولكن عندما أحاول كتابة حدث نقرة أو حدث Mousedown لهذا المكون ، فإنه لا يعمل.

لدي مكون الدائرة داخل Vbox.

 <mx:VBox label="Currents Quote" width="100%" backgroundColor="#DDDDDD">

<comp:MyCircle id="circlle" x1="175" y1="150" 
                    radius="140" click='{Alert.show("Hello");}'
                    mouseDown="handleMouseDown(event);"/>
<comp:MyLine x1="175" y1="104"/> 
 </mx:VBox>

  private function handleMouseDown(event:MouseEvent):void {

        var pt:Point = new Point(event.localX, event.localY);
        pt = event.target.localToGlobal(pt);   
        pt = circlle.globalToContent(pt);   
        var whichColor:String = "border area";

        if (pt.x < 150) {
            if (pt.y < 150)
                whichColor = "red";
            else
                whichColor = "blue";
        }
        else {
            if (pt.y < 150)
                whichColor = "green";
            else
                whichColor = "magenta";
        }

        Alert.show("You clicked on the " + whichColor);
      }

مكون الدائرة:

  package components
  {
 import mx.core.UIComponent;

 public class MyCircle extends UIComponent
 {
       public var x1:int; 
          public var y1:int; 
          public var radius:int; 

          override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
         { 
        graphics.lineStyle(1, 0x000000);
        graphics.drawCircle(x1, y1, radius); 

        graphics.lineStyle(1, 0x000000);
        graphics.drawCircle(x1, y1, radius-40); 

        graphics.lineStyle(1, 0x000000);
        graphics.drawCircle(x1, y1, radius-100);
         }
     }
 }

يتم عرض تنبيه "Hello" فقط عند نقطة معينة وتخمين ، عند هذه النقطة ، (175،150) تحسس X ، Y للدائرة. ولكن لا ينبغي عرضه أينما انقر على مكون mycircle ؟؟ كيفية تمكينها بهذه الطريقة؟

كما أن وظيفة mousedown لا تعمل مع mycircle ، ولكن إذا كان لديك الحدث الخاص بـ Vbox ، يتم عرض التنبيهات. لما ذلك؟ هل يمكن لأحد أن يرشدني؟

هل يجب أن أكتب أحداثًا للمكونات المخصصة بطريقة مختلفة؟

هل كانت مفيدة؟

المحلول

لست متأكدًا مما إذا كان هذا قابلاً للتطبيق أم لا ، ولكن هناك خطأ حيث لم يتم التعرف على بعض الأحداث النقر/mousedown بشكل صحيح ما لم يكن لديهم لون خلفية. معرفة ما إذا كان إضافة لون الخلفية إلى دائرتك يساعد.

نصائح أخرى

هناك أيضًا بعض الأخطاء في التعليمات البرمجية الخاصة بك ، على سبيل المثال ، أنت تفتقد علامات البرنامج النصي حول ActionScript ، وقد تحتاج إلى استيراد التنبيه.

 <mx:VBox label="Currents Quote" width="100%" backgroundColor="#DDDDDD">

<comp:MyCircle id="circlle" x1="175" y1="150" 
                    radius="140" click='{Alert.show("Hello");}'
                    mouseDown="handleMouseDown(event);"/>
<comp:MyLine x1="175" y1="104"/> 
 </mx:VBox>

<mx:Script>
<![CDATA[
  private function handleMouseDown(event:MouseEvent):void {

        var pt:Point = new Point(event.localX, event.localY);
        pt = event.target.localToGlobal(pt);   
        pt = circlle.globalToContent(pt);   
        var whichColor:String = "border area";

        if (pt.x < 150) {
            if (pt.y < 150)
                whichColor = "red";
            else
                whichColor = "blue";
        }
        else {
            if (pt.y < 150)
                whichColor = "green";
            else
                whichColor = "magenta";
        }

        Alert.show("You clicked on the " + whichColor);
      }
]]>
</mx:Script>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top