Klassen für die Erstellung von Tafeln und Dialogen - Seite 3

 
Slawa:

Was sind die Symptome?

Dimitri benötigt die grafische Benutzeroberfläche des Indikators, die sich in einem Unterfenster (indicator_separate_window) befindet, um im Hauptfenster des Charts erstellt zu werden.
 
Dmitry Fedoseev:
Also

Wie auch immer, ich habe auch ein kleines Problem. ) Dieser Modus, d.h."Indikator in einem Unterfenster und sein GUI im Hauptchartfenster", wurde in meiner Bibliothek noch nicht getestet, und jetzt gibt es einen kleinen Fehler, der es unmöglich machte, den Indikator durch Drücken der Schließen-Schaltfläche zu löschen, und außerdem gibt es einen Konflikt bei der Bestimmung der Unterfensternummer nach dem Platzieren/Löschen anderer Indikatoren in Unterfenstern, was in einigen Fällen zu einer falschen Ereignisbehandlung führte.

Ich werde die Bibliothek für diesen Modus verfeinern, aber ein wenig später und dies wird in einer zukünftigen Version verfügbar sein. Dies wird einige Zeit in Anspruch nehmen, da wir alles sorgfältig in verschiedenen Situationen testen müssen.

Als Alternative kann ich das Folgende vorschlagen, was bereits getestet wurde und funktioniert. Sie können den Indikatorbalken auf verschiedene Weise im Teilfenster Indikator platzieren. Es gibt mehrere Modi, in denen Sie das Bedienfeld minimieren können (1) zusammen mit dem Teilfenster "Indikator" oder (2) nur das Bedienfeld, ohne das Teilfenster "Indikator" zu berühren, wie in den folgenden Screenshots gezeigt. Das Teilfenster kann (1) eine feste Höhe haben oder (2) manuell in der Größe verändert werden. Aber auch in diesem Fall gibt es eine Einschränkung. Es kann nur eine MQL-Anwendung mit grafischer Oberfläche im Graphen vorhanden sein. Andernfalls wird es zu Konflikten kommen.

//---

Wenn die vorgeschlagenen Optionen geeignet sind, werde ich Vorlagen erstellen. Wenn nicht, dann kann ich Ihnen leider nicht weiterhelfen.

Die Dateien für die Tests befinden sich im Archiv:

Dateien:
Test.zip  8 kb
 
Slawa:

Nichts ist fehlerhaft. Was sind die Symptome?

Ich habe es gerade ausprobiert. Zunächst der Indikator im Unterfenster. Dann die Tafel auf der Karte. Dann ein ähnliches Panel im Unterfenster. Das einzige, was ich gesehen habe, war SimplePanel2 im ersten Unterfenster. Aber das hat keinen Einfluss auf den Betrieb. Alle Tasten richtig gedrückt.

Das einzige, was SimplePanel2 von SimplePanel unterscheidet, ist die Eigenschaft indicator_chart_window

Ich habe versucht, das SimplePanel für das Diagrammfenster neu zu erstellen, was auch gut funktioniert. Beide funktionieren, sowohl im Unterfenster als auch im Diagramm und wenn das Unterfenster ein normaler Indikator ist. Aber wenn beide SimplePanel (auf dem Preisdiagramm und in einem Unterfenster), dann, wenn ich einen Standard-Indikator in einem Unterfenster laufen, das Panel, das auf dem Preisdiagramm ist glitches - das Fenster minimiert wird, wenn ich versuche, es zu erweitern, entfaltet es für einen Moment und dann wieder minimiert.

Bei mir gibt es Probleme, wenn ich einen Standardindikator zum Unterfenster hinzufüge. Hier ist der Code der enthaltenen Datei:

#include <Controls\Dialog.mqh>
#include <Controls\Edit.mqh>
#include <Controls\ComboBox.mqh>
#include <Controls\Label.mqh>

#define INDENT 11
#define LINE   20

class CPanTest:public CAppDialog{
   protected:
      CComboBox         m_cmb_main;
      CEdit             m_edit1;
      void OnMainEvent(){
      }    
      void OnControlEvent(){
      }        
   public:
      bool Create(){
         if(!CAppDialog::Create(0,"name",0,20,20,200,300)){
            return(false);  
         }
         return(true);    
      }  
      bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
};

EVENT_MAP_BEGIN(CPanTest)
   ON_EVENT(ON_CHANGE,m_cmb_main,OnMainEvent)
   ON_EVENT(ON_END_EDIT,m_edit1,OnControlEvent)
