Diskussion zum Artikel "Grafische Interfaces XI: Integration der graphischen Standardbibliothek (build 16)"

 

Neuer Artikel Grafische Interfaces XI: Integration der graphischen Standardbibliothek (build 16):

Eine neue Version der Grafikbibliothek zum Erstellen wissenschaftlicher Diagramme (die Klasse CGraphic) wurde vor Kurzen veröffentlicht. Mit dieser Aktualisierung der weiterentwickelten Bibliothek, um grafische Interfaces zu erstellen, wird eine Version mit neuem Steuerelemente zur Erstellung von Diagrammen eingeführt. Jetzt ist es noch einfacher, Daten verschiedener Typen zu visualisieren.

Hier ist, wie es aussieht:

 Abb. 6. Grafisches Interface der Testanwendung zum Zeichnen von Kurven.

Abb. 6. Grafisches Interface der Testanwendung zum Zeichnen von Kurven.

 
Toller Artikel.
 

Tolle Bibliothek!

 

Nochmals herzlichen Glückwunsch! Gut gemacht!

 

Guten Tag.

Das Problem trat dort auf, wo ich es nicht erwartet hatte...

Es gab ein Programm - ein Hauptfenster, ein Dialogfenster. Alles war in Ordnung. Ich habe ein weiteres Dialogfenster hinzugefügt.

Jetzt verhalten sie sich folgendermaßen. Wir öffnen ein Dialogfenster - alles ist in Ordnung, es funktioniert. Wir schließen es. Öffnen Sie das zweite, reagieren die Elemente darin nicht auf Klicks, oder besser gesagt, sie reagieren seltsam (auf dem Screenshot). Bis man auf den Fenstertitel klickt, dann ist alles normal mit diesem Fenster. Aber das gleiche Problem jetzt mit dem ersten Fenster, bis Sie auf den Titel klicken.

Könnten Sie mir bitte sagen, was falsch sein könnte? Oder wo ich überhaupt nachschauen kann?

Dateien:
123123123.gif  504 kb
 

Ich habe das Paket heruntergeladen, und erstellen Sie eine Demo-GUI von CTable.

#include <\\EasyAndFastGUI\\WndEvents.mqh>

//+------------------------------------------------------------------+
//| Klasse zur Erstellung einer Anwendung|
//+------------------------------------------------------------------+
class CGUI : public CWndEvents {
  private:
    CWindow           m_window;
    CTable            m_table;

  public:
    bool              CreateGUI(const int x, const int y, const string caption_text);

  private:
    bool              CreateWindow(const int x, const int y, const int x_size, const int y_size, const string text);
    bool              CreateTable(const int x_gap, const int y_gap);
};

bool CGUI::CreateGUI(const int x, const int y, const string caption_text) {
  int x_size = 400,
      y_size = 400;
  
  if (!CreateWindow(x, y, x_size, y_size, caption_text)) {
    return(false);
  }

  if (!CreateTable(1, 20)) {
    return(false);
  }

  m_chart.Redraw();
  return(true);
}

//+------------------------------------------------------------------+
//| Erzeugt Formular 1 für Steuerelemente|
//+------------------------------------------------------------------+
bool CGUI::CreateWindow(const int x, const int y, const int x_size, const int y_size, const string caption_text) {
  CWndContainer::AddWindow(m_window);

  m_window.XSize(x_size);
  m_window.YSize(y_size);
  m_window.Alpha(255);

  m_window.IsMovable(true);
  m_window.ResizeMode(true);
  m_window.CloseButtonIsUsed(true);
  m_window.FullscreenButtonIsUsed(true);
  m_window.CollapseButtonIsUsed(true);
  m_window.TooltipsButtonIsUsed(true);
  m_window.RollUpSubwindowMode(true, true);
  m_window.TransparentOnlyCaption(true);

  //--- Einstellen der Tooltips
  m_window.GetCloseButtonPointer().Tooltip("Close");
  m_window.GetFullscreenButtonPointer().Tooltip("Fullscreen/Minimize");
  m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  m_window.GetTooltipButtonPointer().Tooltip("Tooltips");

  m_window.BackColor((color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND));
  m_window.BorderColor(clrMaroon);

  return(m_window.CreateWindow(m_chart_id, m_subwin, caption_text, x, y));
}

