Diskussion zum Artikel "Graphical Interfaces I: Formular mit Steuerelementen (Kapitel 2)"

 

Neuer Artikel Graphical Interfaces I: Formular mit Steuerelementen (Kapitel 2) :

Dieser Artikel ist die Fortsetzung des ersten Teils dieser Serie über grafische Interfaces. Der erste Artikel Grafische Interfaces I: Vorbereitung der Bibliotheksstruktur (Kapitel 1) betrachtet im Detail den Sinn und Zweck der Bibliothek. Eine vollständige Liste der Links zu den Artikeln des ersten Teils finden Sie am Ende von jedem Kapitel. Zudem finden Sie dort eine Möglichkeit das Projekt, entsprechend dem aktuellen Entwicklungszustand, herunterzuladen. Die Dateien müssen in den gleichen Verzeichnissen untergebracht werden, so, wie Sie auch in dem Archiv abgelegt sind.

In dem vorherigen Kapitel haben wir die Struktur der Bibliothek für die Erzeugung von grafischen Interfaces besprochen. Deren (1) abgeleitete Klassen für einfache Objekte, (2) eine Basisklasse für alle Controls, (3) und eine grundlegende Klasse für das Abspeichern von Pointern zu den Controls und das Verwalten der Controls in einem gemeinsamen Eventhandler.

In diesem Artikel erstellen wir das erste und wichtigste Element für das graphische Interface - ein Formular (Form) mit Steuerelementen (Controls) Es können eine Vielzahl von Controls zu jeder Zeit und in jeder Kombination zu dieser Form hinzugefügt werden.

Aus welchen Teilen wird die Form beziehungsweise das Fenster, welches wir nun erzeugen wollen, bestehen?

  1. Hintergrund Alle Controls werden sich in diesem Bereich befinden.
  2. Kopfteil. Dieser Teil erlaubt das Bewegen des Fensters und er beinhaltet die Interface Controls, die nachfolgend aufgelistet sind.
  3. Icon. Zusätzliche Attribute für die visuelle Identifizierung.
  4. Beschriftung. Der Name des Fensters.
  5. Der "Tooltip" Button. Ein Klick auf diesen Button aktiviert den Modus für das Anzeigen von Tooltips, soweit sie verfügbar sind.
  6. Button für Minimierung/Maximierung des Fensters.
  7. Einen Button für das Schließen des Fensters.

Fig. 1. Compound parts of the form for controls

Autor: Anatoli Kazharski

 
Hallo Anatoly, ich habe in der Basisklasse keine Methoden zum Speichern und Laden von Formularparametern (Position, Status...) gesehen. Planen Sie, solche Methoden in Zukunft hinzuzufügen, unter Berücksichtigung der Art der Formulare?
 
Ruslan Khasanov:
Hallo Anatoly, ich habe in der Basisklasse keine Methoden zum Speichern und Laden von Formularparametern (Position, Status...) gesehen. Planen Sie, solche Methoden in Zukunft hinzuzufügen, unter Berücksichtigung der Art der Formulare?

Ein solcher Artikel ist geplant. Aber in meiner Version werden die zu speichernden und zu ladenden Parameter durch den Entwickler der MQL-Anwendung bestimmt werden.

 

Guten Tag. Anatoly, natürlich möchte ich meinen tiefsten Respekt für Ihre Arbeit und die von Ihnen geleistete Arbeit zum Ausdruck bringen. Aber ich habe eine Frage beim Testen der Bibliothek am Beispiel eines Expert Advisors. Warum ist die Farbe des Fensters schwarz, während alle Farben der Elemente, aus denen das Fenster besteht, standardmäßig auf LightGray eingestellt sind? Gibt es nicht irgendwo eine Farbüberschneidung, die zu einem schwarzen Fenster führt? Ich füge ein Bildschirmfoto bei:


 
Pavel Trofimov:

Guten Tag. Anatoly, natürlich möchte ich meinen tiefsten Respekt für Ihre Arbeit und die von Ihnen geleistete Arbeit zum Ausdruck bringen. Aber ich habe eine Frage beim Testen der Bibliothek am Beispiel eines Expert Advisors. Warum ist die Farbe des Fensters schwarz, während alle Farben der Elemente, aus denen das Fenster besteht, standardmäßig auf LightGray eingestellt sind? Gibt es nicht irgendwo eine Farbüberschneidung, die zu einem schwarzen Fenster führt? Ich habe ein Bildschirmfoto angehängt:

Sie können die Standardfarben des Formulars im Konstruktor der Klasse CWindow sehen (Datei Window.mqh).

Wenn Sie die Farben des Formulars ändern möchten, verwenden Sie die entsprechenden Methoden der CWindow-Klasse. Die Eigenschaften des Formulars werden vor dessen Erstellung festgelegt.

Dieses Beispiel wurde in dem Artikel gezeigt:

//+------------------------------------------------------------------+
//|| Erzeugt ein Formular für die Steuerelemente
//+------------------------------------------------------------------+
bool CProgram::CreateWindow(const string caption_text)
  {
//--- Hinzufügen des Fensterzeigers zum Fenster-Array
   CWndContainer::AddWindow(m_window);
//--- Eigenschaften
   m_window.XSize(200);
   m_window.YSize(200);
   m_window.WindowBgColor(clrWhiteSmoke);
   m_window.WindowBorderColor(clrLightSteelBlue);
   m_window.CaptionBgColor(clrLightSteelBlue);
   m_window.CaptionBgColorHover(C'200,210,225');
//--- Formularerstellung
   if(!m_window.CreateWindow(m_chart_id,m_subwin,caption_text,1,1))
      return(false);
//---
   return(true);
  }

//---

Ergebnis:

 
Danke für die Klarstellung!
 

Ich konnte keine Methode finden, die die Farbe des Header-Textes ändert, also habe ich beschlossen, window.mqh hinzuzufügen:

//--- Kopfzeileneigenschaften
   string            m_caption_text;
   int               m_caption_height;
   color             m_caption_text_color;
   color             m_caption_bg_color;
   color             m_caption_bg_color_off;
   color             m_caption_bg_color_hover;
   color             m_caption_color_bg_array[];

Und Methoden:

void              CaptionTextColor(const color text_color)                { m_caption_text_color=text_color;        }
color             CaptionTextColor(void)                            const { return(m_caption_text_color);           }

Nun, und diese Methode ändert sich entsprechend:

//+------------------------------------------------------------------+
//|| Erzeugt eine Kopfzeilenbeschriftung|
//+------------------------------------------------------------------+
bool CWindow::CreateLabel(void)
  {
   string name=CElementBase::ProgramName()+"_window_label_"+(string)CElementBase::Id();
//--- Objektkoordinaten
   int x=CElementBase::X()+m_label_x_gap;
   int y=CElementBase::Y()+m_label_y_gap;
//--- Festlegen der Textbeschriftung
   if(!m_label.Create(m_chart_id,name,m_subwin,x,y))
      return(false);
//--- Eigenschaften einstellen
   m_label.Description(m_caption_text);
   m_label.Font(CElementBase::Font());
   m_label.FontSize(CElementBase::FontSize());
   m_label.Color(m_caption_text_color);
   m_label.Corner(m_corner);
   m_label.Selectable(false);
   m_label.Z_Order(m_button_zorder);
   m_label.Tooltip("\n");
//--- Speichern der Koordinaten
   m_label.X(x);
   m_label.Y(y);
//--- Einzüge vom Endpunkt aus
   m_label.XGap(x-m_x);
   m_label.YGap(y-m_y);
//--- Abmessungen speichern
   m_label.XSize(m_label.X_Size());
   m_label.YSize(m_label.Y_Size());
//--- Speichern des Objektzeigers
   CElementBase::AddToArray(m_label);
   return(true);
  }
 
Alexander Fedosov:

Ich konnte keine Methode finden, mit der sich die Farbe des Kopfzeilentextes ändern lässt, also habe ich beschlossen, window.mqh hinzuzufügen:

Das ist gut. Ich werde auch diese Funktion in einem der nächsten Artikel hinzufügen.

Die neueste Version der Bibliothek kann in diesem Artikel heruntergeladen werden: GUIs X: New features for a drawn table (build 9).

Eine neue Version(Build 10) wird möglicherweise nächste Woche veröffentlicht.

 

Hallo Herr Anatoli, Ihre Artikel sind so schön und die Kodierung sind beeindruckend.

Ich brauche Hilfe, um mein Panel auf dem Diagramm zu bauen. Können Sie mir bitte helfen?

Danke!

 

