캔버스 멋지다! - 페이지 27

 
Aлександр Антошкин :
다른 형태, 색상 및 디자인의 두 머리를 가진 독수리는 유전자 돌연변이의 결과로 Ivan III 시대의 모스크바 주에서 1918년까지 5세기 이상 동안 우리의 문장에 있었습니다. ....
Peter에게 무엇을 수정하고 싶습니까?

뭔가 논리가 잡히지 않습니다. 내가 누군가와 뭔가를 수정하고 싶다는 것을 어디서 보았습니까?

 
Nikolai Semko :

뭔가 논리가 잡히지 않습니다. 내가 누군가와 뭔가를 수정하고 싶다는 것을 어디서 보았습니까?

이것은 미묘한 트롤링입니다. 내가 유전자 돌연변이의 고칠 수 없는 결과라는 힌트.)) 저자의 다른 게시물을 읽었고 그 자신이 우리 포럼에서 출시된 실험적 AI라고 생각했습니다. ))

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

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

티키는 상상할 수 있습니까?

 
fxsaber :

5초 동안 진드기 를 막대로 표시 하는 것에 대해 이야기하고 있습니다.

 

안녕하세요!

Canvas를 사용하여 패널을 만들 수 있습니까? (캡 다이얼로그)

분명히 Add()를 사용하여 패널에 CCanvas 개체를 직접 추가할 수 없습니다.

예를 들어 처음 에 리소스를 생성한 다음 더 간단한 개체로 간주하여 CAppDialog에 바인딩할 수 있는 해결 방법이 있을 수 있습니다.

하지만 이 트릭을 시도하기 위해 어떤 기능을 사용해야 하는지 잘 모르겠습니다.

일반적으로 도와주세요!

이 주제에는 이 배경에 대해 내 문제가 아주 간단해 보이는 너무 많은 훌륭한 것들이 있습니다!

 
Evgeny Potapov :

안녕하세요!

Canvas를 사용하여 패널을 만들 수 있습니까? (캡 다이얼로그)

분명히 Add()를 사용하여 패널에 CCanvas 개체를 직접 추가할 수 없습니다.

예를 들어 처음 에 리소스를 생성한 다음 더 간단한 개체로 간주하여 CAppDialog에 바인딩할 수 있는 해결 방법이 있을 수 있습니다.

하지만 이 트릭을 시도하기 위해 어떤 기능을 사용해야 하는지 잘 모르겠습니다.

일반적으로 도와주세요!

이 주제에는 이 배경에 대해 내 문제가 아주 간단해 보이는 너무 많은 훌륭한 것들이 있습니다!

작동하지 않을 것 같아요.
CAppDialog의 경우 OBJ_RECTANGLE 개체에 그려지고 CCanvas는 OBJ_BITMAP_LABEL 개체이며 교차할 방법이 없습니다.
그러나 패널 창 상단에 캔버스를 그리는 동시에 패널 변경 사항을 추적하고 캔버스를 다시 그릴 수 있습니다.

예를 들면 다음과 같습니다.

 // это эксперт
#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;
 }
}



그러나 패널은 개체 집합이므로 이 집합에 하나 더 추가하기 쉽습니다.

따라서 옵션이 제대로 작동하고 캔버스가 패널 좌표의 한 위치(이 경우 DrawCanvas 함수)에만 그려지므로 패널에 바인딩하고 다시 그리는 것에 대해 걱정할 필요가 없습니다.

 
   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 :

네, 알렉스 감사합니다. 제동))
수정했습니다.

 
Nikolai Semko :

작동하지 않을 것 같아요.
CAppDialog의 경우 OBJ_RECTANGLE 개체에 그려지고 CCanvas는 OBJ_BITMAP_LABEL 개체이며 교차할 방법이 없습니다.

고맙습니다! 이것은 상당히 사실적으로 보입니다!

OBJ_BITMAP_LABEL을 포함하도록 CAppDialog 를 확장할 수 있습니까?

 
Evgeny Potapov :

고맙습니다! 이것은 상당히 사실적으로 보입니다!

OBJ_BITMAP_LABEL을 포함하도록 CAppDialog 를 확장할 수 있습니까?

물론 의지만 있다면 가능합니다.