MQL5 v1.48: Schaltflaechen links zum Ein-/Ausblenden der Objektgruppen

User-Wunsch. 13 OBJ_BUTTON am linken Chartrand, Klick ueber OnChartEvent:
S/R, Zonen, Kanal, Liq, LiqTr, EqH/L, Box, Kegel, Pfeile, Muster, Meldung,
Kurs, Trades. Gruen = an, grau = aus.

EIGENER PRAEFIX BPFX="SRBTN_": Redraw() ruft bei jedem Datei-Update
ObjectsDeleteAll(0, PFX) - unter PFX waeren die Knoepfe sofort wieder weg.
Nachgerechnet statt angenommen: "SRBTN_" beginnt NICHT mit "SRB_" (viertes
Zeichen T gegen _), die Praefix-Loeschung greift also nicht.

g_last wird beim Klick zurueckgesetzt: Redraw() steigt bei unveraendertem
Dateiinhalt sofort wieder aus, ohne den Reset waere das Umschalten erst beim
naechsten CSV-Update sichtbar und der Knopf saehe tot aus.

Voreinstellung UNTEN links, weil oben links der Meldungs-Stapel (MS;) steht.
InpBtnOben=true stellt um; die Stapelrichtung dreht mit, damit der erste Knopf
immer oben steht (bei CORNER_LEFT_LOWER waechst YDISTANCE nach oben).

Zustand je Symbol UND Periode in einer GlobalVariable - ueberlebt Neustart und
Zeitebenen-Wechsel und hat Vorrang vor der Eingabe. Die InpShow*-Eingaben
bleiben die Voreinstellung; Vis(i) ist danach die einzige Quelle fuer alle
Zeichen-Zweige.

OBJPROP_STATE bleibt immer false, sonst bliebe der Knopf optisch gedrueckt
haengen. BtnDraw() laeuft auch im Timer (Fenstergroesse, von Hand geloeschte
Objekte).

Neu ist, dass die S/R-Linien ueberhaupt abschaltbar sind - sie waren als
einzige Gruppe fest verdrahtet.

