Diskussion zum Artikel "Graphisches Interface XI: Gezeichnete Steuerelemente (build 14.2)" - Seite 3

 
Artyom Trishkin:

Tol, in welchem der Artikel dieser Serie können Sie etwas über CKeys lesen?

...

D.h.: Ich starte ein Programm und fange an, Backspace zu drücken - mit jedem Backspace-Druck werden alle Steuerelemente gelöscht, beginnend mit dem zuletzt hinzugefügten. Schließlich wird auch das bereits leere Formular-Fenster gelöscht.

...


GUIs X: Mehrzeiliges Texteingabefeld-Element (Build 8)

Die Situation, dass das Drücken der Backspace-Taste GUI-Elemente löscht, konnte nicht reproduziert werden.

 
Artyom Trishkin:

Wenn Sie eine Zeile in Program.mqh in TestLibrary14 schreiben - Änderung der Fenstertitelfarbe:

Dann wird beim Minimieren des Fensters die Farbe auf den Standardwert zurückgesetzt. Und die Tooltips, die Schaltflächen zum Minimieren/Entfernen und zum Schließen des Fensters werden in der programmatisch eingestellten Fenstertitelfarbe neu gezeichnet. Und dann ändert sich die Farbe dieser Schaltflächen nur dann auf die Standardfarbe, wenn der Mauszeiger darüber bewegt wird.

...

Ich habe vergessen, die Änderung der Farbe des Formulartitels bei Mouseover hinzuzufügen. Das wird in einem der nächsten Updates nachgeholt.

Im Moment muss die Farbe für beide Zustände eingestellt werden:

...
   m_window.CaptionColor(clrDimGray);
   m_window.CaptionColorHover(clrDimGray);
...

//---

Für Schaltflächen kann die Farbe über ihre Zeiger und nach der Formularerstellung eingestellt werden.

...
   m_window.GetCollapseButtonPointer().BackColorHover(clrGray);
   m_window.GetTooltipButtonPointer().BackColorHover(clrGray);
//---
   m_window.GetCollapseButtonPointer().BackColorPressed(clrGray);
   m_window.GetTooltipButtonPointer().BackColorPressed(clrGray);
...

//---


 

Meiner Meinung nach ist der in dem Artikel verwendete Begriff "Bibliothekskern" nicht ganz korrekt. Der Begriff "Bibliotheks-Engine" wurde schon früher verwendet, aber er passt nicht ganz.

Der Begriff "Kern" sollte sich auf ein statisches Array beziehen, das alle notwendigen Informationen zusammenfasst, und der Begriff "Engine" sollte sich auf einen Mechanismus beziehen, der mit diesen Informationen arbeitet und eine Reihe von Aufgaben implementiert.

Der Begriff "Bibliothek" bezeichnet in der Programmierung eine vielfältige, disparate und unabhängige Funktionalität, die als Toolkit zur Lösung einer Reihe von Aufgaben dient und nicht um ein einziges Zentrum herum vereinigt ist. Dieses Toolkit ist weder ein "Motor" noch ein "Kernel", sondern lediglich ein Satz von Werkzeugen für den Aufbau von Anwendermechanismen.

Enthält eine Bibliothek einen Kernel und eine Engine, so handelt es sich nicht mehr um eine Bibliothek, sondern um ein als Ganzes funktionierendes System.

Die Umwandlung einer grafischen Bibliothek in einen integralen Mechanismus zur Erstellung einer grafischen Benutzeroberfläche ist eine natürliche Entwicklungsstufe, nach der die Bibliothek als solche nicht mehr existiert. Das heißt, es besteht kein Bedarf an disparater Funktionalität, weil ein fertiger Mechanismus eine Reihe von Aufgaben viel effizienter löst.

Vielleicht wird die Bibliothek jetzt zu einem solchen Mechanismus, aber im Moment ist es noch nicht so weit. Daher sind die Begriffe "Kern" und "Motor" der Bibliothek nicht ganz korrekt.

imho.

 

Hallo, die Steuerelemente sind wirklich nett und hilfreich, aber es wäre noch besser, wenn Sie höhere DPI-Einstellungen besser handhaben könnten.

Offensichtlich werden die Bitmaps korrekt angezeigt, aber der Text nicht. Er wird nach unten verschoben und abgeschnitten, wie auf dem Bild unten zu sehen ist:

Ich verwende die folgenden Anzeigeeinstellungen:


 
Artur Zas:

Hallo, die Steuerelemente sind wirklich nett und hilfreich, aber es wäre noch besser, wenn Sie höhere DPI-Einstellungen besser handhaben könnten.

Offensichtlich werden die Bitmaps korrekt angezeigt, aber der Text nicht. Er wird nach unten verschoben und abgeschnitten, wie auf dem Bild unten gezeigt:

Ich verwende die folgenden Anzeigeeinstellungen:


 
Facundo Laje:
Hallo, kann es mit MT4 verwendet werden?

 
Facundo Laje:
Hallo, könnte es mit MT4 verwendet werden?

Technisch gesehen sollte es als OBJ-BITMAP_LABEL ist auch in MQL4 verfügbar, aber Sie müssten den Bibliothekscode anpassen, da es ein paar Stellen gibt, wo der Code einfach nicht mit dem MQL4-Compiler kompilieren wird.

Ich werde versuchen, mit der Bibliothek herumzuspielen und Sie wissen lassen, ob es mir gelingt, sie irgendwie nach MQL4 zu portieren. Sie können es auch selbst versuchen. Benennen Sie einfach die .mq5-Erweiterung des Beispiels EA in .mq4 um und versuchen Sie, den Code zu kompilieren.

