Diskussion zum Artikel "Wie schnell ein Bedienfeld zu einem Indikator und Expert Advisor hinzugefügt werden kann" - Seite 3

 
Karputov Vladimir:

Verwenden Sie die Datei PanelDialog2.mqh aus dem Artikel als Beispiel:

Diese Datei erstellt die Elemente für ein Dialogfeld. Die Panel-Eigenschaft ist die CDialog-Klasse.

Vielen Dank!

Ich werde es jetzt mit CDialog versuchen, aber ich verstehe immer noch nicht, wie es funktionieren soll: die Schaltfläche wird sofort nach der Erstellung sichtbar, sollte sie verschwinden und zu CDialog springen?

 
Evgeny Potapov:

Danke!

Ich werde es mit CDialog versuchen, aber ich verstehe immer noch nicht, wie es funktionieren sollte: die Schaltfläche wird sofort nach der Erstellung sichtbar, sollte es verschwinden und zu CDialog springen?

Verwenden Sie Schritt-für-Schritt (F11) Debugging-Modus mit Haltepunkten und alles versteckt wird sichtbar werden.
 
Evgeny Potapov:

Danke!

Ich werde es mit CDialog versuchen, aber ich verstehe immer noch nicht, wie es funktionieren soll: die Schaltfläche wird sofort nach der Erstellung sichtbar, sollte sie verschwinden und zu CDialog springen?

Karputov Vladimir:

Zu dem Beispiel der Datei PanelDialog2.mqh aus dem Artikel:

Diese Datei erstellt Elemente für ein Dialogpanel. Das Zeichen des Panels ist die Klasse CDialog.

Ja, es funktioniert mit dieser Klasse, aber aus irgendeinem Grund wird der Dialog nicht mit der Maus gezogen. Hier:

int OnInit()  {
   MyButton = new CButton;
   if(CheckPointer(MyButton) == POINTER_INVALID) return(INIT_FAILED);
   MyDialog = new CDialog();
   if(CheckPointer(MyDialog) == POINTER_INVALID) return(INIT_FAILED);
   MyDialog.Create(ChartID(),WindowExpertName()+"_dailog",0,50,100,150,250);
   MyDialog.Add(MyButton);
   MyButton.Create(ChartID(),WindowExpertName()+"_button",0,70,120,90,190);
   MyDialog.Show();
   MyDialog.Enable();
   return(INIT_SUCCEEDED);
}
 
Vladimir Karputov:

Können Sie mir sagen, wie ich die Verarbeitung aller Ereignisse oder Schaltflächenklicks für eine bestimmte Zeit (z. B. für die Zeit der Eröffnung oder Schließung von Positionen) deaktivieren kann?
 
Subscribers:
Können Sie mir sagen, wie ich die Verarbeitung aller Ereignisse oder Schaltflächenklicks für eine gewisse Zeit deaktivieren kann (z. B. für die Zeit des Öffnens oder Schließens von Positionen)?
Und noch genauer? Haben Sie eine Frage zu den Codes aus diesem Artikel?
 
Vladimir Karputov:
Und was noch wichtiger ist? Haben Sie eine Frage zu den Codes in diesem Artikel?

Nicht unbedingt zu diesem Artikel... Ich kann sie nur nirgendwo finden. Zum Beispiel... In dem Artikel gibt es ein Abonnement für die Ereignisbehandlung von Schaltflächen

EVENT_MAP_BEGIN(CControlsDialog)
...
ON_EVENT(ON_CLICK,m_button_ok,OnClickButtonOK)
EVENT_MAP_END(CAppDialog)

Frage: Wie kann ich diese Verarbeitung programmatisch deaktivieren ( ON_CLICK-Verarbeitung deaktivieren) und wieder aktivieren?

 
Subscribers:

nicht unbedingt laut diesem Artikel... Ich kann es nur nirgends finden. Zum Beispiel... In dem Artikel gibt es ein Abonnement für die Ereignisbehandlung von Schaltflächen

EVENT_MAP_BEGIN(CControlsDialog)
...
ON_EVENT(ON_CLICK,m_button_ok,OnClickButtonOK)
EVENT_MAP_END(CAppDialog)

Frage: Wie kann ich diese Verarbeitung programmatisch deaktivieren ( ON_CLICK-Verarbeitung deaktivieren) und wieder aktivieren?

Es gibt keine Möglichkeit, es zu verbieten, aber Sie können eine Flaggenprüfung in die Klickverarbeitungsfunktion schreiben - wenn die Flagge wahr ist, dann verarbeiten wir Klicks, und wenn die Flagge falsch ist, dann verlassen wir die Funktion.
 
Vladimir Karputov:
Es gibt keine Möglichkeit, dies zu verbieten, aber Sie können eine Flaggenprüfung in die Funktion der Klickverarbeitung schreiben - wenn die Flagge wahr ist, werden die Klicks verarbeitet, und wenn die Flagge falsch ist, wird die Funktion beendet.
Das habe ich bereits getan... aber es ist trotzdem nicht dasselbe... zum Beispiel, wenn ich viele Aufträge durch Drücken einer Schaltfläche auf dem Panel zu schließen, möchte ich das Panel nicht vollständig reagieren, sonst, wenn Sie (zu diesem Zeitpunkt) auf die Schaltfläche "Kaufen" klicken, wird das Ereignis noch sein, und wird eine Eingabe an den Event-Handler, nachdem die Schließung ausgearbeitet wird.
 
Vladimir Karputov:
Es gibt keine Möglichkeit, dies zu verbieten, aber Sie können eine Flaggenprüfung in die Klickverarbeitungsfunktion schreiben - wenn die Flagge wahr ist - dann verarbeiten wir Klicks, und wenn die Flagge falsch ist - dann verlassen wir die Funktion.
Im Allgemeinen gibt es keine Möglichkeit, das Panel inaktiv zu machen ?
 
Subscribers:
Das habe ich bereits getan. es ist nicht alles das gleiche... Wenn ich zum Beispiel eine Menge von Aufträgen durch Drücken einer Schaltfläche auf dem Panel schließe, möchte ich, dass das Panel nicht vollständig reagiert, denn wenn ich (zu diesem Zeitpunkt) auf die Schaltfläche "Kaufen" klicke, tritt das Ereignis trotzdem ein, und es gibt eine Eingabe in den Event-Handler, nachdem das Schließen ausgelöst wurde.

Tun Sie das Richtige - Verarbeitung der verbotenen Flagge sofort bei der Eingabe der Funktion.

Obwohl... Nur eine Minute....

Hinzugefügt:

Nein. Sie müssen nur die Presse in Abhängigkeit von der verbotenen Flagge zu verarbeiten.