Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

Un cadre paramétrable pour l'affichage des infos

  • furynick

    Tous ceux qui programment connaissent certainement la fonction Comment() qui permet d'afficher quelques informations directement sur le graphique et je ne doute pas que bon nombre d'entre vous ont pesté contre l'illisibilité de ces informations lorsque le cours et les indicateurs viennent s'afficher derrière.

    Pour éviter ce problème et avoir un affichage clair quelle que soit la situation voici une fonction qui vous sera utile :

    Code
    //+------------------------------------------------------------------+ //| Panel drawing function | //+------------------------------------------------------------------+ void drawPanel(int panelWidth = 1, int panelHeight = 2, int panelTop = 10, int panelLeft = 10, color bg = 0x101010, color shade = DimGray, color bright = Silver) { //---- string name; int h, w; ObjectsDeleteAll(0); name = "0PANEL"; ObjectCreate(name, OBJ_LABEL, 0, 0, 0.0); ObjectSetText(name, "n", 4, "Wingdings", shade); // plain square ObjectSet(name, OBJPROP_CORNER, 0); ObjectSet(name, OBJPROP_XDISTANCE, panelLeft + 4); ObjectSet(name, OBJPROP_YDISTANCE, panelTop + 13); // */ for (h = 0; h < panelHeight; h++) { name = "0PANEL"+w+"_"+h; ObjectCreate(name, OBJ_LABEL, 0, 0, 0.0); ObjectSetText(name, "n", 48, "Wingdings", shade); // plain square ObjectSet(name, OBJPROP_CORNER, 0); ObjectSet(name, OBJPROP_XDISTANCE, 0 * 36 + panelLeft - 1); ObjectSet(name, OBJPROP_YDISTANCE, h * 37 + panelTop + 1); } for (w = 0; w < panelWidth; w++) { name = "0PANEL"+w+"_"+h; ObjectCreate(name, OBJ_LABEL, 0, 0, 0.0); ObjectSetText(name, "n", 48, "Wingdings", shade); // plain square ObjectSet(name, OBJPROP_CORNER, 0); ObjectSet(name, OBJPROP_XDISTANCE, w * 36 + panelLeft + 1); ObjectSet(name, OBJPROP_YDISTANCE, 0 * 37 + panelTop - 1); } w--; for (h = 0; h < panelHeight; h++) { name = "1PANEL"+w+"_"+h; ObjectCreate(name, OBJ_LABEL, 0, 0, 0.0); ObjectSetText(name, "n", 48, "Wingdings", bright); // plain square ObjectSet(name, OBJPROP_CORNER, 0); ObjectSet(name, OBJPROP_XDISTANCE, w * 36 + panelLeft + 1); ObjectSet(name, OBJPROP_YDISTANCE, h * 37 + panelTop + 1); } h--; for (w = 0; w < panelWidth; w++) { name = "1PANEL"+w+"_"+h; ObjectCreate(name, OBJ_LABEL, 0, 0, 0.0); ObjectSetText(name, "n", 48, "Wingdings", bright); // plain square ObjectSet(name, OBJPROP_CORNER, 0); ObjectSet(name, OBJPROP_XDISTANCE, w * 36 + panelLeft + 1); ObjectSet(name, OBJPROP_YDISTANCE, h * 37 + panelTop + 1); } for (h = 0; h < panelHeight; h++) for (w = 0; w < panelWidth; w++) { name = "2PANEL"+w+"_"+h; ObjectCreate(name, OBJ_LABEL, 0, 0, 0.0); ObjectSetText(name, "n", 48, "Wingdings", bg); // plain square ObjectSet(name, OBJPROP_CORNER, 0); ObjectSet(name, OBJPROP_XDISTANCE, w * 36 + panelLeft); ObjectSet(name, OBJPROP_YDISTANCE, h * 37 + panelTop); } //---- }
  • babs

    Merci beaucoup, car j'ai toujours eu la flemme de le faire ;)
  • furynick

    Dans le même genre, l'affichage d'un texte, si la 2ème couleur est spécifiée elle sera utilisée pour construire un ombrage au texte.


    Code
    //+------------------------------------------------------------------+ //| Text drawing function with optional shade | //+------------------------------------------------------------------+ void drawTextAt(int x, int y, string name, string text, int size = 10, string font = "Verdana", color col = White, color shade = EMPTY) { string shadeName = StringConcatenate("_", name, "_"); if (shade != EMPTY) { if (ObjectFind(shadeName) == -1) ObjectCreate(shadeName, OBJ_LABEL, 0, 0, 0.0); ObjectSetText(shadeName, text, size, font, shade); ObjectSet(shadeName, OBJPROP_CORNER, 0); ObjectSet(shadeName, OBJPROP_XDISTANCE, x + 1); ObjectSet(shadeName, OBJPROP_YDISTANCE, y + 1); } if (ObjectFind(name) == -1) ObjectCreate(name, OBJ_LABEL, 0, 0, 0.0); ObjectSetText(name, text, size, font, col); ObjectSet(name, OBJPROP_CORNER, 0); ObjectSet(name, OBJPROP_XDISTANCE, x); ObjectSet(name, OBJPROP_YDISTANCE, y); }
  • furynick

    Voilà ce que ça donne avec quelques lignes de programme :
    Code
    //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { int pTop = 8; int pLeft = 12; int pWidth = 8; int pHeight = 12; string fnTitle = "BankGothic Lt BT"; string fnVersion = "Arial Narrow"; string ver = "1.0 alpha"; drawPanel(pWidth, pHeight, pTop, pLeft); drawTextAt(pLeft + 80, pTop + 15, "Title", "Saint Graal", 14, fnTitle, Silver, DimGray); drawTextAt(pLeft + 220, pTop + 22, "Version", ver, 6, fnVersion, DarkOrange); drawTextAt(pLeft + 18, pTop + 20, "Underline", "_____________________________", 12, "Arial", Silver); drawTextAt(pLeft + 22, pTop + 48, "Gains", "Gains"); drawTextAt(pLeft + 32, pTop + 62, "GainsEnCours", "période en cours", 8); drawTextAt(pLeft + 32, pTop + 74, "GainsMoisPrec", "mois précédent", 8); drawTextAt(pLeft + 32, pTop + 86, "GainsTotal", "depuis le début", 8); return(0); }
    furynick a joint une image
    G3994EC
  • NYKOES

    Ah oui ça a de la gueule dis donc ! :)

    Surtout le nom de l'EA ! ahahah, si les chevaliers du Roi Arthur avait su qu'il y avait eu une version alpha du Graal !!! (lol)

    Sinon, merci pour ce code, formidable !!
  • furynick

    Le Saint Graal est aussi dans les cartons ... mais comme je suis overbooké j'ai pas trop le temps de m'en occuper :D
  • NYKOES

    Bon et bien lorsque tu auras codé la "coupe des coupes", pense à nous ;)
  • Lorka85

    merci a toi fury, il me sera utile. car justement je galéré avec les label, car je trouve que la fonction comment affiche trop petit, la tu semble avoir trouvé un bon compromis.
  • furynick

    Yep, je n'y manquerai pas ;)