EVENT_MAP_END(CAppDialog)

Indikator:

#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0

#include <CPanTest.mqh>

CPanTest * pan;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   pan=new CPanTest();
   if(!pan.Create()){  
      return(INIT_FAILED);
   }
   if(!pan.Run()){
     return(INIT_FAILED);  
   }  
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason){
   pan.Destroy();
   delete(pan);
}  

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   return(rates_total);
}

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   pan.ChartEvent(id,lparam,dparam,sparam);
}
 
Anatoli Kazharski:

Wie auch immer, ich habe auch ein kleines Problem. ) Dieser Modus, d.h."Indikator in einem Unterfenster und sein GUI im Hauptchartfenster", wurde in meiner Bibliothek noch nicht getestet, und jetzt gibt es einen kleinen Fehler, der es unmöglich machte, den Indikator durch Drücken der Schließen-Schaltfläche zu löschen, und außerdem gibt es einen Konflikt bei der Bestimmung der Unterfensternummer nach dem Platzieren/Löschen anderer Indikatoren in Unterfenstern, was in einigen Fällen zu einer falschen Ereignisbehandlung führte.

Ich werde die Bibliothek für diesen Modus verfeinern, aber ein wenig später und dies wird in einer zukünftigen Version verfügbar sein. Dies wird einige Zeit in Anspruch nehmen, da wir alles sorgfältig in verschiedenen Situationen testen müssen.

Als Alternative kann ich das Folgende vorschlagen, was bereits getestet wurde und funktioniert. Sie können das Indikatorpanel auf verschiedene Weise im Teilfenster "Indikator" platzieren. Es gibt mehrere Modi, in denen Sie das Bedienfeld minimieren können (1) zusammen mit dem Teilfenster "Indikator" oder (2) nur das Bedienfeld, ohne das Teilfenster "Indikator" zu berühren, wie in den folgenden Screenshots gezeigt. Das Teilfenster kann (1) eine feste Höhe haben oder (2) manuell in der Größe verändert werden. Aber auch in diesem Fall gibt es eine Einschränkung. Es kann nur eine MQL-Anwendung mit grafischer Oberfläche im Graphen vorhanden sein. Andernfalls wird es zu Konflikten kommen.

//---

Wenn die vorgeschlagenen Optionen geeignet sind, werde ich Vorlagen erstellen. Wenn nicht, dann kann ich Ihnen leider nicht weiterhelfen.

Die Dateien für die Tests befinden sich im Archiv:

Lass es im Podoc sein. Es sollte frei im Unterfenster hängen, unabhängig vom Unterfenster zusammenfallen und das Unterfenster kann skaliert werden.
 
Dmitry Fedoseev:
Lassen Sie es im Unterfenster sein. Das Teilfenster sollte frei im Teilfenster hängen, unabhängig vom Teilfenster zusammenfallen und das Teilfenster sollte skalierbar sein.

Es gibt eine Vorlagendatei im Archiv. Wenn Sie Fragen haben, werde ich sie beantworten.

Dateien:
Test.zip  4 kb
 
Anatoli Kazharski:

Es gibt eine Vorlagendatei im Archiv. Wenn Sie Fragen haben, werde ich sie beantworten.

Hier liegt eine Verwechslung vor:

 
Dmitry Fedoseev:

Hier liegt eine Verwechslung vor:

Oh, ich habe bereits die Änderungen für die nächste Version in Angriff genommen. Ich werde sie alle gleich machen. )

Korrigiert für die Version des letzten Artikels. Ein weiterer Versuch.

Dateien:
Test.zip  4 kb
 
Anatoli Kazharski:

Oh, ich habe bereits die Änderungen für die nächste Version in Angriff genommen. Alles wieder auf den gleichen Stand bringen. )

Korrigiert für die Version des letzten Artikels. Ein weiterer Versuch.

Äh... etwas mehr... Jetzt häufen sich die Fehler über fehlende Ressourcen.
 
Dmitry Fedoseev:
Äh... etwas mehr... Jetzt gibt es eine Menge Fehler über fehlende Ressourcen.
Alle in der Bibliothek verwendeten Ressourcen sind dem letzten Artikel der Reihe beigefügt. Wie lauten die Protokollmeldungen?
 
Anatoli Kazharski:
Alle in der Bibliothek verwendeten Ressourcen sind dem letzten Artikel der Reihe beigefügt. Wie lauten die Meldungen im Logbuch?
Meldungen über fehlende Ressourcen.
Grund der Beschwerde: