Diskussion zum Artikel "Wie erstellt man ein grafisches Panel beliebiger Komplexität?" - Seite 5

 
@Vladimir Karputov
Vladimir warum schließen sich beim Schließen eines Panels beide Panels? wie kann man das vermeiden?
#include <Controls\Dialog.mqh>

CAppDialog AppWindow;
CAppDialog AppWindow2;

int OnInit()
  {
//--- Anwendungsdialog erstellen
   if(!AppWindow.Create(0,"AppWindow",0,20,20,360,324))
      return(INIT_FAILED);
   if(!AppWindow2.Create(0,"AppWindow",0,20+400,20,360+400,324))
      return(INIT_FAILED);
//--- Anwendung ausführen
   AppWindow.Run();
   AppWindow2.Run();
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
//--- Dialog zerstören
   AppWindow.Destroy(reason);
   AppWindow2.Destroy(reason);
  }
//+------------------------------------------------------------------+
//| Expertentabelle Ereignisfunktion|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // Ereignis-ID 
                  const long& lparam,   // Ereignisparameter vom Typ long
                  const double& dparam, // Ereignisparameter vom Typ Double
                  const string& sparam) // Ereignisparameter vom Typ String
  {
   AppWindow.ChartEvent(id,lparam,dparam,sparam);
   AppWindow2.ChartEvent(id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+
Vladimir Karputov
Vladimir Karputov
  • www.mql5.com
Люди. Граждане! Огромная просьба - заполняйте свой профиль на сайте и пользуйтесь стандартными программами - устанавливайте Skype. У Skype есть очень полезная функция - показ рабочего стола. В таком случае можно оперативно подсказать по возникшей проблеме. Помните - время - деньги! Древняя народная мудрость гласит: если хочешь помочь...
 
Ruslan Khasanov:
Legen Sie unterschiedliche Namen für jedes Fenster fest - AppWindow und AppWindow1 usw.

sie haben bereits unterschiedliche Namen

Bildschirm

Das Ändern der Zeichenkette

if(!AppWindow2.Create(0,"AppWindow2",0,20+400,20,360+400,324))

bewirkt gar nichts.
Oder meinen Sie etwas anderes?

 
Ja, in der Tat, ein Irrtum...
 
peterlogin:
*** Wie lässt sich das vermeiden?

Ein Berater - ein Gremium.

 
Wie lässt sich ein Panel über Objekten platzieren, die später als das Panel selbst erstellt wurden?

Zum Beispiel über einer Linie:
Beispiel
 
peterlogin:
Wie kann man ein Panel über Objekten platzieren, die später als das Panel selbst erstellt wurden?

Zum Beispiel über einer Linie:

Erstellen Sie keine grafischen Objekte, nachdem das Panel erstellt wurde.

Oder klappen Sie das Bedienfeld ein/aus.
Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
[in]  Номер подокна графика. 0 означает главное окно графика. Указанное подокно должно существовать, в противном случае функция возвращает false. Возвращает true при успешной постановке команды в очередь указанного графика, иначе false. Если объект был уже создан ранее, то производится попытка изменить его координаты. При вызове ObjectCreate...
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL5 MT5 MetaTrader 5 Anfängern" verschoben.
 

Hallo Leute!

eine Frage von einem Autodidakten!

Wenn wir Panels mit der Bibliothek erstellen, wie können wir das Panel in eine Ecke setzen, die sich von der oberen linken Seite unterscheidet?

Ich habe mit OBJ_PROP_Corner herumprobiert, aber ich denke, es gibt einen besseren Weg, indem man Panel.Align und Panel.Alignment verwendet. Ich habe etwas herumgespielt, aber als Nicht-Programmierer weiß ich nicht, welche Parameter ich übergeben soll und wie ich sie übergeben soll. Zum Beispiel die Panel.Alignment(CRect &rect) was bedeuten diese Rect Dinge?

Für jede Hilfe bin ich sehr dankbar.


cheers

Diego

 
Diego :

Hallo Leute,

eine Frage von einem Selbstlerner!

Wenn wir Panels mit der Bibliothek erstellen, wie setzen wir das Panel in eine Ecke, die sich von der oberen linken Seite unterscheidet?

Ich habe mit OBJ_PROP_Corner herumprobiert, aber ich denke, es gibt einen besseren Weg, indem man Panel.Align und Panel.Alignment verwendet. Ich habe etwas herumgespielt, aber als Nicht-Programmierer weiß ich nicht, welche Parameter ich übergeben soll und wie ich sie übergeben soll. Zum Beispiel die Panel.Alignment(CRect &rect) was bedeuten diese Rect Dinge?

Für jede Hilfe bin ich sehr dankbar.


Prost

Diego

Bei der Erstellung des Panels geben wir die Koordinaten an. Beispiel für die Datei AppWindowEditDefine.mq5

//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion|
//+------------------------------------------------------------------+
int OnInit()
  {
   
***
//--- Anwendungsdialog erstellen
   if(!ExtDialog.Create(0,"AppWindow Edit Define",0,40,40,380,344))
      return(INIT_FAILED);
//--- Anwendung ausführen
 

Ich habe festgestellt, dass die Funktion *.Destroy() oft einfach nicht funktioniert. Sie lässt Objekte im Diagramm zurück, nachdem die Funktion Expert Deinit() aufgerufen wurde, insbesondere wenn sich die Zeitrahmen schnell ändern.

Eine einfache Abhilfe ist die Verwendung von Zeigern, anstatt das CAppDialog-Objekt direkt zu erstellen, zu ändern und zu zerstören.

CAppDialog AppWindow;		//Declare CAppDialog object

AppWindow.Destroy(...);		//Destroy Window object(s)

Die oben genannten Funktionen werden nun zu dieser:

CAppDialog *AppWindow;		//Declare CAppDialog pointer
AppWindow = new CAppDialog();	//Create new CAppDialog object at ptr address

AppWindow.Destroy(...);		//Destroy Window object(s)
delete AppWindow;		//Set the "delete" flag for objects at the ptr address (in case *.Destroy() fails)
AppWindow = NULL;		//Set the ptr address to NULL

Nachdem ich meine benutzerdefinierte Fensterklasse erstellt habe, erstelle und zerstöre ich auch alle Schaltflächen, Felder und andere Objekte auf diese Weise. Funktioniert wie ein Zauber!


*Anmerkung: Das Setzen des Löschflags und des Zeigers auf NULL mag übertrieben sein, aber ich habe seit der Implementierung keine übrig gebliebenen Objekte mehr gehabt.

Documentation on MQL5: Checkup / Point
Documentation on MQL5: Checkup / Point
  • www.mql5.com
Checkup / Point - Reference on algorithmic/automated trading language for MetaTrader 5