Diskussion zum Artikel "Grafische Interfaces X: Updates für die Easy And Fast Bibliothek (Build 2)" - Seite 3

 
Alexey Oreshkin:
Wann ist die Aktualisierung zu erwarten?

Wenn Sie es dringend benötigen, können Sie die folgenden Änderungen selbst vornehmen:

1. Fügen Sie in der Datei Defines.mqh einen neuen Bezeichner hinzu:

#define  ON_CLICK_TAB               (26) // Registerkarte wechseln

//---

2. Fügen Sie in den Klassen CTabs und CIconTabs (Dateien Tabs.mqh und IconTabs.mqh) in der Methode ShowTabElements() eine Zeile wie im folgenden Listing ein:

//+------------------------------------------------------------------+
//| Zeigt nur die Elemente der ausgewählten Registerkarte an.
//+------------------------------------------------------------------+
void CTabs::ShowTabElements(void)
  {
//--- Beenden, wenn Registerkarten ausgeblendet sind
   if(!CElement::IsVisible())
      return;
//--- Prüfen des Index der ausgewählten Registerkarte
   CheckTabIndex();
//---
   for(int i=0; i<m_tabs_total; i++)
     {
      //--- Ermitteln der Anzahl der an die Registerkarte angehängten Elemente
      int tab_elements_total=::ArraySize(m_tab[i].elements);
      //--- Wenn diese Registerkarte hervorgehoben ist
      if(i==m_selected_tab)
        {
         //--- Registerkartenelemente anzeigen
         for(int j=0; j<tab_elements_total; j++)
            m_tab[i].elements[j].Show();
        }
      //--- Elemente von inaktiven Registerkarten ausblenden
      else
        {
         for(int j=0; j<tab_elements_total; j++)
            m_tab[i].elements[j].Hide();
        }
     }
//--- Senden Sie eine Nachricht darüber
   ::EventChartCustom(m_chart_id,ON_CLICK_TAB,CElement::Id(),m_selected_tab,"");
  }

//---

3. jetzt kann das Ereignis mit dem Bezeichner ON_CLICK_TAB im Handler der benutzerdefinierten Klasse akzeptiert werden.

Beispiel:

//+------------------------------------------------------------------+
//| Graph Event Handler|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- Ereignis "Tabulator drücken
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_TAB)
     {
      //--- Wenn Sie das Optionsfeld gedrückt haben
      if(m_tabs.SelectedTab()==0)
        {
         switch(m_radio_buttons1.SelectedButtonIndex()){
            case  0:
               m_canvas_table1.Show();
               m_canvas_table11.Hide();
               m_canvas_table111.Hide();
               ModifyCanvasTable1(0);
            break;
            case  1:
               m_canvas_table1.Hide();
               m_canvas_table11.Show();
               m_canvas_table111.Hide();
               ModifyCanvasTable1(1);                
            break;
            case  2:
               m_canvas_table1.Hide();
               m_canvas_table11.Hide();
               m_canvas_table111.Show();
               ModifyCanvasTable1(2);               
            break;                        
         }       
         return;
        }
      return;
     }
  }
 
Danke, es funktioniert.
Ich habe noch einen weiteren Fehler gefunden - wir starten das Werkzeug, bewegen das Panel weg und beginnen, die Optionsfelder zu drücken. Wenn die Tabelle gezeichnet wird, beginnt sie zunächst von der linken Kante gezeichnet werden, und dann ist es irgendwie zieht bis zu den erforderlichen Koordinaten.
 
Alexey Oreshkin:
Danke, es funktioniert.
Ich habe noch einen weiteren Fehler gefunden - wir starten das Werkzeug, bewegen das Panel weg und beginnen, die Optionsfelder zu drücken. Wenn die Tabelle gezeichnet wird, wird sie zuerst vom linken Rand aus gezeichnet, und dann zieht sie sich irgendwie bis zu den gewünschten Koordinaten hoch.

