2.20  Przykład 3 – Obiekt wektorowy

 

Poniższy kod prezentuje definicję obiektu wektorowego dla AsixEvo. Obiekt jest wyświetlany jako prostokąt z ramką, zawierający czarny mniejszy prostokąt. Pozycja mniejszego prostokąta zależy od stanu obiektu. Stan obiektu można zmieniać, klikając w czarny prostokąt lub używając klawisza 'S'.

 

 

 

 
public class PaintedObjectTest : Askom.AddonManager.EvoObjectBase 
 
   {
 
      bool switched = false;  // Stan obiektu 
 
 
 
      public PaintedObjectTest()
 
      {
 
         // Inicjalizacja... 
 
      }
 
 
 
      public override bool OwnerDraw
 
      {
 
         get
 
         {
 
            return true;  // Obiekt w trybie wektorowym (a nie kontrolkowym)
 
         }
 
      }
 
 
 
      public override string EvoObjectID
 
      {
 
         get 
 
         {
 
            return "ObiektWektorowy";  // Unikalny identyfikator obiektu
 
         }
 
      }
 
 
 
      public override string EvoObjectDescription
 
      {
 
         get 
 
         {
 
            return "Obiekt wektorowy";  // Krótki opis obiektu 
 
         }
 
      }        
 
 
 
      Color mColor1 = Color.Blue;
 
      //// <summary> 
 
      /// Właściwość koloru tła 
 
      /// </summary> 
 
      [Askom.AddonManager.EvoObjectProperty(Description = "Kolor", EditorType = EditorType.Color, PropertyGroup = EvoObjectPropertyGroup.StateGroup)]
 
      public Color Color1
 
      {
 
         set 
 
         {
 
            mColor1 = value;
 
            InvalidateObject();
 
         }
 
 
 
         get 
 
         {
 
            return Color.Blue; // Wartość domyślna 
 
         }
 
      }
 
 
 
      /// <summary>
 
      /// Obsługujemy zdarzenie malowania
 
      /// </summary>  
 
      public override void Paint(Graphics aGraphics, Rectangle aArea)
 
      {
 
         using (Brush b = new SolidBrush(mColor1))
 
         {
 
            aGraphics.FillRectangle(b, aArea);  //Tło w kolorze właściwości
 
         }
 
 
 
         aGraphics.DrawRectangle(Pens.Red, aArea);  // Czerwona ramka
 
 
 
         // Obszar małego czarnego prostokąta zależy od stanu 
 
         Rectangle swRect = Rectangle.Empty;
 
         if (switched)
 
         {
 
            swRect = new Rectangle((int)Math.Round((double)aArea.X + 0.25d * aArea.Width),
 
                                          (int)Math.Round((double)aArea.Y + 0.25d * aArea.Height),
 
                                          (int)Math.Round((double)0.25d * aArea.Width),
 
                                          (int)Math.Round((double)0.25d * aArea.Height));
 
         }
 
         else 
 
         {
 
            swRect = new Rectangle((int)Math.Round((double)aArea.X + 0.5d * aArea.Width),
 
                                          (int)Math.Round((double)aArea.Y + 0.5d * aArea.Height),
 
                                          (int)Math.Round((double)0.25d * aArea.Width),
 
                                          (int)Math.Round((double)0.25d * aArea.Height));
 
         }
 
 
 
         aGraphics.FillRectangle(Brushes.Black, swRect); // Czarny prostokąt 
 
         
 
      }      
 
 
 
      /// <summary>
 
      /// Obsługujemy zdarzenie klikniecia myszą w obiekt
 
      /// </summary> 
 
      public override void PerformMouseClick(System.Windows.Forms.MouseEventArgs e, Rectangle aArea)
 
      {
 
         Rectangle swRect = Rectangle.Empty;  // Aktualny obszar małego czarnego prostokąta
 
         if (switched)
 
         {
 
            swRect = new Rectangle((int)Math.Round((double)aArea.X + 0.25d * aArea.Width),
 
                                          (int)Math.Round((double)aArea.Y + 0.25d * aArea.Height),
 
                                          (int)Math.Round((double)0.25d * aArea.Width),
 
                                          (int)Math.Round((double)0.25d * aArea.Height));
 
         }
 
         else 
 
         {
 
            swRect = new Rectangle((int)Math.Round((double)aArea.X + 0.5d * aArea.Width),
 
                                          (int)Math.Round((double)aArea.Y + 0.5d * aArea.Height),
 
                                          (int)Math.Round((double)0.25d * aArea.Width),
 
                                          (int)Math.Round((double)0.25d * aArea.Height));
 
         }
 
 
 
         if (swRect.Contains(e.Location))
 
         {  // Jeżeli kliknieto w obszar małego czarnego prostokąta to przełączamy stan
 
            switched = !switched;
 
            InvalidateObject();
 
         }
 
      }
 
 
 
      public override void PerformKeyDown(System.Windows.Forms.KeyEventArgs e)
 
      {
 
         if (e.KeyCode == System.Windows.Forms.Keys.S)
 
         {  // Jeżeli wciśnięto klawisz 'S' to przełączamy stan
 
            switched = !switched;
 
            InvalidateObject();
 
         }
 
      }
 
   }