Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 5 > Programmierung MQL5

Programmierung MQL5 Hier gehts rund ums Programmieren in MQL5.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36916
Benutzer: 6.083
Aktive Benutzer: 494
Links: 80
Wir begrüßen unseren neuesten Benutzer: Wombat
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 9 Stunden
- Wombat
vor einem Tag
- idur
vor einem Tag
- DarthTrade...
vor einem Tag
- Eren
vor 2 Tagen
- Rene1504

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 51
Gesamt: 54
Team: 0
Team:  
Benutzer:  Domke01, JJ-FX, meinereiner
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 21.04.16
Mitglied
 
Registriert seit: Aug 2014
Beiträge: 46
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.
  #2 (permalink)  
Alt 22.04.16
Mitglied
 
Registriert seit: Aug 2014
Beiträge: 46
marquez befindet sich auf einem aufstrebenden Ast
Standard

Hab es jetzt selbst über umwege gelöst bekommen.



ALSO:

CLOSED

Finde hier leider keinen EDIT Button, oder keine andere Möglichkeit es als closed zu markieren.
  #3 (permalink)  
Alt 22.04.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von marquez Beitrag anzeigen
Hab es jetzt selbst über umwege gelöst bekommen.



ALSO:

CLOSED

Finde hier leider keinen EDIT Button, oder keine andere Möglichkeit es als closed zu markieren.
Wäre doch schön, wenn Du uns über die Umwege berichten würdest.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #4 (permalink)  
Alt 23.04.16
Mitglied
 
Registriert seit: Aug 2014
Beiträge: 46
marquez befindet sich auf einem aufstrebenden Ast
Standard

Guten morgen,

die / der Umweg(e) sah so aus, dass ich gezwungen war eine eigene Klasse zu erstellen. Als Basis habe ich die "IconButton.mqh" gewählt und angepasst.

Diese Klasse hat dann alles bekommen, was ich für mich gebraucht hatte. Dann noch einfach in die "WndContainer.mqh" includieren und vorarbeit war fertig.

Der Einfachheit halber habe ich meine Klasse "MyCLabel" genannt. Somit habe ich dann in dem Schnipsel #1 meines Postings nur noch die Zeile ändern müssen von:

CLabel m_label_text1;
in
MYCLabel m_label_text1;


P.S. aber ehrlich gesagt finde ich das schon komisch, wenn nicht sogar sch... , wenn die Beispiele von der MQL Seite bei den ganzen Code beispielen zwar gleiche Dateinamen (also Klassen) haben, die dann aber im Quellcode teilweise massiv differieren. Ich dachte eigentlich man nutzt Basisklassen und wenn was nicht reicht, dann erweitert man Klassen per Extend, oder schreibt eigene. Aber sowas ... nä nä nä ...

Sowas bin ich von anderen Sprachen ehrlich gesagt nicht gewohnt. Da sind die Basisklassen gleich. Egal ob man Bsp. 1 oder Bsp 99 anschaut. Es wird dort Lehrbuchmässig erweitert, und nicht sozusagen auf "Core" ebene rumgebastelt.
  #5 (permalink)  
Alt 23.04.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das werden dann wohl eher Klassen sein, die vererbt wurden und dann auch beliebig andere Namen tragen können.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #6 (permalink)  
Alt 26.04.16
Mitglied
 
Registriert seit: Aug 2014
Beiträge: 46
marquez befindet sich auf einem aufstrebenden Ast
Standard

Hi,

das weiß ich nicht. Dafür bin ich nicht so der OOP Profi.

Ich möchte aber hier noch ganz kurz das Beispiel von der MQL Seite aufgreifen, jedoch kein Crosspost in MQL4 oder neuen Post dort machen.

Wenn ich das Teslibrary 1 compiliere und laufen lasse, führt dort jeder Klick zu einem Doppelten Aufruf, also der Print wird jedesmal doppelt aufgerufen aus der onevent funktion.
Gibts da evtl. ne quick´n´dirty solution für ? Bei MQL5 läuft das ja problemlos, und die Routinen scheinen identisch zu sein. Muss die Abfrage anders beim MT4 erfolgen ?

Thx nochmal an dieser Stelle.

P.S. die OnEvent Funktion sieht wie folgt aus, bei MQL4 & 5

Code:
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- Menu item click event
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_CONTEXTMENU_ITEM)
     {
      ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam);
     }
//--- Button click event
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_BUTTON)
     {
      ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam);
      //---
      if(sparam==m_simple_button3.Text())
        {
         if(m_simple_button3.IsPressed())
            m_simple_button1.ButtonState(false);
         else
            m_simple_button1.ButtonState(true);
        }
      //---
      if(sparam==m_icon_button2.Text())
        {
         if(m_icon_button2.IsPressed())
           {
            m_icon_button1.ButtonState(true);
            m_icon_button4.ButtonState(true);
           }
         else
           {
            m_icon_button1.ButtonState(false);
            m_icon_button4.ButtonState(false);
           }
        }
     }
  }
Thema geschlossen

Lesezeichen

Stichworte
graphic, graphic panels, mql5, panel, programmierung, programmierung metatrader, window


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------