Natürlich werden Sie Kompilierungsfehler erhalten, aber Sie können überprüfen, wo und was sie sind.

 

Hallo!

Ich versuche, mein eigenes Bedienfeld nach dieser Artikelserie zu entwickeln... Ich interessiere mich für den Teil mit dem Multi-Windows-Modus (Artikel04), aber ich habe die aktualisierte Bibliothek14 (Artikel10) verwendet.

Was ich bis jetzt habe (in den beigefügten Bildern):


Bild1

Bild2

Was habe ich verpasst, weil die window2 und window3 sind nicht bewegen, nicht schließen, wenn Sie die Schließen-Tasten und colapse-Taste es fehlt.

Hier ist der Code Teile von Fenster 2 und 3:

//-------- Fenster2-------
#resource "\\Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp"
bool CmyPanel_Test2::CreateWindow2(const string caption_text)
  {
//--- Speichern des Fensterzeigers
   CWndContainer::AddWindow(m_window2);
    m_window2.MainPointer(m_mb_contextmenu1);
//--- Koordinaten
   int x =(m_window2.X()>0) ? m_window2.X() : 100;
   int y =(m_window2.Y()>0) ? m_window2.Y() : 100;
//--- Eigenschaften
   m_window2.Movable(true);
   m_window2.Alpha(200);
   m_window2.XSize(300);
   m_window2.YSize(100);
   m_window2.IconXGap(3);
   m_window2.IconYGap(2);
   m_window2.WindowType(W_DIALOG);
   m_window2.CloseButtonIsUsed(true);
   m_window2.GetCloseButtonPointer().Tooltip("Close");
   m_window2.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
   m_window2.IconFile("Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp");
//--- Erstellen eines Formulars
   if(!m_window2.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }
//------------------Window3----------------
bool CmyPanel_Test2::CreateWindow3(const string caption_text)
  {
//--- Speichern des Fensterzeigers
   CWndContainer::AddWindow(m_window3);
    m_window2.MainPointer(m_menubar);
//--- Koordinaten
   int x =(m_window2.X()>0) ? m_window2.X() : 100;
   int y =(m_window2.Y()>0) ? m_window2.Y() : 100;
//--- Eigenschaften
   m_window3.Movable(true);
   m_window3.Alpha(200);
   m_window3.XSize(200);
   m_window3.YSize(200);
   m_window3.IconXGap(3);
   m_window3.IconYGap(2);
   m_window3.WindowType(W_DIALOG);
   m_window3.CloseButtonIsUsed(true);
   m_window3.GetCloseButtonPointer().Tooltip("Close");
   m_window3.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
   m_window3.IconFile("Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp");
//--- Erstellen eines Formulars
   if(!m_window3.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }

und der OnEvent Teil:

void CmyPanel_Test2::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {

   if(id==CHARTEVENT_CUSTOM+ON_CLICK_MENU_ITEM)
     {
      PRINT_EVENT(ON_CLICK_MENU_ITEM,id,lparam,dparam,sparam);
      return;
     }
//---
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_BUTTON)
     {
     PRINT_EVENT(ON_CLICK_BUTTON,id,lparam,dparam,sparam);
     
     if(lparam==1 && dparam==1)
     {
      m_window3.Show();
      return;
     }
      return;
     }
//---
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_CONTEXTMENU_ITEM)
     {
      if (dparam==0)
      m_window2.Show();
      PRINT_EVENT(ON_CLICK_CONTEXTMENU_ITEM,id,lparam,dparam,sparam);
      return;
     }

Vielen Dank!

 
zlory73:

Hallo!

Ich versuche, mein eigenes Bedienfeld nach dieser Artikelserie zu entwickeln... Ich interessiere mich für den Teil mit dem Multi-Windows-Modus (Artikel04), aber ich habe die aktualisierte Bibliothek14 (Artikel10) verwendet.

Was ich bis jetzt habe (in den beigefügten Bildern):


Was habe ich verpasst, weil die window2 und window3 sind nicht bewegen, nicht schließen, wenn Sie die Schließen-Tasten und colapse-Taste es fehlt.

Hier ist der Code Teile von Fenster 2 und 3:

und der OnEvent Teil:

Vielen Dank!


Sorry, geändert:

bool CmyPanel_Test2::CreateWindow3(const string caption_text)
  {
//--- Speichern des Fensterzeigers
   CWndContainer::AddWindow(m_window3);
    m_window3.MainPointer(m_window);

und:

bool CmyPanel_Test2::CreateWindow2(const string caption_text)
  {
//--- Speichern des Fensterzeigers
   CWndContainer::AddWindow(m_window2);
    m_window2.MainPointer(m_window);

immer noch nichts...

Bitte um Hilfe1

 
Artur Zas:

Technisch gesehen sollte es als OBJ-BITMAP_LABEL ist auch in MQL4 verfügbar, aber Sie müssten die Bibliothek Code anpassen, da es ein paar Stellen, wo der Code einfach nicht kompilieren mit dem MQL4-Compiler.

Ich werde versuchen, mit der Bibliothek herumzuspielen und Sie wissen lassen, ob es mir gelingt, sie irgendwie nach MQL4 zu portieren. Sie können es auch selbst versuchen. Benennen Sie einfach die .mq5-Erweiterung des Beispiels EA in .mq4 um und versuchen Sie, den Code zu kompilieren.

Natürlich werden Sie Kompilierungsfehler erhalten, aber Sie können überprüfen, wo und was sie sind.