//+------------------------------------------------------------------+
//| Erstellen einer gerenderten Tabelle|
//+------------------------------------------------------------------+
bool CGUI::CreateTable(const int x_gap,const int y_gap) {
  m_table.MainPointer(m_window);

  int x_size = 300,
      y_size = 300;

  int column_width[] = {100, 200};

  m_table.XSize(x_size);
  m_table.YSize(y_size);

  m_table.TableSize(2, 10);

  m_table.ColumnsWidth(column_width);
  m_table.CellYSize(30);

  ENUM_ALIGN_MODE column_align[];
  ArrayResize(column_align, 2);
  ::ArrayInitialize(column_align, ALIGN_RIGHT);
  m_table.TextAlign(column_align);

  color bg_color = (color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND);
  m_table.CellColor(bg_color);
  m_table.GridColor(bg_color);
  m_table.BorderColor(bg_color);
  m_table.FontSize(12);

  /*
 CScrollV *scroll_v = m_table.GetScrollVPointer();
 scroll_v.ChangeThumbSize(0, 0);
 scroll_v.Hide();
 scroll_v.IsVisible(false);

 CScrollH *scroll_h = m_table.GetScrollHPointer();
 scroll_h.ChangeThumbSize(0, 0);
 scroll_h.Hide();
 scroll_h.IsVisible(false);
 //*/
   

  //m_table.TextXOffset(5);
  //m_table.TextYOffset(4);
  m_table.ShowHeaders(false);
  m_table.SelectableRow(false);
  m_table.ColumnResizeMode(false);
  //m_table.IsZebraFormatRows(clrWhiteSmoke);
  //m_table.AutoXResizeMode(true);
  //m_table.AutoXResizeRightOffset(1);
  //m_table.AutoYResizeMode(true);
  //m_table.AutoYResizeBottomOffset(25);

  if (!m_table.CreateTable(x_gap, y_gap)) {
    return(false);
  }

  CWndContainer::AddToElementsArray(0, m_table);

  m_table.Update(true);

  m_window.Update(true);

  return(true);
}

//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   CGUI gui;
   gui.CreateGUI(10, 50, "Test GUI");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

Aber ich habe festgestellt, dass die CTable-Steuerung auch immer H/V-Scrollbar-Räume lässt, ich konnte sie nicht durch Hide(), IsVisiable(false) entfernen.


Könnten Sie mir also einen Workaround geben?

Vielen Dank im Voraus,

David

 

Vielleicht wurde diese Frage bereits diskutiert, aber ich habe sie nicht gesehen. Wie kann das Panel neu gezeichnet werden, nachdem neue Objekte zum Diagramm hinzugefügt wurden (z. B. Linien)?


Mir ist aufgefallen, dass, wenn ich das Panel minimiere, es sich bereits über diesen Linien befindet, aber nicht über allen :(((



 
traderEvgen:

Vielleicht wurde diese Frage bereits diskutiert, aber ich habe sie nicht gesehen. Wie kann das Panel neu gezeichnet werden, nachdem neue Objekte zum Diagramm hinzugefügt wurden (z. B. Linien)?

  • Laden Sie die neueste Version der Bibliothek herunter.
  • Versuchen Sie, die Methode CWndEvents::ResetWindow() aufzurufen.

P.S. Die Bibliothek wird nicht mehr aktualisiert. Alle notwendigen Änderungen, Korrekturen und Hinzufügungen, wenn ein solcher Bedarf entsteht, sollten die Benutzer selbst vornehmen.

 
Anatoli Kazharski:

  • Laden Sie die neueste Version der Bibliothek herunter.
  • Versuchen Sie, die Methode CWndEvents::ResetWindow() aufzurufen.

P.S. Die Bibliothek wird nicht mehr aktualisiert. Alle notwendigen Änderungen, Korrekturen und Ergänzungen, wenn ein solcher Bedarf entsteht, sollten die Benutzer selbst vornehmen.


Verstanden, danke

 

Leider passen die diversen builds (releases) nicht zusammen.

Ich meine damit: es sollten wirklich alle Beispiele von Article01 bis Article11 fehlerfrei funktionieren.

Der Compiler schmeisst jedoch jede Menge an Warnungen und Fehlern bei den vorgehenden Beispielen.


Durch das 'drüberkopieren' der neuen Versionen funktionieren die älteren Beispiele nicht mehr.

Weiters sind die Übesetzungen mangelhaft bzw. nicht vorhanden.

Na super !


Es ist eine Schande und Typisch für so manches bei Metaquotes.

Es wäre wirklich an der Zeit ein voll funktionstüchtiges und komplettes Release ins Netz zu stellen und nicht nur inkompatible Stückchen.

Ein Inhaltsverzeichnis der Beispieldateien und wo was zu finden ist fehlt. Das wäre ein Thema für den letzten Artikel dieser Reihe, da diese ja angeblich nicht fortgesetzt werden wird.

Es wäre doch wirklich schade um die viele Arbeit, wenn man keine funktionierenden Beispiele zur Anwendung hat.

Kind regards, Otto Pauser

Und was wirklich fehlt ist ein Dialogeditor!

 

Ich werde versuchen