0 errors 0 warnings, Spiegel bitgleich, statisch geprueft: 13 Vis()-Guards,
genau ein OnChartEvent, keine Praefix-Kollision. Das Klick-Verhalten selbst ist
NICHT verifiziert - dafuer braucht es einen echten Klick im Chart.
This commit is contained in:
Axel Hocks
2026-08-21 16:04:10 +02:00
parent 72c2aedc1a
commit 911d5220b9
2 changed files with 228 additions and 16 deletions
+64
View File
@@ -9564,3 +9564,67 @@ stimmen; der Dreiecks-Apex landet korrekt in der Zukunft.
CSV-Zeile
`PT;M5;Doppeltop;bear;87.384;86.814;dreieck;1787327400;87.954;1787328000;87.384;1787330100;87.914`.
Abschaltbar wie bisher `InpShowMuster=false`; Füllfarbe `InpMusterFill`.
## ✅ SCHALTFLÄCHEN LINKS IM MT5-CHART (2026-08-21, v1.48)
User-Wunsch: die einzelnen Objektgruppen im Chart von Hand ein- und ausblenden.
**13 Knöpfe** (`OBJ_BUTTON`) am linken Rand, Klick über `OnChartEvent`:
`S/R · Zonen · Kanal · Liq · LiqTr · EqH/L · Box · Kegel · Pfeile · Muster ·
Meldung · Kurs · Trades`
Grün = an (mit `*`), grau = aus. Eingaben: `InpShowButtons` ·
`InpBtnOben` (Voreinstellung **unten** links) · `InpBtnX/Y` · `InpBtnBreite/Hoehe` ·
`InpBtnFont` · `InpBtnAnFarbe`/`InpBtnAusFarbe`.
⚠⚠ **EIGENER PRÄFIX — sonst wären die Knöpfe sofort wieder weg.** `Redraw()`
ruft bei jedem Datei-Update `ObjectsDeleteAll(0, PFX)`. Die Knöpfe liegen
deshalb unter **`BPFX = "SRBTN_"`** und werden nur in `OnDeinit` aufgeräumt.
✅ Geprüft, dass das wirklich trennt: `"SRBTN_"` beginnt **nicht** mit `"SRB_"`
(viertes Zeichen `T` gegen `_`) — die Präfix-Löschung greift also nicht. Das ist
knapp und war der erste Punkt, den ich nachgerechnet statt angenommen habe.
⚠⚠ **`g_last` MUSS beim Klick zurückgesetzt werden.** `Redraw()` steigt bei
unverändertem Dateiinhalt sofort wieder aus (`if(content == g_last) return;`) —
ohne den Reset würde ein Umschalten erst beim nächsten CSV-Update sichtbar, bis
zu Sekunden später. Es sähe aus, als reagiere der Knopf nicht.
**Voreinstellung UNTEN links**, weil oben links der Meldungs-Stapel (`MS;`)
steht — dort wären die Knöpfe eine Überdeckung. `InpBtnOben=true` stellt um; die
Stapelrichtung dreht dabei mit, damit der erste Knopf **immer oben** steht (bei
`CORNER_LEFT_LOWER` wächst `YDISTANCE` nach oben, die Liste liefe sonst verkehrt
herum).
**Der Zustand überlebt Neustart und Zeitebenen-Wechsel**: er liegt je Symbol
UND Periode in einer `GlobalVariable` (`SRB_<sym>_<period>_<key>`) und hat
Vorrang vor der Eingabe. Ohne das wäre jeder Chart-Wechsel ein Zurücksetzen von
dreizehn Knöpfen.
⚠ Die `InpShow*`-Eingaben bleiben die **Voreinstellung**; der Knopf ist danach
die Autorität. `Vis(i)` ist die **einzige** Quelle für alle Zeichen-Zweige — ein
zweiter Pfad wäre genau die Divergenz, die in diesem Projekt mehrfach
zugeschlagen hat.
**`OBJPROP_STATE` bleibt immer `false`**: sonst bliebe der Knopf optisch
„gedrückt" hängen und arbeitete gegen die Hintergrundfarbe.
**`BtnDraw()` läuft auch im Timer** — das Chart-Fenster kann seine Größe
ändern, und ein von Hand gelöschtes Objekt baut sich so wieder auf.
✅ Neu ist, dass die **S/R-Linien überhaupt abschaltbar** sind — sie waren als
einzige Gruppe fest verdrahtet.
✅ Kompiliert ins richtige Terminal, `0 errors, 0 warnings`, Spiegel
`mql5/SR_Levels.mq5` bitgleich. Statisch geprüft: 13 `Vis()`-Guards, genau ein
`OnChartEvent`, keine Präfix-Kollision.
**NICHT verifiziert ist das Klick-Verhalten selbst** — dafür braucht es einen
echten Klick im Chart. Compile und Verdrahtung sind belegt, die Wirkung nicht.
⚠⚠ **BEIM SCHREIBEN DIESES ABSCHNITTS EIN NEUER FALL DER SCHREIB-FALLE — und
die Größenprüfung hat ihn NICHT gefangen.** Der Doku-Patch wandelte `\n` nach
`\r\n` auf dem **gesamten** Dokument statt nur auf dem angehängten Block. Die
bereits vorhandenen `\r\n` wurden dadurch zu **`\r\r\n`** — 9.567 Zeilen,
+9,5 KB. Die Datei wuchs also, die Prüfung `neu > alt` war zufrieden.
✅ Aufgefallen nur, weil die Zunahme (12,5 KB) nicht zum geschriebenen Text
(~3 KB) passte; repariert durch `\r\r\n``\r\n`, kein Inhalt verloren.
**➜ Regel: die Zeilenenden-Umwandlung IMMER nur auf den neuen Text anwenden,
nie auf das eingelesene Dokument.** Und: **eine Größenprüfung belegt nur, dass
nichts abgeschnitten wurde — nicht, dass der Inhalt stimmt** (dieselbe Klasse
wie „eine LEERE Datei besteht `node --check`"). Wo es billig ist, gehört die
erwartete Zunahme mitgeprüft, nicht nur ihr Vorzeichen.