Bei der Durchführung der Aufgabe des dynamischen Hinzufügens/Entfernens von Registerkarten und des Hinzufügens/Entfernens von Diagrammen zum Array der Registerkarten bin ich auf das Problem gestoßen, dass es nicht möglich ist, den Namen der Registerkarten in der Klasse CTabs zu ermitteln. In diesem Zusammenhang schlage ich dem Entwickler vor, diese Klasse mit einer Methode zu ergänzen, um den Namen der Registerkarte zu erhalten:
//--- Setzt (1) den Text (Tab-Name) auf den angegebenen Index(2) получает текст (имя вкладки) по указанному индексуvoid Text(constuint index,conststring text); // diese Methode iststring Text(constuint index) { return m_tab[index].text; } // das ist nicht genug
Das Hinzufügen dieser Methode ist notwendig, da es selbst bei einer Vererbung von der CTabs-Klasse, um die fehlenden Methoden zu ergänzen, unmöglich ist, die überladeneText-Methode zu implementieren, da das m_tab[] -Objekt im geschützten Bereich der Klasse liegt. Und die Klasse zu bearbeiten, um sie sich selbst anzupassen, verstößt gegen das OOP-Prinzip.
Fügen Sie Bilder zu den EasyAndFastGUI/MQL5/Images/EasyAndFastGUI/Icons/bmp16 Bibliothek. Für "zweibeinige" Arbitrageure wird nicht nur für mich nützlich sein))
Anatoli Kazharski: @Pavel Kolchin, um zu verhindern, dass Pfeile von Geschäften über dem Panel hängen, verwenden Sie die Methode CWndEvents::ResetWindow().
Ich habe zum Beispiel diesen Inhalt der CProgram::OnTradeEvent()-Methode:
//+------------------------------------------------------------------+//| Ereignis der Handelstransaktion|//+------------------------------------------------------------------+void CProgram::OnTradeEvent(void)
{
//--- Senden eines Handelsereignisses an alle Charts
m_events.SendEventToAllCharts(0,ON_TRADE_EVENT,0,0.0,m_program_name);
//--- Festlegen der Transaktionen der letzten Positionif(m_show_deals.CheckButtonState())
if(m_vdeals.ShowDealsLastPosition())
ResetWindow();//--- Überprüfung der Stop-Loss-Distanzif(m_trailing_stop.CheckButtonState())
m_ctrade.CheckStopLossSize(::Symbol());
//--- Nullstellung von Variablen für Handelsoperationen
m_ctrade.ZeroCalcPositionVariables();
//--- Initialisierung des Balance-Arrays und Aktualisierung der Serien im Diagramm
InitBalanceArray();
m_line_chart.SeriesUpdate(0,m_balance_data,"Balance",clrCornflowerBlue);
}
Ich kann nicht herausfinden, wie ich Element_2, z.B. eine Tabelle, an den unteren Rand von Element_1, z.B. die gleiche Tabelle, binden kann, d.h. Element_1 liegt über Element_2. Daraus ergibt sich die Notwendigkeit, dass bei einer Größenänderung des Diagramms die untere Begrenzung von Element_1 verschoben wird und die obere Begrenzung von Element_2 nachgeschoben wird. Die Bibliothek verfügt über die Methoden AutoYResizeMode und AutoYResizeBottomOffset, aber ich kann nicht herausfinden, wie man die Verschiebung der oberen Grenzen implementiert.
Konstantin: Ich kann nicht herausfinden, wie ich Element_2, z.B. eine Tabelle, an den unteren Rand von Element_1, z.B. dieselbe Tabelle, binden kann, d.h. Element_1 liegt über Element_2. Daraus ergibt sich die Notwendigkeit, dass bei einer Größenänderung des Diagramms die untere Begrenzung von Element_1 verschoben wird und die obere Begrenzung von Element_2 nachgeschoben wird. Es gibt in der Bibliothek die Methoden AutoYResizeMode und AutoYResizeBottomOffset, aber ich kann nicht herausfinden, wie man die Verschiebung der oberen Begrenzungen implementiert.
Es gibt auch Methoden zum Binden von Elementen:
//--- Modus (get/set) der Bindung eines Elements an (1) den rechten und (2) den unteren Rand des Fenstersbool AnchorRightWindowSide(void) const { return(m_anchor_right_window_side); }
void AnchorRightWindowSide(constbool flag) { m_anchor_right_window_side=flag; }
bool AnchorBottomWindowSide(void) const { return(m_anchor_bottom_window_side); }
void AnchorBottomWindowSide(constbool flag) { m_anchor_bottom_window_side=flag; }
//---
Versuchen Sie, das Problem in Kombination mit diesen Eigenschaften zu lösen.
Bei der Durchführung der Aufgabe des dynamischen Hinzufügens/Entfernens von Registerkarten und des Hinzufügens/Entfernens von Diagrammen zum Array der Registerkarten bin ich auf das Problem gestoßen, dass es nicht möglich ist, den Namen der Registerkarten in der Klasse CTabs zu ermitteln. In diesem Zusammenhang schlage ich dem Entwickler vor, diese Klasse mit einer Methode zu ergänzen, um den Namen der Registerkarte zu erhalten:
Das Hinzufügen dieser Methode ist notwendig, da es selbst bei einer Vererbung von der CTabs-Klasse, um die fehlenden Methoden zu ergänzen, unmöglich ist, die überladene Text-Methode zu implementieren, da das m_tab[] -Objekt im geschützten Bereich der Klasse liegt. Und die Klasse zu bearbeiten, um sie sich selbst anzupassen, verstößt gegen das OOP-Prinzip....
@Pavel Kolchin, um zu verhindern, dass Pfeile von Geschäften über dem Panel hängen, verwenden Sie die Methode CWndEvents::ResetWindow().
wohin damit?
Versuchen Sie OnTrade().
Das geht nicht, es schlägt fehl.
In der Menüdatei gibt es kein solches Ereignis, aber wenn Sie es in die Hauptdatei einfügen, schlägt es fehl.
Ich kann nicht, es schlägt fehl
In der Menüdatei gibt es kein solches Ereignis, aber wenn Sie es in die Hauptdatei einfügen, schlägt es fehl.
Sie müssen eine Methode CProgram::OnTradeEvent() in der benutzerdefinierten Anwendungsklasse erstellen.
Und in der Hauptdatei sollte sie in der Funktion OnTrade() aufgerufen werden:
//---
Ich habe zum Beispiel diesen Inhalt der CProgram::OnTradeEvent()-Methode:
Ich kann nicht herausfinden, wie ich Element_2, z.B. eine Tabelle, an den unteren Rand von Element_1, z.B. dieselbe Tabelle, binden kann, d.h. Element_1 liegt über Element_2. Daraus ergibt sich die Notwendigkeit, dass bei einer Größenänderung des Diagramms die untere Begrenzung von Element_1 verschoben wird und die obere Begrenzung von Element_2 nachgeschoben wird. Es gibt in der Bibliothek die Methoden AutoYResizeMode und AutoYResizeBottomOffset, aber ich kann nicht herausfinden, wie man die Verschiebung der oberen Begrenzungen implementiert.
Es gibt auch Methoden zum Binden von Elementen:
//---
Versuchen Sie, das Problem in Kombination mit diesen Eigenschaften zu lösen.