Leinwand ist cool! - Seite 27

 
Aлександр Антошкин:
Der doppelköpfige Adler in verschiedenen Formen, Farben und Ausführungen ist seit über fünf Jahrhunderten auf unserem Wappen zu sehen - von der Zeit des Moskauer Staates unter Iwan III. bis 1918, als Folge einer genetischen Mutation.....
Was wollen Sie bei Peter korrigieren?

Ich verstehe die Logik nicht. Wo haben Sie gesehen, dass ich bei jemandem etwas korrigieren möchte?

 
Nikolai Semko:

Ich verstehe die Logik nicht. Wo haben Sie gesehen, dass ich etwas von jemandem korrigieren wollte?

Das ist so subtiles Trolling. Das deutet darauf hin, dass ich eine unverbesserliche Folge einer genetischen Mutation bin.) Ich habe die anderen Beiträge des Autors gelesen und dachte, dass er selbst eine experimentelle KI in unserem Forum ist. ))

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

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

Können Zecken so dargestellt werden?

 
fxsaber:

Ich meine, dass die Ticks als Balken dargestellt werden sollten - etwa jeweils 5 Sekunden.

 

Hallo!

Ist es möglich, Canvas zum Erstellen von Tafeln zu verwenden? (CAppDialog).

Direkt, mit Add(), kann ein CCanvas-Objekt natürlich nicht zu einem Panel hinzugefügt werden.

Vielleicht gibt es einen Workaround, z.B. zuerst eine Ressource erstellen und dann, indem man sie als einfacheres Objekt behandelt, kann man sie an einen CAppDialog binden?

Aber ich bin mir nicht einmal sicher, welche Funktionen ich verwenden soll, um einen solchen Trick zu versuchen.

Wie auch immer, Hilfe!

Es gibt so viele tolle Sachen in diesem Thread, dass meine Aufgabe vor diesem Hintergrund recht einfach erscheint!

 
Evgeny Potapov:

Hallo!

Ist es möglich, Canvas zum Erstellen von Tafeln zu verwenden? (CAppDialog).

Direkt, mit Add(), kann ein CCanvas-Objekt natürlich nicht zu einem Panel hinzugefügt werden.

Vielleicht gibt es einen Workaround, z.B. zuerst eine Ressource erstellen und dann, indem man sie als einfacheres Objekt behandelt, kann man sie an einen CAppDialog binden?

Aber ich bin mir nicht einmal sicher, welche Funktionen ich verwenden soll, um einen solchen Trick zu versuchen.

Wie auch immer, Hilfe!

Es gibt so viele großartige Dinge zu diesem Thema, dass meine Aufgabe vor diesem Hintergrund recht einfach erscheint!

Ich fürchte, es wird nicht funktionieren.
Weil CAppDialog auf OBJ_RECTANGLE-Objekten gezeichnet wird, und CCanvas ein OBJ_BITMAP_LABEL-Objekt ist und es keine Möglichkeit gibt, sie zu kreuzen.
Es ist jedoch möglich, eine Leinwand über dem Panel-Fenster zu zeichnen und die Änderungen im Panel zu überwachen und gleichzeitig die Leinwand neu zu zeichnen.

Zum Beispiel so:

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



aber da ein Panel eine Gruppe von Objekten ist, fügen Sie einfach ein weiteres zu dieser Gruppe hinzu.

Auf diese Weise funktioniert es, und die Leinwand wird nur an einer Stelle (in diesem Fall die Funktion DrawCanvas) an den Koordinaten des Panels gezeichnet, und ich muss mich nicht darum kümmern, sie an das Panel anzuhängen und neu zu zeichnen.

 
   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:

Ja, danke, Alexey. Verlangsamt ))
Korrigiert.

 
Nikolai Semko:

Ich befürchte, dass dies nicht funktionieren wird.
Da CAppDialog mit OBJ_RECTANGLE-Objekten gezeichnet wird und CCanvas ein OBJ_BITMAP_LABEL-Objekt ist, gibt es keine Möglichkeit, sie zusammenzuführen.

Ich danke Ihnen! Diese Variante sieht sehr realistisch aus!

Ist es möglich, CAppDialog zu erweitern und OBJ_BITMAP_LABEL darin aufzunehmen?

 
Evgeny Potapov:

Ich danke Ihnen! Diese Variante sieht sehr realistisch aus!

Ist es möglich, CAppDialog zu erweitern und OBJ_BITMAP_LABEL darin aufzunehmen?

Natürlich ist das möglich, wenn man Lust und Zeit hat.

Grund der Beschwerde: