Ich habe auch den Code der Schaltfläche aus den Beispielen übernommen, .... Wie kann man erreichen, dass das Drücken einer Taste nicht fixiert ist, d.h. dass sie nach der Ausführung ihrer Funktion in ihren Ausgangszustand zurückkehrt.
Was die Schaltflächen anbelangt, so ist hier ein Beispiel aus der Hilfe:
//+------------------------------------------------------------------+//| ControlsButton.mq5 |//| Copyright 2015, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2015, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"#property description"Панель индикации и диалогов управления. Демонстрация работы класса CButton"#include <Controls\Dialog.mqh>
#include <Controls\Button.mqh>
//+------------------------------------------------------------------+//| defines |//+------------------------------------------------------------------+//--- indents and gaps#define INDENT_LEFT (11) // indent from left (with allowance for border width)#define INDENT_TOP (11) // indent from top (with allowance for border width)#define INDENT_RIGHT (11) // indent from right (with allowance for border width)#define INDENT_BOTTOM (11) // indent from bottom (with allowance for border width)#define CONTROLS_GAP_X (5) // gap by X coordinate#define CONTROLS_GAP_Y (5) // gap by Y coordinate//--- for buttons#define BUTTON_WIDTH (100) // size by X coordinate#define BUTTON_HEIGHT (20) // size by Y coordinate//--- for the indication area#define EDIT_HEIGHT (20) // size by Y coordinate//--- for group controls#define GROUP_WIDTH (150) // size by X coordinate#define LIST_HEIGHT (179) // size by Y coordinate#define RADIO_HEIGHT (56) // size by Y coordinate#define CHECK_HEIGHT (93) // size by Y coordinate//+------------------------------------------------------------------+//| Class CControlsDialog |//| Usage: main dialog of the Controls application |//+------------------------------------------------------------------+class CControlsDialog : public CAppDialog
{
private:
CButton m_button1; // the button object
CButton m_button2; // the button object
CButton m_button3; // the fixed button objectpublic:
CControlsDialog(void);
~CControlsDialog(void);
//--- createvirtualbool Create(constlong chart,conststring name,constint subwin,constint x1,constint y1,constint x2,constint y2);
//--- chart event handlervirtualbool OnEvent(constint id,constlong &lparam,constdouble &dparam,conststring &sparam);
protected:
//--- create dependent controlsbool CreateButton1(void);
bool CreateButton2(void);
bool CreateButton3(void);
//--- handlers of the dependent controls eventsvoid OnClickButton1(void);
void OnClickButton2(void);
void OnClickButton3(void);
};
//+------------------------------------------------------------------+//| Event Handling |//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CControlsDialog)
ON_EVENT(ON_CLICK,m_button1,OnClickButton1)
ON_EVENT(ON_CLICK,m_button2,OnClickButton2)
ON_EVENT(ON_CLICK,m_button3,OnClickButton3)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+//| Constructor |//+------------------------------------------------------------------+
CControlsDialog::CControlsDialog(void)
{
}
//+------------------------------------------------------------------+//| Destructor |//+------------------------------------------------------------------+
CControlsDialog::~CControlsDialog(void)
{
}
//+------------------------------------------------------------------+//| Create |//+------------------------------------------------------------------+bool CControlsDialog::Create(constlong chart,conststring name,constint subwin,constint x1,constint y1,constint x2,constint y2)
{
if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
return(false);
//--- create dependent controlsif(!CreateButton1())
return(false);
if(!CreateButton2())
return(false);
if(!CreateButton3())
return(false);
//--- succeedreturn(true);
}
//+------------------------------------------------------------------+//| Create the "Button1" button |//+------------------------------------------------------------------+bool CControlsDialog::CreateButton1(void)
{
//--- coordinatesint x1=INDENT_LEFT;
int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y);
int x2=x1+BUTTON_WIDTH;
int y2=y1+BUTTON_HEIGHT;
//--- createif(!m_button1.Create(m_chart_id,m_name+"Button1",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_button1.Text("Button1"))
return(false);
if(!Add(m_button1))
return(false);
//--- succeedreturn(true);
}
//+------------------------------------------------------------------+//| Create the "Button2" button |//+------------------------------------------------------------------+bool CControlsDialog::CreateButton2(void)
{
//--- coordinatesint x1=INDENT_LEFT+(BUTTON_WIDTH+CONTROLS_GAP_X);
int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y);
int x2=x1+BUTTON_WIDTH;
int y2=y1+BUTTON_HEIGHT;
//--- createif(!m_button2.Create(m_chart_id,m_name+"Button2",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_button2.Text("Button2"))
return(false);
if(!Add(m_button2))
return(false);
//--- succeedreturn(true);
}
//+------------------------------------------------------------------+//| Create the "Button3" fixed button |//+------------------------------------------------------------------+bool CControlsDialog::CreateButton3(void)
{
//--- coordinatesint x1=INDENT_LEFT+2*(BUTTON_WIDTH+CONTROLS_GAP_X);
int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y);
int x2=x1+BUTTON_WIDTH;
int y2=y1+BUTTON_HEIGHT;
//--- createif(!m_button3.Create(m_chart_id,m_name+"Button3",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_button3.Text("Locked"))
return(false);
if(!Add(m_button3))
return(false);
m_button3.Locking(true);
//--- succeedreturn(true);
}
//+------------------------------------------------------------------+//| Event handler |//+------------------------------------------------------------------+void CControlsDialog::OnClickButton1(void)
{
Comment(__FUNCTION__);
}
//+------------------------------------------------------------------+//| Event handler |//+------------------------------------------------------------------+void CControlsDialog::OnClickButton2(void)
{
Comment(__FUNCTION__);
}
//+------------------------------------------------------------------+//| Event handler |//+------------------------------------------------------------------+void CControlsDialog::OnClickButton3(void)
{
if(m_button3.Pressed())
Comment(__FUNCTION__+" Состояние элемента управления: On");
elseComment(__FUNCTION__+" Состояние элемента управления: Off");
}
//+------------------------------------------------------------------+//| Global Variables |//+------------------------------------------------------------------+
CControlsDialog ExtDialog;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- create application dialogif(!ExtDialog.Create(0,"Controls",0,40,40,380,344))
return(INIT_FAILED);
//--- run application
ExtDialog.Run();
//--- succeedreturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- очистим комментарииComment("");
//--- destroy dialog
ExtDialog.Destroy(reason);
}
//+------------------------------------------------------------------+//| Expert chart event function |//+------------------------------------------------------------------+voidOnChartEvent(constint id, // event ID constlong& lparam, // event parameter of the long typeconstdouble& dparam, // event parameter of the double typeconststring& sparam) // event parameter of the string type
{
ExtDialog.ChartEvent(id,lparam,dparam,sparam);
}
//+------------------------------------------------------------------+
Bitte beachten Sie: Die Tasten 1 und 2 sind nicht abschließbar, während die Taste 3 abschließbar ist.
2. Die Verbindung zum Server wird unterbrochen und die Darstellung der Indikatoren geht verloren, die Daten, die sie liefern, bleiben jedoch erhalten.
Können Sie vorschlagen, wo man darüber lesen kann und/oder was passiert, wenn die Verbindung unterbrochen wird, warum die Zeichnung verloren geht, aber die Daten erhalten bleiben? Ist es möglich, es noch einmal neu zu zeichnen?
2. Die Verbindung zum Server wird unterbrochen und die gesamte Darstellung des Indikators verschwindet, die Daten, die er liefert, bleiben erhalten.
Können Sie vorschlagen, wo man darüber lesen kann und/oder was passiert, wenn die Verbindung unterbrochen wird, warum die Zeichnung verloren geht, aber die Daten erhalten bleiben. Ist es möglich, es noch einmal neu zu zeichnen?
Vielen Dank im Voraus!
Beginnen Sie mit dem Indikator, d. h. mit dem, was in OnCalculate() passiert, wenn der Parameter "rates_total" "0" ist:
Der erste Parameter rates_total enthält die Anzahl der Balken, die dem Indikator zur Berechnung zur Verfügung stehen, und entspricht der Anzahl der im Diagramm verfügbaren Balken.
Beachten Sie die Verbindung zwischen dem von OnCalculate() zurückgegebenen Wert und dem zweiten Eingabeparameter prev_calculated. Der Parameter prev_calculated im Funktionsaufruf enthält einen Wert, der von OnCalculate() beimvorherigen Aufrufzurückgegeben wurde. Dies ermöglicht sparsame Algorithmen für die Berechnung des benutzerdefinierten Indikators, um wiederholte Berechnungen für die Balken zu vermeiden, die sich seit dem letzten Aufruf dieser Funktion nicht verändert haben.
Dazu reicht es in der Regel aus, den Wert des Parameters rates_total zurückzugeben, der die Anzahl der Takte im aktuellen Funktionsaufruf enthält. Wenn sich seit dem letzten Aufruf von OnCalculate() die Preisdaten geändert haben (eine tiefere Historie wurde gepumpt oder Historienleerstellen wurden gefüllt), dann wird der Wert des Eingabeparameters prev_calculated vom Terminal auf Null gesetzt.
Как выбрать торговый сигнал в платформе MetaTrader и подписаться на него за пару кликов? Очень просто, смотри наше видео и ты узнаешь все о торговых сигналах.
Ich habe auch den Code der Schaltfläche aus den Beispielen übernommen, .... Wie kann man erreichen, dass das Drücken einer Taste nicht fixiert ist, d.h. dass sie nach der Ausführung ihrer Funktion in ihren Ausgangszustand zurückkehrt.
Was die Schaltflächen anbelangt, so ist hier ein Beispiel aus der Hilfe:
Bitte beachten Sie: Die Tasten 1 und 2 sind nicht abschließbar, während die Taste 3 abschließbar ist.
Übertragen:
George:Bitte weisen Sie auf einen solchen Punkt hin:
1. EA + Indikator wird ausgeführt
2. Die Verbindung zum Server wird unterbrochen und die Darstellung der Indikatoren geht verloren, die Daten, die sie liefern, bleiben jedoch erhalten.
Können Sie vorschlagen, wo man darüber lesen kann und/oder was passiert, wenn die Verbindung unterbrochen wird, warum die Zeichnung verloren geht, aber die Daten erhalten bleiben? Ist es möglich, es noch einmal neu zu zeichnen?
Vielen Dank im Voraus!
Übertragen:
George:Bitte weisen Sie auf einen solchen Punkt hin:
1. EA + Indikator wird ausgeführt
2. Die Verbindung zum Server wird unterbrochen und die gesamte Darstellung des Indikators verschwindet, die Daten, die er liefert, bleiben erhalten.
Können Sie vorschlagen, wo man darüber lesen kann und/oder was passiert, wenn die Verbindung unterbrochen wird, warum die Zeichnung verloren geht, aber die Daten erhalten bleiben. Ist es möglich, es noch einmal neu zu zeichnen?
Vielen Dank im Voraus!
Beginnen Sie mit dem Indikator, d. h. mit dem, was in OnCalculate() passiert, wenn der Parameter "rates_total" "0" ist:
Der erste Parameter rates_total enthält die Anzahl der Balken, die dem Indikator zur Berechnung zur Verfügung stehen, und entspricht der Anzahl der im Diagramm verfügbaren Balken.
Beachten Sie die Verbindung zwischen dem von OnCalculate() zurückgegebenen Wert und dem zweiten Eingabeparameter prev_calculated. Der Parameter prev_calculated im Funktionsaufruf enthält einen Wert, der von OnCalculate() beimvorherigen Aufrufzurückgegeben wurde. Dies ermöglicht sparsame Algorithmen für die Berechnung des benutzerdefinierten Indikators, um wiederholte Berechnungen für die Balken zu vermeiden, die sich seit dem letzten Aufruf dieser Funktion nicht verändert haben.
Dazu reicht es in der Regel aus, den Wert des Parameters rates_total zurückzugeben, der die Anzahl der Takte im aktuellen Funktionsaufruf enthält. Wenn sich seit dem letzten Aufruf von OnCalculate() die Preisdaten geändert haben (eine tiefere Historie wurde gepumpt oder Historienleerstellen wurden gefüllt), dann wird der Wert des Eingabeparameters prev_calculated vom Terminal auf Null gesetzt.
Wenn es um Schaltflächen geht, hier ist ein Beispiel aus der Hilfe:
Hinweis: Die Tasten 1 und 2 sind nicht sperrbar, aber die Taste 3 ist sperrbar.
Kein gutes Beispiel:
1 weil Bibliotheken
2 weil es von einem Gremium gemacht wird
3 weil du es nicht verstehst.
Ich habe zwei Schaltflächen skizziert, eine ist fest und die andere muss freigeschaltet werden - "Hinzufügen", die freigeschaltet werden muss
Wie kann man einem Manager beitreten?
mmm, einen Manager haben, die Wirksamkeit seiner Arbeit sehen, "investieren" wollen.
ps - Entschuldigung, ich bin eine Teekanne.
mmm, einen Manager haben, die Wirksamkeit seiner Arbeit sehen, "investieren" wollen.
Es tut mir leid, ich bin ein absoluter Neuling.
Forum für Handel, automatisierte Handelssysteme und Strategietests
Fragen von Anfängern
Karputov Vladimir, 2016.08.25 11:43
Hier ist die Anleitung:Wie man SignaleabonniertDanke, ich werde es mir ansehen.
Wirklich, bei der ersten Annäherung....... muss man schon vor Ort sein, um das zu verstehen.
Aber ich würde gerne....
Irgendwelche Optionen? Stellen Sie einen Antrag auf Beitritt, füllen den Papierkram aus, zahlen $ ein und das war's?
Danke, ich werde es mir ansehen.
Wirklich, bei der ersten Annäherung....... muss man schon vor Ort sein, um das zu verstehen.
Aber ich würde gerne....
Irgendwelche Optionen? Einen Antrag auf Mitgliedschaft stellen, den Papierkram ausfüllen, den Betrag einzahlen und das war's?
Lehrvideo ansehen:SieheLehrvideo über Signale auf YouTube
Sie müssen Geld auf Ihr MQL5-Konto einzahlen, um ein bezahltes Abonnement zu starten. Lesen Sie mehr über denSignaldienst FAQ