Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 21.04.16
marquez marquez ist offline
Mitglied
 
Registriert seit: Aug 2014
Beiträge: 47
marquez befindet sich auf einem aufstrebenden Ast
Question Brett vorm Kopf - Graphics Panel programmierung

Hallo Leute,

ich hänge seit einiger Zeit bei der programmierung eines Graphic Panels rum.

Ich habe mich an die Anleitung gehalten hier Artikel MQL5

Habe bei TestLibrary01 ein wenig programmiert, und wollte eigentlich "nur noch" per CLabel einen Label includieren und darstellen in dem Panel. Also nur einen ganz simplen Text, der angezeigt wird im Panel und beim verschieben vom Fenster mit wandert.

Meine Schnipsel sehen so aus (Program..mqh):
Code:
   //--- Split buttons
   CSplitButton      m_split_button1;
   CSplitButton      m_split_button2;
   CSplitButton      m_split_button3;
   CSplitButton      m_split_button4;
   
   CLabel            m_label_text1;
Code:
#define SPLITBUTTON4_GAP_X       (128)
#define SPLITBUTTON4_GAP_Y       (250)
   bool              CreateSplitButton4(const string text);
   
#define TEXTFIELD_GAP_X          (128)
#define TEXTFIELD_GAP_Y          (200)   
   bool              CreateText(const string text_field);
  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
Code:
   m_split_button4.ButtonState(true);
//--- Add the element pointer to the base
   CWndContainer::AddToElementsArray(0,m_split_button4);
   return(true);
  }

//+------------------------------------------------------------------+
//| Create text                                                      |
//+------------------------------------------------------------------+
bool CProgram::CreateText(const string text_field)
{
   int x=m_window.X()+TEXTFIELD_GAP_X;
   int y=m_window.Y()+TEXTFIELD_GAP_Y;
   int x2=0;
   int y2=0;

   Variante a:   
   bool created_text = m_label_text1.Create(para1,para2,para3,para4,para5); <-- Akzeptiert nur 5 Parameter Werte exemplarisch !!
   
   Variante b:
   bool created_text = m_label_text1.Create(m_chart_id,text_field,m_subwin,x,y,0,0); <-- GEHT NICHT, DA NORMALERWEISE 7 PARAMETER ÜBERGEBEN WERDEN MÜSSTEN !
   
   if(!created_text ) return (false);
   m_label_text1.Text("TEXT"); <-- geht nicht aufrufen, weil .Text kein Member ist !

   return(true);
}
//+------------------------------------------------------------------+

Den zweizeiler mit dem Aufruf von CreateText im CProgram::CreateTradePanel spare ich mir hier wohl zu posten.


Und hier nun zu meiner Frage:

Kann mir jemand helfen das Problem genauer zu verstehen ? Ich bin zwar nicht so Fit in OOP programmierung, habe mir aber sagen lassen, dass die Einbindung von CLabel wie oben geschehen richtig sei, und man somit auf die Funktionen aus der "label.mqh" zugreifen können soll.

Da aber bereits bei m_label_text1.Create nur 5 Parameter zugelassen werden, scheint es mir, als würde das Create nicht auf die label.mqh zugreifen, sondern sich das .Create woanders her holen. Habe diesbezüglich in der Label.mqh nachgesehen, und dort werden 7 Parameter erwartet.


Versuche ich als Bsp. in der Program.mqh noch die "Label.mqh" zu includen, erhalte ich beim compilieren einen Fehler "CLabel struct or class already defined", Member function already defined usw.


Ich wäre also zu tiefst dankbar, wenn mir jemand einen für mich nachvollziehbaren Ansatz liefern könnte um das gelöst zu bekommen.

Wie gesagt, ich habe mich an dieser TestLibrary01 gehalten, und lediglich entsprechend obige Änderungen gemacht.

Tausend Dank im Voraus für Eure Hilfe.