キャンバスがカッコいい! - ページ 27

 
Aлександр Антошкин:
イワン3世時代のモスクワ国王の時代から1918年まで、5世紀以上にわたって、さまざまな形、色、バージョンの2つの頭を持つ鷲が紋章に採用されてきたのは、遺伝子変異の結果である。
ピーターのどこを直したいのですか?

理屈がわからない。私が誰かの何かを正したいと思っているなんて、どこで見たんだ?

 
Nikolai Semko:

理屈がわからない。私が誰かから何かを訂正したいと思ったことがどこにありましたか?

そんな微妙な荒らし方なんだ。私が遺伝子の突然変異によるどうしようもない結果であることを示唆している)筆者の他の投稿を読んで、筆者自身が当フォーラムの実験用AIなのではと思いました。))

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

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

ダニはこうして表現することができるのか。

 
fxsaber:

つまり、ティックはバーとして 表示される必要があります - 5秒ずつとしましょう。

 

こんにちは。

Canvasでパネルを作成することは可能ですか?(CAppDialog)です。

直接、Add() で、CCanvas オブジェクトをパネルに追加することは、明らかにできません。

例えば、最初にリソースを作成 し、それをより単純なオブジェクトとして扱うことで、CAppDialogにバインドすることができるなど、回避策があるのではないでしょうか?

でも、どんな機能を使ってそんな芸当をすればいいのか、よくわからないんです。

とにかく、助けて!

このスレッドには素晴らしいものがたくさんあるので、この背景を考えると私の仕事はとても簡単なことのように思えます

 
Evgeny Potapov:

こんにちは。

Canvasでパネルを作成することは可能ですか?(CAppDialog)です。

直接、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;
 }
}



が、パネルはオブジェクトの集合体なので、その集合体に別のものを追加するだけです。

つまり、この方法で、kanvasはパネルの座標の一箇所(この場合は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オブジェクトで描画されており、両者を統合する方法がないためです。

ありがとうございました。このバリアントは、かなりリアルに見えますね

CAppDialogを拡張して、OBJ_BITMAP_LABELを 含めることは可能でしょうか?

 
Evgeny Potapov:

ありがとうございました。このバリアントは、かなりリアルに見えますね

CAppDialogを拡張して、OBJ_BITMAP_LABELを 含めることは可能でしょうか?

もちろん、意欲と時間さえあれば可能です。

理由: