Bibliotheken: Die Bibliothek EasyAndFastGUI zum Erstellen von grafischen Interfaces - Seite 20

 

Heute habe ich begonnen, diese Bibliothek zu verwenden, Build von 2019.03.13 16:43 (ich denke Build 16). Also, ich benutze es, um Tabellen zu erstellen, es funktioniert fast perfekt, ich habe als Referenz die Artikel verwendet:

https://www.mql5.com/de/articles/2500#para6

https://www.mql5.com/de/articles/2897#para7

Für mich ist es wichtig, die Sortierfunktion zu haben, also verwende ich die Bibliothek gemäß den Anweisungen im Artikel "X". Wenn ich diesen Build (Build 6) verwende, funktioniert die Tabelle sehr gut, aber wenn ich den letzten Build (Build 16) verwende, sortiert die Tabelle die Elemente nicht, wenn ich auf die Kopfzellen klicke.

Bei der Untersuchung der Hauptunterschiede habe ich folgendes in der Datei Table.mqh gefunden.


Dies ist im Build 6:

void CTable::SortData(const uint column_index=0)
{
   ...
   //--- Den Index der letzten sortierten Datenspalte speichern
   m_is_sorted_column_index=(int)column_index;
   //--- Sortierung
   QuickSort(first_index,last_index,column_index,m_last_sort_direction);
   //--- Aktualisieren der Tabelle
   UpdateTable();
   //--- Das Symbol entsprechend der Sortierrichtung einstellen
   m_sort_arrow.State((m_last_sort_direction==SORT_ASCEND)? true : false);
}

Dies ist im Build 16:

void CTable::SortData(const uint column_index=0,const int direction=WRONG_VALUE)
{
   ...
   //--- Запомним индекс последнего отсортированного столбца данных
   m_is_sorted_column_index=(int)column_index;
   //--- Сортировка
   QuickSort(first_index,last_index,column_index,m_last_sort_direction);
}


Im neuen Build gibt es keine "Update"-Methode, daher denke ich, dass dies der Grund für die fehlende Sortierung ist.


Also habe ich diese Änderung vorgenommen und es hat offensichtlich funktioniert:

void CTable::SortData(const uint column_index=0,const int direction=WRONG_VALUE)
{
   ...
   //--- Запомним индекс последнего отсортированного столбца данных
   m_is_sorted_column_index=(int)column_index;
   //--- Сортировка
   QuickSort(first_index,last_index,column_index,m_last_sort_direction);
   
   //--- Aktualisieren der Tabelle
   Update(true);
}



PS: Kommentare auf Russisch sind nicht sehr hilfreich.

Graphical Interfaces VII: the Tables Controls (Chapter 1)
Graphical Interfaces VII: the Tables Controls (Chapter 1)
  • www.mql5.com
The first article Graphical Interfaces I: Preparation of the Library Structure (Chapter 1) explains in detail what this library is for. You will find a list of articles with links at the end of each chapter. There, you can also download a complete version of the library at the current stage of development. The files must be placed in the same...
 

Wo befindet sich die Label-Klasse in der Bibliothek? Wie erstellt man ein einzelnes Label?

 

Sag Gustavo! Schön?

Ich habe mir auch hier den Kopf zerbrochen, um die Diagrammsortierung zum Laufen zu bringen, und ich habe es zufällig gefunden ...

Es ist notwendig, die Tabelle im ON_SORT_DATA-Ereignis Ihrer "program.mqh" zu aktualisieren, etwa so:

// --- Geordnete Tabellenereignisse
if (id == CHARTEVENT_CUSTOM + ON_SORT_DATA)
{
if (lparam == m_table_symb.Id ())
{
m_table_symb.Update (true);
return;
}
// ---
return;
}


Hoffentlich hilft das!

Hier hat es perfekt funktioniert !!!

T +

Raul

 
raulpjr:

Dies ist ein englischsprachiges Forum. Bitte schreiben Sie nur auf Englisch.

Verwenden Sie bei Bedarf das Übersetzungstool der Website.

Wenn Sie Code posten, benutzen Sie die Code-Taste (Alt +S).

Ich habe Ihren Beitrag dieses Mal bearbeitet.

 

Wenn ich ExampleEAF aus der Bibliothek als Indikator in MT4 baue, stürzt der Indikator mit einem Fehler ab, wenn ich versuche, das Fenster auf den Chart zu ziehen

In MT5 funktioniert er einwandfrei.

array out of range in 'WndEvents.mqh' (288,72)

Wenn Sie eine Prüfung auf Bereichsüberschreitung im ersten Zyklus hinzufügen, funktioniert das Ziehen.

void CWndEvents::CheckElementsEvents(void)
  {
//--- Behandlung des Mauszeigerbewegungsereignisses
   if(m_id==CHARTEVENT_MOUSE_MOVE)
     {
      //--- Beenden, wenn sich das Formular in einem anderen Unterfenster des Diagramms befindet
      if(!m_windows[m_active_window_index].CheckSubwindowNumber())
         return;
      //--- Nur verfügbare Elemente prüfen
      int available_elements_total=CWndContainer::AvailableElementsTotal(m_active_window_index);
      for(int e=0; e<available_elements_total; e++)
        {
         // !!! Zusätzliche Prüfung
         if (e >= ArraySize(m_wnd[m_active_window_index].m_available_elements)) continue;
         CElement *el=m_wnd[m_active_window_index].m_available_elements[e];
         //--- Überprüfung des Fokus über Elemente
         el.CheckMouseFocus();
         //--- Ereignisbehandlung
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }
     }
//--- Alle Ereignisse außer Mauszeigerbewegung
   else
     {
      int elements_total=CWndContainer::ElementsTotal(m_active_window_index);
      for(int e=0; e<elements_total; e++)
        {
         //--- Nur verfügbare Elemente prüfen
         CElement *el=m_wnd[m_active_window_index].m_elements[e];
         if(!el.IsVisible() || !el.IsAvailable() || el.IsLocked())
            continue;
         //--- Ereignisbehandlung im Item-Handler
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }
     }
//--- Weiterleitung des Ereignisses an die Anwendungsdatei
   OnEvent(m_id,m_lparam,m_dparam,m_sparam);
  }

aber das "Erweitern" des Fensters auf den gesamten Chartbereich und das Zurückkehren funktioniert nicht mehr.

Können Sie mir sagen, wie ich dieses Problem beheben kann, damit es auch in MT4 normal funktioniert?

Worin besteht der Unterschied? Keine Warnung während der Kompilierung in MT4, ich weiß nicht, in welche Richtung ich gehen soll.


Auch in MT4 beim Kompilieren als Indikator funktioniert das Umschalten des Fokus nicht in dem Sinne, dass, wenn Sie eine Dropdown-Liste öffnen und irgendwo daneben klicken, die Liste nicht geschlossen wird und der Eingabefokus nicht zu einem anderen Element wechselt, im Expert-Modus funktioniert das normal.

In MT5 funktionieren sowohl Expert Advisor als auch Indikator normal.

 
Guten Tag, Hinweis irgendwie ist es möglich, Kopieren und Einfügen von Text aus Textfeldern zu implementieren.
 

Eine weitere interessante Panne bei Tabellen.

Nach mehreren Eingaben verdoppeln sich die Zeichen und verdreifachen sich dann (siehe Gif).

Woran kann das liegen?

Dateien:
ScreenFlow.gif  28 kb
 

CreateTextEdit scheint keine chinesische Eingabe zu unterstützen?


CreateTextEdit scheint keine chinesischen Eingaben zu unterstützen?

 

Hallo

Wo kann ich die MT4-Version dieser Bibliothek herunterladen?

 
Könnten Sie mir bitte sagen, wie ich die Standardschriftart eines Programms (Expert Advisor) mit dieser Bibliothek ändern kann? Es ist diejenige, die alles ab dem Titel in der Kopfzeile des Programms druckt. Zumindest die Größe ändern (vergrößern).