Nesne Tutturma Yöntemleri

Metinler, Etiketler, Biteşlem ve Biteşlem etiketi (OBJ_TEXT, OBJ_LABEL, OBJ_BITMAP ve OBJ_BITMAP_LABEL) grafiksel nesneleri, OBJPROP_ANCHOR özelliği ile tanımanan 9 farklı tutturma yöntemin birini içerebilirler.

Nesne

Tanıtıcı

X/Y

Width/Height

Date/Price

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

Text

OBJ_TEXT

Evet

Evet

Evet

Etiket

OBJ_LABEL

Evet

Evet (salt okunur)

Evet

Evet

Evet

Düğme

OBJ_BUTTON

Evet

Evet

Evet

Bitmap

OBJ_BITMAP

Evet (salt okunur)

Evet

Evet

Bitmap Etiketi

OBJ_BITMAP_LABEL

Evet

Evet (salt okunur)

Evet

Evet

Düzenle

OBJ_EDIT

Evet

Evet

Evet

Dikdörtgen Etiket

OBJ_RECTANGLE_LABEL

Evet

Evet

Evet

Tabloda şu tasarımlar kullanılabilir:

  • X/Y – tutturma noktalarının koordinatları çizelge köşesine göre, pikseller cinsinden belirlenir;
  • Width/Height – nesnelerin bir yüksekliği ve genişliği vardır. "Salt okunur" modunda genişlik ve yükseklik değerleri sadece bir defa – nesnenin çizelgeye eklenmesi sırasında – hesaplanır;
  • Date/Price – tutturma noktaları tarih ve fiyat verilerine göre belirlenir;
  • OBJPROP_CORNER – belirtilen tutturma noktası koordinatlarına göre çizelge köşesini tanımlar. ENUM_BASE_CORNER sayımının 4 değerinden biri olabilir;
  • OBJPROP_ANCHOR – tutturma noktasını nesne içinde tanımlar ve ENUM_ANCHOR_POINT sayımının 9 değerinden birini alabilir. Koordinatlar bu noktadan seçili çizelge köşesine kadar piksel cinsinden tanımlanır;
  • OBJPROP_ANGLE – nesne rotasyon açısını sat-yönünün tersine doğru tanımlar.

İstenen seçenek, ObjectSetInteger(çizelge_tanıtıcısı, nesne_ismi, OBJPROP_ANCHOR, tutturma_noktası_modu) fonksiyonu ile belirtilebilir . Burada tutturma_noktası_modu, ENUM_ANCHOR_POINT sayımının değerlerinden biridir.

ENUM_ANCHOR_POINT

Tanıtıcı

Açıklama

ANCHOR_LEFT_UPPER

Sol üst köşedeki tutturma noktası koordinatı

ANCHOR_LEFT

Merkezden sola doğru tutturma noktası

ANCHOR_LEFT_LOWER

Sol alt köşedeki tutturma noktası

ANCHOR_LOWER

Merkezin aşağısındaki tutturma noktası

ANCHOR_RIGHT_LOWER

Alt sağ köşedeki tutturma noktası

ANCHOR_RIGHT

Merkezden sağa doğru tutturma noktası

ANCHOR_RIGHT_UPPER

Sağ üst köşedeki tutturma noktası

ANCHOR_UPPER

Merkezin üstündeki tutturma noktası

ANCHOR_CENTER

Nesnenin tam ortasındaki tutturma noktası

OBJ_BUTTON, OBJ_RECTANGLE_LABEL, OBJ_EDIT ve OBJ_CHART nesnelerinin üst sol köşelerinde sabit tutturma noktaları bulunur (ANCHOR_LEFT_UPPER).