HI. Ich möchte fragen, wie ich all diese Fehler beheben kann. Dankeschön

'Window.mqh'    Window.mqh      1       1
'Element.mqh'   Element.mqh     1       1
'Objects.mqh'   Objects.mqh     1       1
'Enums.mqh'     Enums.mqh       1       1
'Defines.mqh'   Defines.mqh     1       1
'ChartObjectsBmpControls.mqh'   ChartObjectsBmpControls.mqh     1       1
'ChartObject.mqh'       ChartObject.mqh 1       1
'Object.mqh'    Object.mqh      1       1
'StdLibErr.mqh' StdLibErr.mqh   1       1
'ChartObjectsTxtControls.mqh'   ChartObjectsTxtControls.mqh     1       1
'Colors.mqh'    Colors.mqh      1       1
undefined class 'CBmpLabel' cannot be used      Window.mqh      25      15
   see declaration of class 'CBmpLabel' Objects.mqh     20      7
undefined class 'CLabel' cannot be used Window.mqh      26      12
   see declaration of class 'CLabel'    Objects.mqh     19      7
undefined class 'CBmpLabel' cannot be used      Window.mqh      27      15
   see declaration of class 'CBmpLabel' Objects.mqh     20      7
undefined class 'CBmpLabel' cannot be used      Window.mqh      28      15
   see declaration of class 'CBmpLabel' Objects.mqh     20      7
undefined class 'CBmpLabel' cannot be used      Window.mqh      29      15
   see declaration of class 'CBmpLabel' Objects.mqh     20      7
undefined class 'CBmpLabel' cannot be used      Window.mqh      30      15
   see declaration of class 'CBmpLabel' Objects.mqh     20      7
