OBJ_LABEL

Etiket nesnesi.

ObjTextLabel

Not

İşarete göre tutturma noktası (çapa) konumu ENUM_ARROW_ANCHOR sayımından seçilebilir. Tutturma noktası koordinatları piksel bazında ayarlanır.

Ayrıca ENUM_BASE_CORNER sayımını kullanarak, metin etiketinin tutturma (çapa) köşesini de seçebilirsiniz.

Örnek

Aşağıdaki script, "Düzenle" nesnesini oluşturur ve çizelge üzerinde taşır. Grafiksel nesne özelliklerini oluşturmak ve değiştirmek için özel fonksiyonlar geliştirilmiştir. Bu fonksiyonları kendi uygulamalarınızda da "aynı şekilde" kullanabilirsiniz.

 

//--- açıklama
#property description "Script, \"Etiket\" grafikksel nesnesini oluşturur."
//--- betiğin çalıştırılması sırasında giriş parametreleri penceresini göster
#property script_show_inputs
//--- betiğin giriş parametreleri
input string            InpName="Label";         // Etiket ismi
input int               InpX=150;                // X-ekseni uzunluğu
input int               InpY=150;                // Y-ekseni uzunluğu
input string            InpFont="Arial";         // Yazı tipi
input int               InpFontSize=14;          // Yazı tipi büyüklüğü
input color             InpColor=clrRed;         // Renk
input double            InpAngle=0.0;            // Derece olarak eğim açısı
input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_CENTER// Tutturma (çapa) tipi
input bool              InpBack=false;           // Arkaplan nesnesi
input bool              InpSelection=true;       // Taşıma için vurgula
input bool              InpHidden=true;          // Nesne listesinde gizleme
input long              InpZOrder=0;             // Fare tıklaması için öncelik
//+------------------------------------------------------------------+
//| Bir metin etiketi oluştur                                          |
//+------------------------------------------------------------------+
bool LabelCreate(const long              chart_ID=0,               // çizelge kimliği
                 const string            name="Label",             // etiket ismi
                 const int               sub_window=0,             // alt pencere indisi
                 const int               x=0,                      // X koordinatı
                 const int               y=0,                      // Y koordinatı
                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER// tutturma yapılacak çizelge köşesi
                 const string            text="Label",             // metin
                 const string            font="Arial",             // yazı tipi
                 const int               font_size=10,             // yazı tipi boyutu
                 const color             clr=clrRed,               // renk
                 const double            angle=0.0,                // metin eğimi
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER// çapa tipi
                 const bool              back=false,               // arka-planda
                 const bool              selection=false,          // taşımak için vurgula
                 const bool              hidden=true,              // nesne listesinde gizle
                 const long              z_order=0)                // fare tıklaması önceliği
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- metin etiketi oluştur
   if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": metin etiketinin oluşturulması başarısız oldu! Hata kodu = ",GetLastError());
      return(false);
     }
