Ist das möglich? - Seite 8

 
Vitaly Muzichenko #:

Irgendwo auf dem Forum eine voll funktionsfähige Code auf mql4 und mql5

Ich habe ihn vor etwa einem Jahr geschrieben.

In welchem Thema, oder wie suchen Sie?

 
Andrey Sokolov #:

In welchem Bereich, oder wie suchen Sie?

Das ist die große Frage bei der primitiven Site-Suche, sonst hätte ich sie selbst gefunden.

 
Wahrscheinlich diese hier?
 
Vasiliy Pushkaryov #:
Ich schätze, das ist es?

Dankeschön

 
Andrey Sokolov #:

Dankeschön

Eine überarbeitete Version und die Quelle finden Sie im allerletzten Beitrag dieses Themas
 
Andrey Sokolov #:

Hallo, könnten Sie mir bitte zeigen, wie Sie das gemacht haben?

Ausgabe der Daten aus dem Array an Labels im Clientbereich der Bildlaufleiste mit einem Offset, der dem Offset dieser Bildlaufleiste entspricht. Sie können CScrollV aus der Standardbibliothek als Bildlaufleiste verwenden. Array - eine Liste mit allen Elementen. Beschriftungen - Bereich zur Anzeige von Elementen aus der Liste. Was ist daran so kompliziert...? Falls gewünscht, kann jeder Programmierer, der mit OOP vertraut ist, dies tun.

 
Mihail Matkovskij #:

Ausgabe der Daten aus dem Array an Labels im Clientbereich der Bildlaufleiste mit einem Offset, der dem Offset dieser Bildlaufleiste entspricht. Sie können CScrollV aus der Standardbibliothek als Bildlaufleiste verwenden. Array - eine Liste mit allen Elementen. Beschriftungen - Bereich zur Anzeige von Elementen aus der Liste. Was ist daran so kompliziert...? Falls gewünscht, kann jeder Programmierer, der mit OOP vertraut ist, dies tun.

Haben Sie mit dem Scrolling von SB zu tun? Ich habe es irgendwie nicht hinbekommen, dass es separat auf dem Diagramm funktioniert, ohne das Client-Panel. Wenn ich eine Frage hätte, könnte ich fragen, wie man es benutzt.

Forum zum Thema Handel, automatische Handelssysteme und Strategietester

Wie man ein Grafikpanel beliebiger Komplexität erstellt und wie es funktioniert".

Vasiliy Pushkaryov, 2021.12.21 10:12

Ich versuche, eine vertikale Bildlaufleiste ohne Verknüpfung mit dem Panel zu erstellen, nur auf dem Diagramm, aber es funktioniert nicht.

Bei einem Kontrollkästchen zum Beispiel gibt dieser Code eine Reaktion auf einen Mausklick. Das Kontrollkästchen erscheint und verschwindet wieder.

#include <Controls\CheckBox.mqh>
CCheckBox Chbox;
//+------------------------------------------------------------------+
void OnInit()
{
  Chbox.Create(0, "MyCheckBox", 0, 20, 20, 100, 40);
  ChartRedraw();
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
  Chbox.OnEvent(id, lparam, dparam, sparam);
}
//+------------------------------------------------------------------+


Aber mit vertikalem Bildlauf - keine Reaktion auf Mausklicks.

#include <Controls\Scrolls.mqh>
CScrollV Scroll;

void OnInit()
{
  Scroll.Create(0, "MyScrollV", 0, 20, 20, 40, 200);
  ChartRedraw();
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
  Scroll.OnEvent(id, lparam, dparam, sparam);
}
//+------------------------------------------------------------------+

Wer weiß, wie man dieses kombinierte Element in der Tabelle zum Laufen bringt?


 
Vasiliy Pushkaryov #:

Haben Sie sich mit dem Scrolling von SB beschäftigt? Aus irgendeinem Grund konnte ich nicht erreichen, dass es separat auf dem Diagramm funktioniert, ohne das Client-Panel. Vielleicht können Sie helfen?


Hier gibt es eine Menge Nuancen. Das Kontrollkästchen funktioniert (visuell), weil es OBJ_BITMAP_LABEL ist, und sein Status wird vom Terminal geändert. Sein Klick kann wie der Klick eines beliebigen Bitmap-Labels in OnChartEvent verfolgt werden. Aber die Standardbibliothek hat ihr eigenes Ereignismodell, das auf benutzerdefinierten Ereignissen basiert. Sie werden in der void CAppDialog::ChartEvent durch Aufzählung des CArrayObj CWndContainer::m_controls erzeugt, wenn die Komponente CScrollV zumCAppDialog hinzugefügt wurde.Dann werden Ereignisse wie ON_CLICK, ON_DRAG_START, ON_DRAG_PROCESS und ON_DRAG_ENDerzeugt. In Ihrem Fall wurden Komponenten nicht zu CAppDialog hinzugefügt, daher werden keine Ereignisse erzeugt. Wie man diesen Mechanismus umgehen und die Erzeugung von benutzerdefinierten Ereignissen ohne CAppDialog erzwingen kann, darüber habe ich nicht nachgedacht. Ich muss den Quellcode noch genauer analysieren.

Sie können versuchen, eine Komponente zu erstellen, die auf der Klasse CWndContainer basiert. Und fügen Sie Elemente hinzu. Es gibt dort keine visuellen Elemente (wie in CDialog und CAppDialog), aber alle notwendigen Mechanismen für den korrekten Betrieb von UI-Elementen sind vorhanden.
 
Mihail Matkovskij #:

Da gibt es eine Menge Nuancen. OnCheckBox tick funktioniert (visuell), weil es OBJ_BITMAP_LABEL ist, und sein Zustand wird durch das Terminal geändert. Sein Klick kann wie jeder Bitmap-Label-Klick in OnChartEvent verfolgt werden. Aber die Standardbibliothek hat ihr eigenes Ereignismodell, das auf benutzerdefinierten Ereignissen basiert. Sie werden in der void CAppDialog::ChartEvent durch Aufzählung des CArrayObj CWndContainer::m_controls erzeugt, wenn die Komponente CScrollV zumCAppDialog hinzugefügt wurde.Dann werden Ereignisse wie ON_CLICK, ON_DRAG_START, ON_DRAG_PROCESS und ON_DRAG_ENDerzeugt. In Ihrem Fall wurden Komponenten nicht zu CAppDialog hinzugefügt, daher werden keine Ereignisse erzeugt. Wie man diesen Mechanismus umgehen und die Erzeugung von benutzerdefinierten Ereignissen ohne CAppDialog erzwingen kann, darüber habe ich nicht nachgedacht. Ich muss den Quellcode noch genauer analysieren.

Sie können versuchen, eine Komponente zu erstellen, die auf der Klasse CWndContainer basiert. Und fügen Sie Elemente hinzu. Es gibt dort keine visuellen Elemente (wie in CDialog und CAppDialog), aber alle notwendigen Mechanismen für den korrekten Betrieb von UI-Elementen sind vorhanden.
Vielen Dank für die Beschreibung der Mechanismen von CAppDialog und für den Vorschlag, es in einen Container zu stecken. Wenn ich mehr Zeit habe, werde ich versuchen zu experimentieren.