diff --git a/mql5/SR_Levels.mq5 b/mql5/SR_Levels.mq5 index 51bc5f5..1ac54de 100644 --- a/mql5/SR_Levels.mq5 +++ b/mql5/SR_Levels.mq5 @@ -12,7 +12,7 @@ //| 4) Der Bot muss laufen (schreibt die CSV alle ~5 s). | //+------------------------------------------------------------------+ #property copyright "Oil Trading Bot" -#property version "1.43" +#property version "1.44" // v1.42 (2026-08-19): Y-Stapel oben rechts GEMESSEN statt geschaetzt. Der // Faktor 1,8 aus v1.41 war nur die naechste Schaetzung; jetzt liefert // TextGetSize die TATSAECHLICHE Pixelhoehe (LabelH). Ausserdem wird Y bei @@ -522,6 +522,21 @@ void Redraw() int nr = StringSplit(content, '\n', rows); int idx = 0; int msg_idx = 0; // Meldungs-Stapel oben links + // ⚠⚠ ZEILENHOEHE MESSEN STATT SCHAETZEN (v1.44, User: „die zeilenabstaende + // sind immer noch zu gering"). Zweimal aus der Punktgroesse hochgerechnet + // (Faktor 2,0 dann 2,6) — beide Male zu knapp, weil der Zusammenhang + // Punkt->Pixel von der DPI-Skalierung abhaengt und NICHT vom Quelltext aus + // bekannt ist. `TextGetSize` liefert die TATSAECHLICHE Pixelhoehe. + // ⚠ NEGATIVE Groesse in `TextSetFont` = Angabe in 1/10 pt, und NUR diese + // Form wird von MT5 DPI-korrekt skaliert (positive Werte nicht). + int msg_h = 0; + { + uint _tw = 0, _th = 0; // ⚠ TextGetSize verlangt uint&, nicht int& (error 246) + TextSetFont("Arial", -InpMeldungSize * 10); + if(TextGetSize("Hg", _tw, _th) && _th > 0) + msg_h = (int)_th + 8; // + Luft, sonst kleben die Zeilen + } + if(msg_h < 20) msg_h = (int)(InpMeldungSize * 2.6); // Fallback wie v1.43 // Kegel-Verkettung je Redraw zuruecksetzen (sonst haengt der Faecher am Stand // des vorherigen Durchlaufs) g_coneT = 0; g_coneLo = 0.0; g_coneHi = 0.0; g_conePx = 0.0; @@ -1043,7 +1058,12 @@ void Redraw() ObjectSetInteger(0, mn, OBJPROP_XDISTANCE, (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS) / 2); ObjectSetInteger(0, mn, OBJPROP_YDISTANCE, - InpMeldungY + msg_idx * (int)(InpMeldungSize * 2.6)); + InpMeldungY + msg_idx * msg_h); + // ⚠⚠ FONTSIZE JEDEN Redraw setzen, nicht nur beim Erzeugen (v1.44). + // Genau daran scheiterte v1.43: ein bereits existierendes Label + // behaelt seine Schriftgroesse, die Erhoehung 10 -> 11 pt kam auf + // dem Chart also nie an. Gleiche Klasse wie die X-Position darueber. + ObjectSetInteger(0, mn, OBJPROP_FONTSIZE, InpMeldungSize); ObjectSetString (0, mn, OBJPROP_TEXT, p[1]); ObjectSetInteger(0, mn, OBJPROP_COLOR, InpMeldungColor); msg_idx++;