Diskussion zum Artikel "Grafische Interfaces X: Neue Möglichkeiten der Tabellendarstellung (build 9)" - Seite 2

 
Artyom Trishkin:
Ja, bei mir funktioniert es auch, aber mit der alten Bibliothek.

Mach es bitte mit der neuen Build6,7,8 oder 9.
 
Anatoli Kazharski:
Verwenden Sie MetaTrader 5. Die Version MetaTrader 4 wird nicht mehr unterstützt und ich kann Ihnen keinen Rat geben.
Ich danke Ihnen für Ihre Antwort. (n.b. Ich habe gefragt, ob es mit dem neuen Build funktioniert)

Ist unten OK?
//+------------------------------------------------------------------+
//| Создаёт общую площадь                                            |
//+------------------------------------------------------------------+
bool CColorPicker::CreateArea(void)
  {
//--- Формирование имени объекта
   string name=CElementBase::ProgramName()+"_color_picker_bg_"+(string)CElementBase::Id();
//--- Координаты
   int x=CElementBase::X();
   int y=CElementBase::Y();
//--- Создать объект
   if(!m_area.Create(m_chart_id,name,m_subwin,x,y,m_x_size,m_y_size))
      return(false);
//--- Свойства
   m_area.BackColor(m_area_color);
   m_area.Color(m_area_border_color);
   m_area.BorderType(BORDER_FLAT);
   m_area.Corner(m_corner);
   m_area.Selectable(false);
   m_area.Z_Order(m_area_zorder);
   m_area.Tooltip("\n");
//--- Координаты
   m_canvas.X(x);
   m_canvas.Y(y);
//--- Размеры
   m_canvas.XSize(m_x_size);
   m_canvas.YSize(m_y_size);

//--- Отступы от крайней точки
   m_area.XGap(CElement::CalculateXGap(x));
   m_area.YGap(CElement::CalculateYGap(y));
//--- Сохраним указатель объекта
   CElementBase::AddToArray(m_area);
   return(true);
  }


 
stt:
Vielen Dank für Ihre Antwort. (n.b. Ich fragte, ob es mit neuen Build funktioniert)

Ist unten OK?
//+------------------------------------------------------------------+
//| Создаёт общую площадь                                            |
//+------------------------------------------------------------------+
bool CColorPicker::CreateArea(void)
  {
//--- Формирование имени объекта
   string name=CElementBase::ProgramName()+"_color_picker_bg_"+(string)CElementBase::Id();
//--- Координаты
   int x=CElementBase::X();
   int y=CElementBase::Y();
//--- Создать объект
   if(!m_area.Create(m_chart_id,name,m_subwin,x,y,m_x_size,m_y_size))
      return(false);
//--- Свойства
   m_area.BackColor(m_area_color);
   m_area.Color(m_area_border_color);
   m_area.BorderType(BORDER_FLAT);
   m_area.Corner(m_corner);
   m_area.Selectable(false);
   m_area.Z_Order(m_area_zorder);
   m_area.Tooltip("\n");
//--- Координаты
   m_canvas.X(x);
   m_canvas.Y(y);
//--- Размеры
   m_canvas.XSize(m_x_size);
   m_canvas.YSize(m_y_size);

//--- Отступы от крайней точки
   m_area.XGap(CElement::CalculateXGap(x));
   m_area.YGap(CElement::CalculateYGap(y));
//--- Сохраним указатель объекта
   CElementBase::AddToArray(m_area);
   return(true);
  }


Die neuesten Versionen der Bibliothek, Objekt-Koordinate Berechnung war anders. Sie müssen entweder die neuen Regeln verwenden , geben Sie Koordinaten des Objekts, oder in ihren eigenen Methoden , um die Koordinaten in der üblichen Sie neu zu berechnen .

Zum Beispiel müssen Sie:

In WndEvents.mqh im öffentlichen Bereich eine neue Methode erstellen:
   //--- Erzeugt eine Farbpalette für die Farbauswahl
   bool              CreateColorPicker(CColorPicker &color_picker, CWindow &wnd_pointer, int wnd_index,int x,int y);
Außerhalb des Körpers der Klasse erstellen Sie einen Methodenkörper:
//+------------------------------------------------------------------+
//|| Erzeugt eine Farbpalette zur Auswahl einer Farbe
//+------------------------------------------------------------------+
bool CWndEvents::CreateColorPicker(CColorPicker &color_picker, CWindow &wnd_pointer, int wnd_index, int x, int y)
  {
//--- Neuberechnung der Koordinaten
   int x_gap=x-wnd_pointer.X();
   int y_gap=y-wnd_pointer.Y();
//--- Speichern des Fensterzeigers
   color_picker.WindowPointer(wnd_pointer);
//--- Erstellen eines Elements
   if(!color_picker.CreateColorPicker(m_chart_id,m_subwin,x_gap,y_gap))
      return(false);
//--- Hinzufügen eines Zeigers auf das Element in der Basis
   CWndContainer::AddToElementsArray(wnd_index,color_picker);
   return(true);
  }
//+------------------------------------------------------------------+

