Sorunuz için teşekkür ederim, çünkü onu cevaplarken bilmediğim çok önemli bir şeyin farkına vardım. Bunu bilen biri çıkarsa şaşırırım.
Tuvali veya konumunu ObjectSetInteger kullanarak yeniden boyutlandırırsanız, yeniden çizilmesi gerekmez.
Oluşturulan tuvalin boyutunu küçültüp bu boyutu döndürsek bile, tuval verileri orijinal çizildiği gibi korunur.
Oluşturulan tuvalin boyutu artırılırsa, veriler kaybolur, ancak orijinal boyutu döndürdüğümüzde yeniden görünür.
Tuvalin yeniden boyutlandırılması veya konumunun değiştirilmesi sırasında Update() veya ChartRedraw() yapılmasına bile gerek yoktur, yeni bir tik veya pencere değişikliğinin gelmesiyle güncellenecektir.
Bu gösterge bunu göstermektedir. Tuval sadece bir kez oluşturulur. Ancak aynı zamanda, değerler dizisi korunurken boyutu ve konumu değiştirilebilir. Sadece farenizi ekran boyunca hareket ettirin
#property indicator_chart_window#define protectedpublic// увы, это необходимо, чтобы расширить наши возможности #include <Canvas\Canvas.mqh>
#undef protected
CCanvas C;
intOnInit ()
{
if (!C.CreateBitmapLabel( 0 , 0 , "_Canvas" , 100 , 100 , 600 , 400 , COLOR_FORMAT_ARGB_NORMALIZE ))
Print ( "Error creating canvas: " , GetLastError ());
DrawCanvas( 600 , 400 );
ChartSetInteger ( 0 , CHART_EVENT_MOUSE_MOVE , true );
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
C.Destroy();
}
//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constint begin,
constdouble & price[])
{
return prev_calculated;
}
voidOnChartEvent ( constint id,
constlong & lparam,
constdouble & dparam,
conststring & sparam)
{
if (id== CHARTEVENT_MOUSE_MOVE ) DrawCanvas(( int )lparam,( int )dparam);
}
//+------------------------------------------------------------------+void DrawCanvas( int x, int y)
{
staticbool first= true ;
//Comment(string(x)+" " +string(y));ObjectSetInteger (C.m_chart_id,C.m_objname, OBJPROP_XDISTANCE ,x/ 5 );
ObjectSetInteger (C.m_chart_id,C.m_objname, OBJPROP_YDISTANCE ,y/ 5 );
ObjectSetInteger (C.m_chart_id,C.m_objname, OBJPROP_XSIZE ,x);
ObjectSetInteger (C.m_chart_id,C.m_objname, OBJPROP_YSIZE ,y);
if (first) // канвас формируется только один раз
{
C.Erase();
C.FillCircle( 100 , 100 , 70 , ColorToARGB ( clrViolet , 200 ));
C.FillCircle( 300 , 200 , 100 , ColorToARGB ( clrLightBlue , 100 ));
C.Rectangle( 140 , 50 , 250 , 150 , ColorToARGB ( clrAqua ));
C.Update();
first= false ;
}
ChartRedraw (); // можно обойтись и без этого, но тогда перерисовка будет только с каждым тиком или изменением чарта
}
Tuvalin konumunu yeniden boyutlandırırken veya değiştirirken Update() veya ChartRedraw() yapmak bile gerekli değildir , yeni bir onay işareti veya pencere değişikliği gelmesiyle güncellenecektir.
Ne tür bir video çekmek istediğinize bağlı olarak birçok seçenek var. Fare işaretçisi, göstergeler, nesneler, GUI içeren bir pencerede gerçek zamanlı bir pencerede tam olarak ne olur? Yoksa farklı bir şey mi?
Bu anlaşılabilir, sadece daha derine inmedi. Buna odaklandım, çünkü tuval nesnesini ChartRedraw() sırasında yeniden çizmek için yeniden çizim gerçekleşmez, sadece Update() sırasında gerçekleşir. Ve tuval nesnesini yeniden çizmek için ObjectSetInteger kullanılması durumunda, ChartRedraw()'ı zorlamak veya chatr'nin değişmesini veya ChartRedraw()'ın gerçekleştiği yeni bir onay işaretinin gelmesini beklemek yeterlidir.
Teşekkür ederim! Bu oldukça gerçekçi görünüyor!
Sorunuz için teşekkür ederim, çünkü onu cevaplarken bilmediğim çok önemli bir şeyin farkına vardım.
Bunu bilen biri çıkarsa şaşırırım.
Tuvali veya konumunu ObjectSetInteger kullanarak yeniden boyutlandırırsanız, yeniden çizilmesi gerekmez.
Bu gösterge bunu göstermektedir. Tuval sadece bir kez oluşturulur. Ancak aynı zamanda, değerler dizisi korunurken boyutu ve konumu değiştirilebilir. Sadece farenizi ekran boyunca hareket ettirin
video olarak kaydedebilirmisin
olabilmek
serin! Umarım bir milyon resim oluşturup bunları bir tür video düzenleyicide bir videoya birleştirerek değil mi?))
sakıncası yoksa lütfen detaylandırın
serin! Umarım bir milyon resim oluşturup bunları bir tür video düzenleyicide bir videoda bir araya getirerek değil mi?))
sakıncası yoksa lütfen detaylandırın
hayır tabii değil.
Zorlaştır.
hayır tabii değil.
Zorlaştır.
kod gerekmez, nasıl yapılacağına dair ipucu
Eh, bu olaylara göre, terminalin kendisi ChartRedraw();) çağırır.
kod gerekmez, nasıl yapılacağına dair ipucu
Ne tür bir video çekmek istediğinize bağlı olarak birçok seçenek var. Fare işaretçisi, göstergeler, nesneler, GUI içeren bir pencerede gerçek zamanlı bir pencerede tam olarak ne olur? Yoksa farklı bir şey mi?
Eh, bu olaylara göre, terminalin kendisi ChartRedraw();) çağırır.
Bu anlaşılabilir, sadece daha derine inmedi.
Buna odaklandım, çünkü tuval nesnesini ChartRedraw() sırasında yeniden çizmek için yeniden çizim gerçekleşmez, sadece Update() sırasında gerçekleşir. Ve tuval nesnesini yeniden çizmek için ObjectSetInteger kullanılması durumunda, ChartRedraw()'ı zorlamak veya chatr'nin değişmesini veya ChartRedraw()'ın gerçekleştiği yeni bir onay işaretinin gelmesini beklemek yeterlidir.