'ENUM_WINDOW_TYPE' - unexpected token, probably type is missing?        Window.mqh      36      5
'm_window_type' - semicolon expected    Window.mqh      36      22
'ENUM_WINDOW_TYPE' - unexpected token, probably type is missing?        Window.mqh      99      5
'WindowType' - semicolon expected       Window.mqh      99      23
'void' - name expected  Window.mqh      102     5
'}' - expressions are not allowed on a global scope     Window.mqh      104     5
'const' modifier not allowed for nonmember functions    Window.mqh      118     28
'const' modifier not allowed for nonmember functions    Window.mqh      126     30
'const' modifier not allowed for nonmember functions    Window.mqh      132     29
'const' modifier not allowed for nonmember functions    Window.mqh      138     32
'const' modifier not allowed for nonmember functions    Window.mqh      144     37
'public' - unexpected token, probably type is missing?  Window.mqh      168     3
'long' - unexpected token, probably type is missing?    Window.mqh      170     46
'double' - unexpected token, probably type is missing?  Window.mqh      170     66
'string' - unexpected token, probably type is missing?  Window.mqh      170     88
'virtual' - unexpected token    Window.mqh      172     5
'virtual' - unexpected token    Window.mqh      174     5
'virtual' - unexpected token    Window.mqh      176     5
'virtual' - unexpected token    Window.mqh      177     5
'virtual' - unexpected token    Window.mqh      178     5
'virtual' - unexpected token    Window.mqh      179     5
'virtual' - unexpected token    Window.mqh      181     5
'virtual' - unexpected token    Window.mqh      182     5
'}' - expressions are not allowed on a global scope     Window.mqh      183     1
'RollUpSubwindowMode' - member function not defined     Window.mqh      222     15
'ChangeSubwindowHeight' - member function not defined   Window.mqh      235     15
'Hide' - member function not defined    Window.mqh      294     15
'DefaultIcon' - member function not defined     Window.mqh      362     17
'advisor.bmp' as resource "::Images\EasyAndFastGUI\Icons\bmp16\advisor.bmp"     advisor.bmp     1       1
'indicator.bmp' as resource "::Images\EasyAndFastGUI\Icons\bmp16\indicator.bmp" indicator.bmp   1       1
'script.bmp' as resource "::Images\EasyAndFastGUI\Icons\bmp16\script.bmp"       script.bmp      1       1
'm_window_type' - struct member undefined       Window.mqh      193     5
'm_chart' - undeclared identifier       Window.mqh      210     5
'SetWindowProperties' - undeclared identifier   Window.mqh      212     5
')' - expression expected       Window.mqh      212     25
'm_window_type' - undeclared identifier Window.mqh      286     8
'W_DIALOG' - undeclared identifier      Window.mqh      286     25
'.' - struct or class type expected     Window.mqh      396     15
'Create' - undeclared identifier        Window.mqh      396     16
'Create' - some operator expected       Window.mqh      396     16
'(' - unbalanced left parenthesis       Window.mqh      396     7
',' - unexpected token  Window.mqh      396     33
'name' - some operator expected Window.mqh      396     35
expression has no effect        Window.mqh      396     23
',' - unexpected token  Window.mqh      396     49
expression has no effect        Window.mqh      396     41
',' - unexpected token  Window.mqh      396     52
expression has no effect        Window.mqh      396     51
')' - unexpected token  Window.mqh      396     55
expression has no effect        Window.mqh      396     54
')' - unexpected token  Window.mqh      396     56
'.' - struct or class type expected     Window.mqh      402     11
'BmpFileOn' - undeclared identifier     Window.mqh      402     12
'BmpFileOn' - some operator expected    Window.mqh      402     12
')' - unexpected token  Window.mqh      402     40
expression has no effect        Window.mqh      402     27
'.' - struct or class type expected     Window.mqh      403     11
'BmpFileOff' - undeclared identifier    Window.mqh      403     12
'BmpFileOff' - some operator expected   Window.mqh      403     12
')' - unexpected token  Window.mqh      403     41
expression has no effect        Window.mqh      403     28
'.' - struct or class type expected     Window.mqh      404     11
'Corner' - undeclared identifier        Window.mqh      404     12
'Corner' - some operator expected       Window.mqh      404     12
')' - unexpected token  Window.mqh      404     27
expression has no effect        Window.mqh      404     19
'.' - struct or class type expected     Window.mqh      405     11
'Selectable' - undeclared identifier    Window.mqh      405     12
'Selectable' - some operator expected   Window.mqh      405     12
')' - unexpected token  Window.mqh      405     28
expression has no effect        Window.mqh      405     23
'.' - struct or class type expected     Window.mqh      406     11
'Z_Order' - undeclared identifier       Window.mqh      406     12
'Z_Order' - some operator expected      Window.mqh      406     12
')' - unexpected token  Window.mqh      406     35
expression has no effect        Window.mqh      406     20
'.' - struct or class type expected     Window.mqh      407     11
'Tooltip' - undeclared identifier       Window.mqh      407     12
'Tooltip' - some operator expected      Window.mqh      407     12
')' - unexpected token  Window.mqh      407     24
expression has no effect        Window.mqh      407     21
'.' - struct or class type expected     Window.mqh      409     11
'X' - some operator expected    Window.mqh      409     12
'.' - struct or class type expected     Window.mqh      410     11
'Y' - some operator expected    Window.mqh      410     12
'.' - struct or class type expected     Window.mqh      412     11
'XGap' - some operator expected Window.mqh      412     12
'.' - struct or class type expected     Window.mqh      413     11
'YGap' - some operator expected Window.mqh      413     12
'.' - struct or class type expected     Window.mqh      415     11
'.' - struct or class type expected     Window.mqh      415     24
'X_Size' - undeclared identifier        Window.mqh      415     25
'X_Size' - some operator expected       Window.mqh      415     25
'(' - unexpected token  Window.mqh      415     31
'XSize' - some operator expected        Window.mqh      415     12
'.' - struct or class type expected     Window.mqh      416     11
'.' - struct or class type expected     Window.mqh      416     24
'Y_Size' - undeclared identifier        Window.mqh      416     25
'Y_Size' - some operator expected       Window.mqh      416     25
'(' - unexpected token  Window.mqh      416     31
'YSize' - some operator expected        Window.mqh      416     12
'm_icon' - parameter conversion not allowed     Window.mqh      418     26
   void CElement::AddToArray(CChartObject&)     Element.mqh     195     10
'm_icon_file' - undeclared identifier   Window.mqh      109     9
'm_tooltips_button' - undeclared identifier     Window.mqh      112     9
'm_right_limit' - undeclared identifier Window.mqh      115     9
'm_is_minimized' - undeclared identifier        Window.mqh      119     16
expression not boolean  Window.mqh      119     16
'm_is_minimized' - undeclared identifier        Window.mqh      122     9
100 errors, 11 warnings         101     12