MetaTrader 5'te Grafikler: Canvas - nesne yakalamayla (object snap) arabellek içinde çizim

 

Yeni ResourceCreate fonksiyonu, anında dinamik grafik kaynakları oluşturmak için yapı 619 ile Metatrader 5'e eklendi.

Bu fonksiyon sayesinde, artık 32 bit renkte (alfa kanalı dahil) herhangi bir karmaşık görüntü oluşturabilir ve bunları grafik nesnelerine ekleyebilirsiniz.

Geliştiriciler bundan nasıl yararlanabilir:

  • programlar, çok sayıda dosya taşımaya gerek kalmadan hızlı bir şekilde güzel görünümlü arayüzler oluşturabilir

  • ek kaynak dosyaları (sadece BMP ve WAV değil) #resource "dosya adı" yönergesi kullanılarak doğrudan EX5 dosyalarına eklenebilir, çalışma zamanında okunabilir, değiştirilebilir ve nesnelere uygulanabilir

    ResourceLoad() fonksiyonu en yakın derlemede kullanılabilir olacaktır. Yakın zaman önce EX5 dosyasına eklenmiş olan kaynakların okunmasına olanak sağlayacaktır

  • alfa kanallarını kullanarak şeffaflığı kontrol ederek, herhangi bir analitik yapıyı bir grafik üzerine yerleştirebilirsiniz

    örneğin, renk ve doygunluğu kontrol ederek piyasa hareketlerinin olası yönlerini tahmin eden yarı şeffaf bir bulut çizebilirsiniz

  • grafiğe herhangi bir şey çizebilirsiniz

Yakında standart kütüphaneye CCanvas sınıfını ekleyeceğiz. Bu sınıf, görüntüleri arabelleğinize çizerek ve bunları bağlı bir nesneye çıkararak kolayca manipüle etmenize olanak tanır.

İşte bu sınıfın nasıl çalıştığını gösteren basit bir komut dosyası örneği (dosyalar ektedir):

#include "Canvas.mqh"
//+------------------------------------------------------------------+
//| Script programı başlatma fonksiyonu                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   CCanvas can;
//---
   can.Create("MySpace",0,0,512,512,COLOR_FORMAT_ARGB_RAW);
   MathSrand(0);
//---
   for(int i=0;i<10000;i++)
     {
      can.FillRect(MathRand()&255,MathRand()&255,256+(MathRand()&255),256+(MathRand()&255),XRGB(MathRand(),MathRand(),MathRand()));
      can.Circle(MathRand()&511,MathRand()&511,MathRand()&127,XRGB(MathRand(),MathRand(),MathRand()));
      can.Triangle(MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,XRGB(MathRand(),MathRand(),MathRand()));
      //---
      can.Update();
     }
//---
  }




Neden: