"CCanvas Sınıfını incelemek. Şeffaf Nesneler Nasıl Çizilir" makalesi için tartışma - sayfa 4

 
Artyom Trishkin:
MQL4 ;)

MQL4'ü hoş karşılamıyorum. Tüm örnekler yalnızca MQL5'tedir.

//+------------------------------------------------------------------+
//|Test.mq5 |
//|Telif Hakkı © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Telif Hakkı © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#include <Canvas\Canvas.mqh>
CCanvas     m_canvas;           // tuval nesnesi
//+------------------------------------------------------------------+
//| Komut dosyası programı başlatma işlevi|
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime arr_time[];
   double   arr_open[];
   double   arr_close[];
   if(CopyTime(Symbol(),Period(),0,2,arr_time)==-1)
      return;
   if(CopyClose(Symbol(),Period(),0,2,arr_close)==-1)
      return;
   if(CopyOpen(Symbol(),Period(),0,2,arr_open)==-1)
      return;
   int x1,y1,x2,y2;
   if(!ChartTimePriceToXY(0,0,arr_time[0],arr_open[0],x1,y1))
      Print("Error ",GetLastError());
   if(!ChartTimePriceToXY(0,0,arr_time[1],arr_close[0],x2,y2))
      Print("Error ",GetLastError());
//x1 = Zaman[1];
//y1 = Aç[1];
//x2 = Zaman[0];
//y2 = Kapat[1];
   Print("arr_time[0]=",arr_time[0],", arr_open[0]=",arr_open[0]);
   m_canvas.CreateBitmapLabel("COLOR_FORMAT_ARGB_NORMALIZE",x1,y1,MathAbs(x2-x1),MathAbs(y2-y1),COLOR_FORMAT_ARGB_NORMALIZE);
   m_canvas.Erase(ColorToARGB(clrBlue,200));
   m_canvas.Update();
   Sleep(10000);
   m_canvas.Destroy();
  }
//+------------------------------------------------------------------+
//| Grafiğin genişliğini döndürür (piksel cinsinden)|
//+------------------------------------------------------------------+
int ChartWidthInPixels(const long chart_ID=0)
  {
//--- özellik değerini almak için değişkeni hazırlayın
   long result=-1;
//--- hata değerini sıfırlayın
   ResetLastError();
//--- özellik değerini al
   if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_PIXELS,0,result))
     {
      //--- Experts günlüğünde hata mesajını görüntüle
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- grafik özelliğinin değerini döndürür
   return((int)result);
  }
//+------------------------------------------------------------------+
//| Grafiğin yüksekliğini (piksel cinsinden) döndürür ||
//+------------------------------------------------------------------+
int ChartHeightInPixelsGet(const long chart_ID=0,const int sub_window=0)
  {
//--- özellik değerini almak için değişkeni hazırlayın
   long result=-1;
//--- hata değerini sıfırlayın
   ResetLastError();
//--- özellik değerini al
   if(!ChartGetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,result))
     {
      //--- Experts günlüğünde hata mesajını görüntüle
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- grafik özelliğinin değerini döndürür
   return((int)result);
  }
//+------------------------------------------------------------------+

Ve senaryonun sonucu:

Sonuç

 

Vladimir, uzman olarak sana bir sorum var.

Tuval şeklinde bir panel var. Ve sonra grafikte trend çizgileri çizilir. Onları tuvalin arkasına nasıl gizleyebilirim?

MetaTrader ticaret platformunun ekran görüntüleri

RTS Splice, H1, 2016.10.16

JSC &#39;&#39;Otkritie Broker&#39;&#39;, MetaTrader 5, Demo

RTS Splice, H1, 2016.10.16, JSC ''Otkritie Broker'', MetaTrader 5, Demo


 
Dennis Kirichenko:

Vladimir, uzman olarak sana bir sorum var.

Tuval şeklinde bir panel var. Ve sonra grafikte trend çizgileri çizilir. Onları tuvalin arkasına nasıl gizleyebilirim?


Örneğin paneli yok edip tekrar çizmek....
 
Evet, teşekkürler. Şimdiye kadar sadece arka plana nesneler koyma fikrini buldum....
[Silindi]  
Vladimir Karputov:
Makale için teşekkürler. Ne yazık ki, içindeki tüm belge bağlantıları bozuk.
 
Alexey Kozitsyn:
Makale için teşekkürler. Ne yazık ki içindeki tüm belge bağlantıları bozuk.

Mesaj için teşekkürler - yardım yeniden oluşturuldu, bu nedenle hatalar var. Bağlantıları düzelteceğiz.

 
Vladimir Karputov:

CCanvas sınıfı aracılığıyla?

