ObjectFind

Belirtilen tanımlayıcıyı ve ismi kullanarak bir nesneyi çizelgede arar

int  ObjectFind(
   long    chart_id,     // çizelge tanımlayıcı
   string  name          // nesne ismi
   );

Parametreler

chart_id

[in]  Çizelge tanımlayıcısı. 0, mevcut çizelge anlamına gelir.

name

[in]  Aranan nesnenin ismi.

Dönüş değeri

Başarılı olunması durumunda, nesnenin bulunduğu alt-pencerenin numarasına dönüş yapar (0 ana pencere demektir). Nesne bulunamazsa fonksiyon, bir negatif sayıya dönüş yapar. Hata ile ilgili daha fazla bilgi için GetLastError() fonksiyonunu çağırın.

Not

Fonksiyon, eşzamanlı bir çağrı kullanır; bu, fonksiyonun çağrı öncesinde bu grafik için yerine getirilmiş tüm komutların yürütülmesini beklediği anlamına gelir, bu nedenle bu fonksiyon çok zaman alıcı olabilir. Bu özellik, bir grafikte çok sayıda nesneyle çalışırken dikkate alınmalıdır.

Bir nesne yeniden isimlendirildiğinde, aynı anda iki olay ortaya çıkar. Bu olaylar, bir Uzman Danışman veya gösterge içerisinde OnChartEvent() fonksiyonu ile işlenebilir:

  • eski isimli nesnenin silinmesi olayı;
  • yeni isimli nesnenin oluşturulması olayı.

 

Örnek:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectFind"
#define   WND        0
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- grafik kimliği
   long chart_id=ChartID();
 
//--- OBJ_NAME grafiksel nesnesi WND penceresindeki grafikte bulunursa,
//--- bunu raporla ve çalışmayı sonlandır
   ResetLastError();
   if(ObjectFind(chart_idOBJ_NAME)==WND)
     {
      PrintFormat("A graphic object named \"%s\" exists on chart with ID %I64d"OBJ_NAMEchart_id);
      return;
     }
     
//--- nesne bulunamazsa
   else
     {
      //--- son hata kodu 4202 (“Grafiksel nesne bulunamadı”) değilse
      //--- bir hata raporla ve çık
      if(GetLastError()!=ERR_OBJECT_NOT_FOUND
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- günlükte OBJ_NAME nesnesinin chart_id kimlikli grafikte olmadığını yazdır
      PrintFormat("There is no graphic object named \"%s\" on the chart with ID #%I64d. Let's create it."OBJ_NAMEchart_id);
      
      //--- WND penceresinde OBJ_NAME adlı “dikey çizgi” grafiksel nesnesi oluştur
      ResetLastError();
      if(!ObjectCreate(chart_idOBJ_NAMEOBJ_VLINEWNDTimeCurrent(), 0))
        {
         Print("ObjectCreate() failed. Error "GetLastError());
         return;
        }
      
      //--- değişiklikleri hemen yansıtmak için grafiği yeniden çiz
      ChartRedraw(chart_id);
      
      //--- oluşturulan nesnenin mevcut olup olmadığını kontrol et
      if(ObjectFind(chart_idOBJ_NAME)!=WND)
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
      //--- nesne oluşturulmuşsa, bunu günlükte raporla,
      //--- bir saniye bekle ve oluşturulan grafiksel nesneyi sil
      PrintFormat("Now a graphic object named \"%s\" exists on the chart with ID #%I64d. Let's delete it."OBJ_NAMEchart_id);
      Sleep(1000);
      ObjectDelete(chart_idOBJ_NAME);
      
      //--- değişiklikleri hemen yansıtmak için grafiği yeniden çiz
      ChartRedraw(chart_id);
     }
   /*
   sonuç:
   There is no graphic object named "TestObjectFind" on the chart with ID #133246248352168439Let's create it.
   Now a graphic object named "TestObjectFind" exists on the chart with ID #133246248352168439Let's delete it
   */
  }