Zeichnen in scrollBoxed PaintBox
-
hi leute
also ich habe eine ScrollBox und eine wesentlich größere PaintBox drin enthalten.
Nun möchte ich an die linke obere Ecke (der ScrollBox ) eine Art Legende zeichnen, die immer sichtbar ist, egal wo die PaintBox hingescrolled wird.
Da dachte ich mir ich mach das so:
Graph->Canvas->Pen->Color = idkt.Col; Graph->Canvas->MoveTo( GraphScroll->HorzScrollBar->Position + 40, i * 15 + 5); Graph->Canvas->LineTo( GraphScroll->HorzScrollBar->Position + 60, i * 15 + 5);
D.h. ich addiere die ScrollBarPosition zum X-Wert ( Y würde dann natürlich analog laufen, ist aber noch nicht implementiert ).
Das funktioniert, solange man die ScrollBar durch klicken irgendwo hin schickt. Wenn man aber den ScrollBalken "zieht / schiebt" dann verschleift die Legende und ist an mehreren Stellen (entsprechend Scrollrichtung) sichtbar.
Ich mache vor jedem Zeichnen der Legende ein komplettes FillRect über die PaintBox, aber das hilft nicht.Wie krieg ich das hin, dass bei manueller Veränderung der ScrollbarPosition oder durch "schieben" des Balkens die Legende trotzdem korrekt gezeichnet wird?
Oder hat jemand ne andere Idee? (maybe ne transparente PaintBox? )
-
Verwende mal statt 'Position' die Eigenschaft 'ScrollPos' - evtl. löst das schon dein Problem.
Alternativ könntest du auch Tracking auf 'false' setzen, so daß erst beim Loslassen der ScrollBar neu gezeichnet wird.
Und wenn das alles nichts hilft, dann erzeuge doch einfach eine separate PaintBox (über der bisherigen), in der du dann die Legende anzeigst.P.S. PaintBoxen sind generell transparent, d.h. ein FillRect solltest du nur ausführen, wenn du auch wirklich die Hintergrundfarbe ändern willst.
-
Also ScrollPos hab ich getestet, macht aber keinen Unterschied zu Position.
Tracking ausschalten bringts nur teilweise. Ich habe nämlich noch eine andere Scrollmöglichkeit aus "MouseDown" und "MouseMove" gebaut, die manuell die ScrollPosition verändert und dadurch auch Scrolled.
Ich werd mal die transparente Paintbox testen. Falls jemand noch ne bessere Idee hat: Ich bin offen für alles