//--- etiket koordinatlarını ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- tanımlanan nokta koordinatlarına göre çapa (tutturma) köşesini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- metni ayarla
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- metin yazı tipini ayarla
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- yazı tipi boyutunu ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- metnin eğim açısını ayarla
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- tutturma noktası tipini ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- rengi ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- ön-planda (false) veya arkaplanda (true) göster
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- etiketi fare ile taşıma modunu etkinleştir (true) veya devre dışı bırak (false)
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- nesne listesinde grafiksel nesnenin adını sakla (true) veya göster (false)
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- çizelge üzerinde fare tıklaması olayının alınması için özellik ayarla
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Metin etiketini taşı                                             |
//+------------------------------------------------------------------+
bool LabelMove(const long   chart_ID=0,   // çizelge kimliği
               const string name="Label"// etiket ismi
               const int    x=0,          // X koordinatı
               const int    y=0)          // Y koordinatı
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- metin etiketini taşı
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
     {
      Print(__FUNCTION__,
            ": etiketin X koordinatı taşınamadı! Hata kodu = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
     {
      Print(__FUNCTION__,
            ": etiketin Y koordinatı taşınamadı! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Etiketin bağlanacağı çizelge köşesini değiştir                   |
//+------------------------------------------------------------------+
bool LabelChangeCorner(const long             chart_ID=0,               // çizelge kimliği
                       const string           name="Label",             // etiket ismi
                       const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER// tutturma yapılacak çizelge köşesi
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- tutturma köşesini değiştir
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner))
     {
      Print(__FUNCTION__,
            ": tutturma köşesi değiştirilemedi! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Nesnenin metnini değiştir                                        |
//+------------------------------------------------------------------+
bool LabelTextChange(const long   chart_ID=0,   // çizelge kimliği
                     const string name="Label"// nesne ismi
                     const string text="Text")  // metint
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- nesne metnini değiştir
   if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
     {
      Print(__FUNCTION__,
            ": metin değiştirilemedi! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Metin etiketini sil                                              |
//+------------------------------------------------------------------+
bool LabelDelete(const long   chart_ID=0,   // çizelge kimliği
                 const string name="Label"// etiket ismi
  {
//--- hata değerini sıfırla
   ResetLastError();
//--- etiketi sil
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": metin etiketini silinemedi! Hata kodu = ",GetLastError());
      return(false);
     }
//--- başarılı çalıştırma
   return(true);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- etiketin koordinatlarını yerel değişkene depola
   int x=InpX;
   int y=InpY;
//--- çizelge penceresi büyüklüğü
   long x_distance;
   long y_distance;
//--- pencere büyüklüğünü ayarla
   if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
     {
      Print("Çizelgenin genişlik değeri alınamadı! Hata kodu = ",GetLastError());
      return;
     }
   if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
     {
      Print("Çizelgenin yükseklik değeri alınamadı! Hata kodu = ",GetLastError());
      return;
     }
//--- giriş parametrelerinin doğruluğunu kontrol et
   if(InpX<0 || InpX>x_distance-1 || InpY<0 || InpY>y_distance-1)
     {
      Print("Hata! Hatalı giriş parametresi değerleri!");
      return;
     }
//--- etiket için başlangıç metnini hazırla
   string text;
   StringConcatenate(text,"Sol üst köşe: ",x,",",y);
//--- çizelge üzerinde bir metin etiketi oluştur
   if(!LabelCreate(0,InpName,0,InpX,InpY,CORNER_LEFT_UPPER,text,InpFont,InpFontSize,
      InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- çizelgeyi yenile ve yarım saniye bekle
   ChartRedraw();
   Sleep(500);
//--- etiketi taşı ve aynı anda metnini de değiştir
//--- eksen üzerindeki tekrarlama sayısı
   int h_steps=(int)(x_distance/2-InpX);
   int v_steps=(int)(y_distance/2-InpY);
//--- etiketi aşağı taşı
   for(int i=0;i<v_steps;i++)
     {
      //--- koordinatı değiştir
      y+=2;
      //--- etiketi taşı ve metnini değiştir
      MoveAndTextChange(x,y,"Sol üst köşe: ");
     }
//--- yarım saniyelik gecikme
   Sleep(500);
//--- etiketi sağa taşı
   for(int i=0;i<h_steps;i++)
     {
      //--- koordinatı değiştir
      x+=2;
      //--- etiketi taşı ve metnini değiştir
      MoveAndTextChange(x,y,"Sol üst köşe: ");
     }
//--- yarım saniyelik gecikme
   Sleep(500);
//--- etiketi yukarı taşı
   for(int i=0;i<v_steps;i++)
     {
      //--- koordinatı değiştir
      y-=2;
      //--- etiketi taşı ve metnini değiştir
      MoveAndTextChange(x,y,"Sol üst köşe: ");
     }
//--- yarım saniyelik gecikme
   Sleep(500);
//--- etiketi sola taşı
   for(int i=0;i<h_steps;i++)
     {
      //--- koordinatı değiştir
      x-=2;
      //--- etiketi taşı ve metnini değiştir
      MoveAndTextChange(x,y,"Sol üst köşe: ");
     }
//--- yarım saniyelik gecikme
   Sleep(500);
//--- şimdi, tutturma köşesini değiştirerek noktayı taşı
//--- sol alt köşeye taşı
   if(!LabelChangeCorner(0,InpName,CORNER_LEFT_LOWER))
      return;
//--- etiket metnini değiştir
   StringConcatenate(text,"Sol alt köşe: ",x,",",y);
   if(!LabelTextChange(0,InpName,text))
      return;
//--- çizelgeyi yeniden çiz ve iki saniye bekle
   ChartRedraw();
   Sleep(2000);
//--- sağ alt köşeye taşı
   if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_LOWER))
      return;
//--- etiket metnini değiştir
   StringConcatenate(text,"Sol alt köşe: ",x,",",y);
   if(!LabelTextChange(0,InpName,text))
      return;
//--- çizelgeyi yeniden çiz ve iki saniye bekle
   ChartRedraw();
   Sleep(2000);
//--- sağ üst köşeye taşı
   if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_UPPER))
      return;
//--- etiket metnini değiştir
   StringConcatenate(text,"Sağ üst köşe: ",x,",",y);
   if(!LabelTextChange(0,InpName,text))
      return;
//--- çizelgeyi yeniden çiz ve iki saniye bekle
   ChartRedraw();
   Sleep(2000);
//--- sol üst köşeye taşı
   if(!LabelChangeCorner(0,InpName,CORNER_LEFT_UPPER))
      return;
//--- etiket metnini değiştir
   StringConcatenate(text,"Sol üst köşe: ",x,",",y);
   if(!LabelTextChange(0,InpName,text))
      return;
//--- çizelgeyi yeniden çiz ve iki saniye bekle
   ChartRedraw();
   Sleep(2000);
//--- etiketi sil
   LabelDelete(0,InpName);
//--- çizelgeyi yenile ve yarım saniye bekle
   ChartRedraw();
   Sleep(500);
//---
  }
//+------------------------------------------------------------------+
//| Fonksiyon, nesneyi taşır ve metnini değiştirir                   |
//+------------------------------------------------------------------+
bool MoveAndTextChange(const int x,const int y,string text)
  {
//--- etiketi taşı
   if(!LabelMove(0,InpName,x,y))
      return(false);
//--- etiket metnini değiştir
   StringConcatenate(text,text,x,",",y);
   if(!LabelTextChange(0,InpName,text))
      return(false);
//--- script işlemi zorla sonlandırılmış mı kontrol et
   if(IsStopped())
      return(false);
//--- çizelgeyi yeniden çiz
   ChartRedraw();
// 0.01 saniyelik gecikme
   Sleep(10);
//--- fonksiyondan çık
   return(true);
  }