Und in CProgram.mqh, erstellen Sie Ihren ColorPicker:
   //--- Farbwähler
   x=m_window_main.X2()+1;
   y=m_window_main.Y();
   if(!CreateColorPicker(m_color_picker,m_window_main,m_window_main_index,x,y))
      return(false);
Sehen Sie sich dieses Beispielan:


 
stt:
...
Ich weiß, dass Sie nicht unterstützen MQL4 Version, aber ich denke, dass MQL4 ist nicht ein Grund.
Bitte zeigen Sie Screenshots oder Videos, die das Problem zeigen, und hängen Sie Testdateien (MetaTrader 5) an die Nachricht an.
 
Artyom Trishkin:
Die neuesten Versionen der Bibliothek, Objekt-Koordinaten-Berechnung war anders. Sie müssen entweder die neuen Regeln verwenden , geben Sie Koordinaten des Objekts, oder in ihre eigenen Methoden , um die Koordinaten in der üblichen Sie neu zu berechnen .
......

Vielen Dank für das Tutorial. Ich habe überprüft und geändert Koordinatenberechnung. ColorPicker funktioniert gut in meiner Umgebung aber nur, wenn es im Hauptfenster (W_MAIN) angezeigt wird.

Könnten Sie es bitte im W_DIALOG-Fenster überprüfen?

ColorPicker in dieser Bibliothek ist ein sehr leistungsfähiges Werkzeug für die Feinabstimmung von benutzerdefinierten Farben, aber ich frage mich, ob eine einfache Farbtabelle für den täglichen Gebrauch praktischer wäre.
 
Ist es in dieser Version möglich, nach Spalten zu sortieren und Zeilen zu löschen?
 
stt:
Vielen Dank für die Anleitung. Ich habe die Koordinatenberechnung überprüft und geändert . ColorPicker funktioniert gut in meiner Umgebung aber nur wenn es im Hauptfenster (W_MAIN) angezeigt wird.

Könnten Sie es bitte im W_DIALOG-Fenster überprüfen?

ColorPicker in dieser Bibliothek ist ein sehr leistungsfähiges Werkzeug für die Feinabstimmung von benutzerdefinierten Farben, aber ich frage mich, ob eine einfache Farbtabelle für den täglichen Gebrauch praktischer wäre.
Bitte. Sehen Sie sich das an:

 
dantetemp:
Vielen Dank für Ihre Arbeit!!! Ist das Sortieren nach Spalten und das Löschen von Zeilen in dieser Version möglich?
Noch nicht. Aber es wird bald möglich sein.
 
dantetemp:
Vielen Dank für Ihre Arbeit!!! Ist es in dieser Version möglich, nach Spalten zu sortieren und Zeilen zu löschen?
@dantetemp, das ist bereits möglich. Laden Sie die neueste Version der Bibliothek aus diesem Artikel herunter: Graphical Interfaces X: Sorting, Table Reconstruction and Cell Controls (build 11)
 

Guten Tag! Ich habe die folgende Frage: Es gibt ein Eingabefeld SpinEdit:

bool CProgram::CreateSpinEdit_TradingLot(const string text)
{
//--- Speichern des Fensterzeigers
   m_spin_edit_Trading_lot.WindowPointer(m_window);
   m_tabs.AddToElementsArray(1,m_spin_edit_Trading_lot);
//--- Koordinaten
   int x=m_window.X()+SPINEDIT14_GAP_X;
   int y=m_window.Y()+SPINEDIT14_GAP_Y;
//--- Wert
   double v=(m_spin_edit_Trading_lot.GetValue()==WRONG_VALUE) ? 0.01 : m_spin_edit_Trading_lot.GetValue();
//--- Eigenschaften vor der Erstellung festlegen
   m_spin_edit_Trading_lot.XSize(90);
   m_spin_edit_Trading_lot.YSize(18);
   m_spin_edit_Trading_lot.EditXSize(50);
   m_spin_edit_Trading_lot.MaxValue(100);
   m_spin_edit_Trading_lot.MinValue(0.01);
   m_spin_edit_Trading_lot.StepValue(0.01);
   m_spin_edit_Trading_lot.SetDigits(2);
   m_spin_edit_Trading_lot.SetValue(v);
   m_spin_edit_Trading_lot.ResetMode(false);
   m_spin_edit_Trading_lot.AreaColor(clrWhite);
//--- Ein Steuerelement erstellen
   if(!m_spin_edit_Trading_lot.CreateSpinEdit(m_chart_id,m_subwin,text,x,y))
      return(false);
//--- Hinzufügen des Objekts zu dem gemeinsamen Array von Objektgruppen
   CWndContainer::AddToElementsArray(0,m_spin_edit_Trading_lot);
   return(true);
}


Es gibt einen Eventhandler:

void CProgram::OnEventSpinEdit_TradingLot(void)
{
   TradingLot = m_spin_edit_Trading_lot.GetValue();
   Print("TradingLot = " + NormalizeDouble(TradingLot,2));
}

Und auch nach der Funktion NormalizeDouble erhalte ich solche Werte, wenn ich auf das Inkrement/Dekrement rechts neben dem Eingabefeld klicke:


Bei der Eingabe über die Tastatur ist alles korrekt.

Was kann der Grund sein?