Örnek:

   string text_name="my_OBJ_TEXT_object";
   if(ObjectFind(0,text_name)<0)
     {
      Print("Nesne ",text_name," bulunamadı. Hata kodu = ",GetLastError());
      //--- Çizelgedeki maksimal fiyat değerini al
      double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);
      //--- Label nesnesini oluştur
      ObjectCreate(0,text_name,OBJ_TEXT,0,TimeCurrent(),chart_max_price);
      //--- Metin rengini ayarla
      ObjectSetInteger(0,text_name,OBJPROP_COLOR,clrWhite);
      //--- Arkaplan rengini ayarla
      ObjectSetInteger(0,text_name,OBJPROP_BGCOLOR,clrGreen);
      //--- Label nesnesi için metni ayarla
      ObjectSetString(0,text_name,OBJPROP_TEXT,TimeToString(TimeCurrent()));
      //--- Metin yazı-tipini ayarla
      ObjectSetString(0,text_name,OBJPROP_FONT,"Trebuchet MS");
      //--- Yazı-tipi boyutunu ayarla
      ObjectSetInteger(0,text_name,OBJPROP_FONTSIZE,10);
      //--- Sağ üst köşeye bağla
      ObjectSetInteger(0,text_name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
      //--- Saat yönünün tersine 90 derece çevir
      ObjectSetDouble(0,text_name,OBJPROP_ANGLE,90);
      //--- Nesnenin fare ile seçilmesini yasakla
      ObjectSetInteger(0,text_name,OBJPROP_SELECTABLE,false);
      //--- nesneyi yeniden çiz
      ChartRedraw(0);
     }

Arrow grafiksel nesnesi (OBJ_ARROW) koordinat bağlama için sadece iki seçeneğe sahiptir. Tanımlayıcılar, ENUM_ARROW_ANCHOR sayımı içinde listelenmiştir.

ENUM_ARROW_ANCHOR

Tanıtıcı

Açıklama

ANCHOR_TOP

Üst kısımdaki ok için tutturma noktası

ANCHOR_BOTTOM

Alt kısımdaki ok için tutturma noktası

Örnek:

void OnStart()
  {
//--- Yardımcı diziler
   double Ups[],Downs[];
   datetime Time[];
//--- Dizileri zaman serileri şeklinde ayarla
   ArraySetAsSeries(Ups,true);
   ArraySetAsSeries(Downs,true);
   ArraySetAsSeries(Time,true);
//--- Fractals göstergesinin tanıtıcı değerini oluştur
   int FractalsHandle=iFractals(NULL,0);
   Print("FractalsHandle = ",FractalsHandle);
//--- Son hata değerini sıfır olarak ayarla
   ResetLastError();
//--- Gösterge değerlerini kopyalamayı dene
   int copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
   if(copied<=0)
     {
      Print("Üsteki fraktaller kopyalanamıyor. Hata = ",GetLastError());
      return;
     }
 
   ResetLastError();
//--- Gösterge değerlerini kopyalamayı dene
   copied=CopyBuffer(FractalsHandle,1,0,1000,Downs);
   if(copied<=0)
     {
      Print("Alttaki fraktaller kopyalanamıyor. Hata = ",GetLastError());
      return;
     }
 
   ResetLastError();
//--- Son 1000 çubuğun açılış verisini içeren zaman serisini kopyala
   copied=CopyTime(NULL,0,0,1000,Time);
   if(copied<=0)
     {
      Print("Son 1000 çubuğun açılış zamanını kopyalama işlemi başarısız oldu");
      return;
     }
 
   int upcounter=0,downcounter=0; // okların sayısını al
   bool created;// nesne oluşturma denemesinin sonucunu al
   for(int i=2;i<copied;i++)// iFractals göstergesinin değerlerini gözden geçir
     {
      if(Ups[i]!=EMPTY_VALUE)// Üst fraktal bulundu
        {
         if(upcounter<10)// 10 "Yukarı" (Up) oktan fazlasını oluşturma
           {
            //--- Bir "Up" nesnesi oluşturmayı dene
            created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_UP,0,Time[i],Ups[i]);
            if(created)// Oluşturulduysa - ayarlamayı yapalım
              {
               //--- Çubuğu örtmemesi için tutturma noktası aşağıda olacak
               ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_BOTTOM);
               //--- Son rötuş - boyayalım
               ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrBlue);
               upcounter++;
              }
           }
        }
      if(Downs[i]!=EMPTY_VALUE)// Daha düşük bir fraktal bulundu
        {
         if(downcounter<10)// 10 "Aşağı" (Down) oktan fazlasını oluşturma
           {
            //--- Bir "Down" nesnesi oluşturmayı dene
            created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_DOWN,0,Time[i],Downs[i]);
            if(created)// Oluşturulduysa - ayarlamayı yapalım
              {
               //--- Çubuğu örtmemesi için tutturma noktası yukarıda olacak
               ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_TOP);
               //--- Son rötuş - boyayalım
               ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrRed);
               downcounter++;
              }
           }
        }
     }
  }

Betiğin çalıştırılmasından sonra çizelge bu resimdeki gibi görünecek.

Fraktal değerlerle yer işaretleri