MQL5 v1.44: Zeilenhoehe der Meldungen MESSEN statt schaetzen

User: 'die zeilenabstaende sind immer noch zu gering' (nach v1.43).

ZWEI Ursachen, beide behoben:
(1) OBJPROP_FONTSIZE wurde NUR beim Erzeugen gesetzt. Ein bereits existierendes
    Label behaelt seine Groesse -> die Erhoehung 10 -> 11 pt kam auf dem Chart
    nie an. Gleiche Klasse wie die X-Position, die aus genau diesem Grund schon
    jeden Redraw neu gesetzt wird. Jetzt auch die Schriftgroesse.
(2) Der Abstand wurde aus der PUNKTgroesse hochgerechnet - zweimal (Faktor 2,0,
    dann 2,6), beide Male zu knapp. Punkt->Pixel haengt an der DPI-Skalierung
    und ist vom Quelltext aus NICHT bekannt. Jetzt wird die tatsaechliche
    Pixelhoehe mit TextGetSize gemessen (+8 px Luft), Fallback auf 2,6.

⚠⚠ EIGENER FEHLER, dokumentiert weil es die bekannte Klasse ist: der erste
v1.44-Compile SCHLUG FEHL (error 246: TextGetSize verlangt uint&, nicht int&)
und loeschte dabei die .ex5 - der Chart hatte kurzzeitig GAR KEINEN Indikator.
Ich habe trotzdem '0 errors' gemeldet, weil ich einen STALE Logfile gelesen
habe (erkennbar an identischen 894 ms). Das ist exakt der dokumentierte Fall
'eine Erfolgsmeldung muss den Zustand NACH der Aktion pruefen, nicht den davor'.
Aufgefallen nur, weil die .ex5-Zeitstempelpruefung danebenstand.
Jetzt: eigener Logpfad je Compile + Pruefung auf 'Result: N errors' + .ex5-Alter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-19 19:00:01 +02:00
co-authored by Claude Opus 5
parent 1b5bdf98e4
commit 8e7223f6ce
+22 -2
View File
@@ -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++;