Not: CCanvas.CreateBitmap öğesini kullanın:

Bir grafik nesnesine bağlı bir grafik kaynağı oluşturur.

1. Geçerli grafiğin ana penceresinde bir grafik kaynağı oluşturur.

bool CreateBitmap(
const string İsim, // name
const datetimetime, // zaman
const çiftfiyat, // fiyat
constintgenişlik, // genişlik
const int Yükseklik, // yükseklik
ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA// format
);

Böylece bir Tuvalin bir köşesini bağlayabileceksiniz. Ancak genişlik ve yükseklik, hepsi aynı, piksel olarak ayarlanacaktır.


Burada Rusça yazabilir miyim?

Çünkü birine talimat veriyorsunuz ama gerçekte çifte standart uyguluyorsunuz.

 
Alexey Kozitsyn:
Makale için teşekkürler. Ne yazık ki, içindeki belgelere giden tüm bağlantılar bozuk.
Bağlantılar düzeltildi. Mesaj için teşekkürler.
 
Alexey Petrov:
Bağlantılar düzeltildi. Mesaj için teşekkürler.

Hatalar devam ediyor.

Giriş paragrafı:

...

CCanvas sınıfı ile doğrudan çizim yapmaya başlamadan önce, renk işleme ile ilgili bazı tanımları öğrenmeniz gerekir. Örneğin, saydamlık nedir ve alfa kanalı nedir.

...


Öğe "5.1 Bir kod "Illusion.mq5" oluşturun"

...

Boyalı bir daire çizin. Daire, tuvali doldurduğumuz rengin üzerine çizilecektir (canvas_XRGB_NOALPHA.Erase(ColorToARGB(colr,alpha));).

canvas_XRGB_NOALPHA.CreateBitmapLabel - Burada grafik nesnesine bağlı bir grafik kaynağı oluşturduk.

Tüm tuvali alfa saydamlığı ile ARGB formatında renkledoldurun

Çıktı metni - bu tuval için görüntü işleme türü. Alfa kanalı 255'e eşit olan ARGB formatında metin rengi, yani çıktı metninin rengi.

Çizilen her şeyin ekranda görüntülenmesini istiyorsak, ekranı yenilememiz gerekir.

Grafik kaynağını grafik nesnesine bağlanarak oluşturduğumuz için (CreateBitmapLabel yöntemi), Destroy() yöntemini kullanarak kaynağı sileceğiz.

...

 

Selamlar, arkadaşlar, bilgi panelini nasıl yapacağımı söyleyebilir misiniz, böylece anlaşmaların simgeleri üst üste binmez.

Ön planda gibi görünüyor, her şey arkasına çizilmiş, ancak anlaşmalar üst üste bindirilmiş.

void CreateEdit(long             chart_id,         // grafik kimliği
                int              sub_window,       // pencere (alt pencere) numarası
                string           name,             // nesne adı
                color            font_color,       // yazı tipi rengi
                int              x_size,           // genişlik
                int              y_size,           // yükseklik
                int              x_distance,       // X ekseni koordinatı
                int              y_distance,       // Y ekseni koordinatı
                long             z_order,          // öncelik
                color            background_color) // arka plan rengi 
  {
// Nesne başarıyla oluşturulmuşsa, o zaman...
   if(ObjectCreate(chart_id,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
     {
      // ...özelliklerini ayarlayın
      ObjectSetInteger(chart_id,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);  // grafiğin açısını ayarlama
      ObjectSetInteger(chart_id,name,OBJPROP_COLOR,font_color);         // yazı tipi rengi
      ObjectSetInteger(chart_id,name,OBJPROP_BGCOLOR,background_color); // arka plan rengi
      ObjectSetInteger(chart_id,name,OBJPROP_XSIZE,x_size);             // genişlik
      ObjectSetInteger(chart_id,name,OBJPROP_YSIZE,y_size);             // yükseklik
      ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x_distance);     // X koordinatını ayarla
      ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y_distance);     // Y koordinatının ayarlanması
      ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,false);         // FALSE ise nesne seçilemez
      ObjectSetInteger(chart_id,name,OBJPROP_ZORDER,z_order);           // nesne önceliği
      ObjectSetInteger(chart_id,name,OBJPROP_READONLY,true);            // salt okunur
      ObjectSetInteger(chart_id,name,OBJPROP_ALIGN,ALIGN_LEFT);         // sola hizalama
      //--- ön planda (false) veya arka planda (true) görüntüle 
    ObjectSetInteger(chart_id,name,OBJPROP_BACK,false); 
      ObjectSetString(chart_id,name,OBJPROP_TOOLTIP,"\n");              // no tooltip if "\n".
     }
  }