Tuval harika! - sayfa 27

 
Aлександр Антошкин :
Farklı bir form, renk ve tasarımda iki başlı bir kartal, beş yüzyıldan fazla bir süredir armamızdaydı - Moskova devletinden III. İvan döneminde ve bir gen mutasyonunun sonucu olarak 1918'e kadar. ....
Peter'la neyi düzeltmek istiyorsun?

bir şey mantık yakalanmaz. Biriyle bir şeyleri düzeltmek istediğimi nerede gördün?

 
Nikolai Semko :

bir şey mantık yakalanmaz. Biriyle bir şeyleri düzeltmek istediğimi nerede gördün?

Bu çok ince bir trolleme. Bir gen mutasyonunun düzeltilemez bir sonucu olduğuma dair bir ipucu.)) Yazarın diğer yazılarını okudum ve kendisinin forumumuzda başlatılan deneysel bir AI olduğunu düşündüm. ))

https://www.mql5.com/ru/forum/221552/page1485#comment_12959767

От теории к практике
От теории к практике
  • 2019.08.23
  • www.mql5.com
Добрый вечер, уважаемые трейдеры! Решил было на какое-то время покинуть форум, и сразу как-то скучно стало:)))) А просто читать, увы - неинтересно...
 
fxsaber :

Keneleri çubuk olarak sunmaktan bahsediyorum - diyelim ki 5 saniye.

 

Merhaba!

Panel oluşturmak için Canvas kullanmak mümkün müdür? (CappDialog)

Açıkçası, Add() kullanarak panele doğrudan bir CCanvas nesnesi ekleyemezsiniz.

Belki bir geçici çözüm vardır, örneğin, başlangıçta bir kaynak oluşturmak ve daha sonra, onu daha basit bir nesne olarak kabul ederek, onu CAppDialog'a bağlayabilirsiniz?

Ancak bu numarayı denemek için hangi işlevlerin kullanılacağını gerçekten anlamıyorum.

Genel olarak, yardım edin!

Bu konuda o kadar çok harika şey var ki, sorunum bu arka plana karşı oldukça basit görünüyor!

 
Evgeny Potapov :

Merhaba!

Panel oluşturmak için Canvas kullanmak mümkün müdür? (CappDialog)

Açıkçası, Add() kullanarak panele doğrudan bir CCanvas nesnesi ekleyemezsiniz.

Belki bir geçici çözüm vardır, örneğin, başlangıçta bir kaynak oluşturmak ve daha sonra, onu daha basit bir nesne olarak kabul ederek, onu CAppDialog'a bağlayabilirsiniz?

Ancak bu numarayı denemek için hangi işlevlerin kullanılacağını gerçekten anlamıyorum.

Genel olarak, yardım edin!

Bu konuda o kadar çok harika şey var ki, sorunum bu arka plana karşı oldukça basit görünüyor!

Korkarım işe yaramayacak.
CAppDialog için OBJ_RECTANGLE nesneleri üzerine çizilir ve CCanvas bir OBJ_BITMAP_LABEL nesnesidir ve onları geçmenin bir yolu yoktur.
Ancak tuvali panel penceresinin üstüne çizebilir ve panel değişikliklerini izleyebilir ve aynı anda tuvali yeniden çizebilirsiniz.

Örneğin şöyle:

 // это эксперт
#define protected public    // увы, это необходимо, чтобы расширить наши возможности 
#include <Controls\Dialog.mqh>
#include <Canvas\Canvas.mqh> 
#undef protected
CAppDialog D;
CCanvas C;
int OnInit ()
  {
   if (!D.Create( 0 , "AppWindow" , 0 , 100 , 100 , 400 , 300 ))
       return ( INIT_FAILED );
   D.Run();
   if (!C.CreateBitmapLabel(D.m_chart_id,D.m_subwin,D.m_name+ "_Canvas" ,D.m_rect.left,D.m_rect.top,D.m_rect.right-D.m_rect.left,D.m_rect.bottom-D.m_rect.top, COLOR_FORMAT_ARGB_NORMALIZE ))
       Print ( "Error creating canvas: " , GetLastError ());
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   D.Destroy(reason);
   C.Destroy();
  }
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,          
                   const long & lparam,   
                   const double & dparam, 
                   const string & sparam) 
  {
   static int X= 0 , Y= 0 ;
   D.ChartEvent(id,lparam,dparam,sparam);
   if (D.m_rect.left!=X || D.m_rect.top!=Y) 
   { DrawCanvas(); X=D.m_rect.left; Y=D.m_rect.top;}
  }
//+------------------------------------------------------------------+
void DrawCanvas()
{
 // изменяем канвас в соответсвии положения и размера панели
 static int w= 0 , h= 0 , tf= 0 ;
 int x=D.m_rect.left;
 int y=D.m_rect.top;
 int width = D.m_rect.right-x;
 int height =D.m_rect.bottom-y;
 ObjectSetInteger (C.m_chart_id,C.m_objname, OBJPROP_XDISTANCE ,x);
 ObjectSetInteger (C.m_chart_id,C.m_objname, OBJPROP_YDISTANCE ,y);
 if (w!=width) ObjectSetInteger (C.m_chart_id,C.m_objname, OBJPROP_XSIZE ,width);
 if (h!=height) ObjectSetInteger (C.m_chart_id,C.m_objname, OBJPROP_YSIZE ,height);
 
 if (w!=width || h!=height || tf!= _Period )
 {
   C.Erase();
// здесь формируем рисунок на панели
   C.FillCircle( 50 , 20 , 30 , ColorToARGB ( clrViolet , 200 ));
   C.FillCircle( 100 , 100 , 50 , ColorToARGB ( clrLightBlue , 100 ));
   C.Rectangle( 200 , 50 , 250 , 150 , ColorToARGB ( clrAqua ));
//----------------------------------
   C.Update(); 
   
   tf= _Period ;
   w=width;
   h=height;
 }
}



ancak panel bir nesneler kümesi olduğundan, bu kümeye bir tane daha eklemek kolaydır.

Bu nedenle, seçenek oldukça işe yarıyor ve tuval, panelin koordinatlarında yalnızca tek bir yerde (bu durumda, DrawCanvas işlevi) çiziliyor ve panele bağlanması ve yeniden çizilmesi konusunda endişelenmenize gerek yok.

 
   if (D.m_rect.left!=X || D.m_rect.top!=Y) DrawCanvas();
   else {X=D.m_rect.left; Y=D.m_rect.top;}
Else сработает только когда left=x и top=y , тогда зачем их присваивать ещё раз
 
Aleksei Beliakov :

Evet, teşekkürler Alex. frenli))
Düzeltildi.

 
Nikolai Semko :

Korkarım işe yaramayacak.
CAppDialog için OBJ_RECTANGLE nesneleri üzerine çizilir ve CCanvas bir OBJ_BITMAP_LABEL nesnesidir ve onları geçmenin bir yolu yoktur.

Teşekkür ederim! Bu oldukça gerçekçi görünüyor!

CAppDialog'u OBJ_BITMAP_LABEL içerecek şekilde genişletmek mümkün müdür?

 
Evgeny Potapov :

Teşekkür ederim! Bu oldukça gerçekçi görünüyor!

CAppDialog'u OBJ_BITMAP_LABEL içerecek şekilde genişletmek mümkün müdür?

Tabii ki, iradeniz ve zamanınız varsa yapabilirsiniz.