Ja, so etwas gibt es. Fügen Sie am Beispiel dieser Art von Tabelle der Methode CCanvasTable::Show() in der Datei CanvasTable.mqh eine Zeile wie folgt hinzu:

//+------------------------------------------------------------------+
//|| Zeigt das Element|
//+------------------------------------------------------------------+
void CCanvasTable::Show(void)
  {
//--- Beenden, wenn das Element bereits sichtbar ist
   if(CElement::IsVisible())
      return;
//--- Alle Objekte sichtbar machen
   m_area.Timeframes(OBJ_ALL_PERIODS);
   m_canvas.Timeframes(OBJ_ALL_PERIODS);
   m_scrollv.Show();
   m_scrollh.Show();
//--- Sichtbarkeitsstatus
   CElement::IsVisible(true);
//--- Verschieben eines Gegenstands
   Moving(m_wnd.X(),m_wnd.Y());
  }

//---

Wenn dieses Problem bei anderen Elementen auftritt, fügen Sie die gleiche Zeile in deren Show()-Methode ein. Alle Elementklassen werden diesen Fix im nächsten Update haben.

 
Hallo, ich verfolge Ihre Arbeit, und ich bin wirklich dankbar.

Sie bereits entwickelt oder sehen Sie etwas, das mit Tabellierungen oder Fokus auf Steuerelemente im Formular arbeiten kann.

Ich brauche die Ausgaben zu ändern, nachdem ich eine Eingabe in einem CEdit oder CSpinEdit und drücken Sie Enter oder drücken Sie TAB, ich möchte auf die nächste bearbeiten, für bessere Usuability in meinem Programm übergeben.

Können Sie mir helfen oder mir zeigen, wo ich suchen muss?

Vielen Dank für Ihren Beitrag für die Gemeinschaft.
 
RODRIGO CAMPOS FIDELIS:

Haben Sie schon etwas entwickelt oder gesehen, das mit Tabulatoren oder Focus on Controls im Formular arbeiten kann.

Ich muss die Ausgaben ändern, nachdem ich eine Eingabe in ein CEdit oder CSpinEdit eingefügt habe und Enter oder TAB drücke, möchte ich zum nächsten Edit übergehen, für eine bessere Nutzbarkeit in meinem Programm.

Im Moment ist dies nicht möglich. Ich werde darüber nachdenken, wie ich es implementieren kann.
 
Anatoli Kazharski:
Im Moment ist dies noch nicht möglich. Ich werde darüber nachdenken, wie man es implementieren kann.
Anatoli Kazharski, ich denke darüber nach. Gibt es eine Möglichkeit, wie ich den Editionsmodus per Code aktivieren kann, so wie wenn sie nicht ReadOnly sind und wir einen Doppelklick auf das CEdit machen und sie werden blau und ausgewählt.
Oder, irgendeine Möglichkeit, wie ich eine Eingabe per Splash, Messagebox oder irgendein Fenster automatisch anfordern kann, wenn ich den Code ausführe.

Ich denke über einige Möglichkeiten nach, und ich will wirklich keine DLL benutzen, ich bin noch nicht so ein Profi. Aber ich habe wirklich den Willen. Wenn Sie mir ein paar Hinweise oder Ideen geben, kann ich unseren Code wirklich verbessern.
 

Lieber Anatoli, vielen Dank für deine Mühe!

Ich möchte dich nur darauf hinweisen, dass es einen Tippfehler in MenuItem.mqh, Zeile 237, gibt, der es nicht möglich macht, erfolgreich kompiliert zu werden:

" > The type of the menu item can be set using the CMenuItem::TypeMenuItem()") method");

sollte stattdessen lauten

" > The type of the menu item can be set using the CMenuItem::TypeMenuItem() method");

richtig?

 
Ist dies die letzte Version von MT4?
 

Der Edit flackert ständig.

https://www.mql5.com/en/forum/274301

 
Wie erstellt man nur Etiketten?