캔버스 멋지다! - 페이지 28 1...212223242526272829303132333435...93 새 코멘트 Nikolai Semko 2019.09.12 15:20 #271 Evgeny Potapov : 고맙습니다! 이것은 상당히 사실적으로 보입니다! 질문해주셔서 감사합니다. 답변하면서 제가 몰랐던 아주 중요한 사실 하나를 깨달았습니다. 누군가가 이것에 대해 알고 있다면 놀랐을 것입니다. ObjectSetInteger 를 사용하여 캔버스 또는 해당 위치의 크기를 조정하면 다시 그릴 필요가 없습니다. 생성된 캔버스의 크기를 줄인 후 이 크기를 반환하더라도 캔버스 데이터는 원래 그려진 그대로 유지됩니다. 생성된 캔버스의 크기를 늘리면 데이터가 손실되지만 원래 크기를 반환하면 다시 나타납니다. 캔버스의 크기를 조정하거나 위치를 변경할 때 Update() 또는 ChartRedraw()를 수행할 필요조차 없습니다. 새 눈금 또는 창 변경이 도착하면 업데이트됩니다. 이 표시기가 이를 보여줍니다. 캔버스는 한 번만 형성됩니다. 그러나 동시에 값의 배열이 보존되는 동안 크기와 위치를 변경할 수 있습니다. 화면에서 마우스를 움직이기만 하면 됩니다. #property indicator_chart_window #define protected public // увы, это необходимо, чтобы расширить наши возможности #include <Canvas\Canvas.mqh> #undef protected CCanvas C; int OnInit () { 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 ); } //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { C.Destroy(); } //+------------------------------------------------------------------+ int OnCalculate ( const int rates_total, const int prev_calculated, const int begin, const double & price[]) { return prev_calculated; } void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam) { if (id== CHARTEVENT_MOUSE_MOVE ) DrawCanvas(( int )lparam,( int )dparam); } //+------------------------------------------------------------------+ void DrawCanvas( int x, int y) { static bool 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 (); // можно обойтись и без этого, но тогда перерисовка будет только с каждым тиком или изменением чарта } 파일: TestResizeCanvas.mq5 5 kb Andrey Dik 2019.09.12 18:49 #272 동영상으로 저장할 수 있나요? Nikolai Semko 2019.09.12 18:57 #273 Andrey Dik : 동영상으로 저장할 수 있나요? ~할 수 있다 Andrey Dik 2019.09.12 18:59 #274 Nikolai Semko : ~할 수 있다 시원한! 나는 백만 개의 이미지를 만든 다음 일종의 비디오 편집기에서 비디오로 조합하지 않기를 바랍니다.)) 실례가 안된다면 자세히 설명해주세요 Nikolai Semko 2019.09.12 19:24 #275 Andrey Dik : 시원한! 나는 백만 개의 이미지를 만든 다음 일종의 비디오 편집기에서 비디오로 조합하지 않기를 바랍니다.)) 실례가 안된다면 자세히 설명해주세요 물론 아닙니다. 어렵게 만드세요. Andrey Dik 2019.09.12 20:01 #276 Nikolai Semko : 물론 아닙니다. 어렵게 만드세요. 코드는 필요하지 않습니다. 방법을 알려주세요. Andrey Khatimlianskii 2019.09.12 20:14 #277 Nikolai Semko : 캔버스의 크기를 조정하거나 위치를 변경할 때 Update() 또는 ChartRedraw()를 수행할 필요조차 없습니다 . 새 틱 또는 창 변경이 도착하면 업데이트됩니다. 글쎄, 이러한 이벤트에 따르면 터미널 자체가 ChartRedraw();) Nikolai Semko 2019.09.12 20:17 #278 Andrey Dik : 코드가 필요하지 않습니다. 방법을 알려주세요. 촬영하려는 동영상의 종류에 따라 다양한 옵션이 있습니다. 마우스 포인터, 표시기, 개체, GUI가 있는 창의 실시간 창에서는 어떻게 됩니까? 아니면 뭔가 다른가요? Darirunu 2019.09.12 20:18 #279 그리고 이 칩의 진정한 유용성은 무엇입니까? 거래에 도움이 될 가격 차트의 패턴을 찾는 데 도움이 되셨나요? Nikolai Semko 2019.09.12 20:28 #280 Andrey Khatimlianskii : 글쎄, 이러한 이벤트에 따르면 터미널 자체가 ChartRedraw();) 이것은 이해할 수 있습니다. 그냥 깊게 가지 않았습니다. ChartRedraw() 중에 캔버스 객체를 다시 그리는 경우 다시 그리기가 발생하지 않고 Update() 중에만 발생하기 때문에 이 점에 중점을 두었습니다. 그리고 ObjectSetInteger를 사용 하여 캔버스 개체를 다시 그리는 경우 ChartRedraw()를 강제 실행하거나 Chatr가 변경되거나 새 틱이 도착할 때까지 기다리면 ChartRedraw()가 발생합니다. 1...212223242526272829303132333435...93 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
고맙습니다! 이것은 상당히 사실적으로 보입니다!
질문해주셔서 감사합니다. 답변하면서 제가 몰랐던 아주 중요한 사실 하나를 깨달았습니다.
누군가가 이것에 대해 알고 있다면 놀랐을 것입니다.
ObjectSetInteger 를 사용하여 캔버스 또는 해당 위치의 크기를 조정하면 다시 그릴 필요가 없습니다.
이 표시기가 이를 보여줍니다. 캔버스는 한 번만 형성됩니다. 그러나 동시에 값의 배열이 보존되는 동안 크기와 위치를 변경할 수 있습니다. 화면에서 마우스를 움직이기만 하면 됩니다.
동영상으로 저장할 수 있나요?
~할 수 있다
시원한! 나는 백만 개의 이미지를 만든 다음 일종의 비디오 편집기에서 비디오로 조합하지 않기를 바랍니다.))
실례가 안된다면 자세히 설명해주세요
시원한! 나는 백만 개의 이미지를 만든 다음 일종의 비디오 편집기에서 비디오로 조합하지 않기를 바랍니다.))
실례가 안된다면 자세히 설명해주세요
물론 아닙니다.
어렵게 만드세요.
물론 아닙니다.
어렵게 만드세요.
코드는 필요하지 않습니다. 방법을 알려주세요.
글쎄, 이러한 이벤트에 따르면 터미널 자체가 ChartRedraw();)
코드가 필요하지 않습니다. 방법을 알려주세요.
촬영하려는 동영상의 종류에 따라 다양한 옵션이 있습니다. 마우스 포인터, 표시기, 개체, GUI가 있는 창의 실시간 창에서는 어떻게 됩니까? 아니면 뭔가 다른가요?
글쎄, 이러한 이벤트에 따르면 터미널 자체가 ChartRedraw();)
이것은 이해할 수 있습니다. 그냥 깊게 가지 않았습니다.
ChartRedraw() 중에 캔버스 객체를 다시 그리는 경우 다시 그리기가 발생하지 않고 Update() 중에만 발생하기 때문에 이 점에 중점을 두었습니다. 그리고 ObjectSetInteger를 사용 하여 캔버스 개체를 다시 그리는 경우 ChartRedraw()를 강제 실행하거나 Chatr가 변경되거나 새 틱이 도착할 때까지 기다리면 ChartRedraw()가 발생합니다.