Gewöhne Dir an nur im WM_Paint zu zeichnen.
Das ist in meinen Augen einer der grössten DesignFehler von Windows das außerhalb des PaintEvents gezeichnet werden kann.
So ähnlich hatte ich es auch im ersten Ansatz programmiert. Über den Methodenzeiger
TPaintBox.OnPaint wird gezeichnet und mit einem Aufruf von
TPaintBox.Repaint wird der Inhalt aktualisiert. Wenn nur eine Darstellung benötigt wird, dann genügt dies. Es handelt sich bei dem richtigen Programm um eine Lady mittlerer Komplexität (ein Charting-Tool), siehe beigefügte Abbildung. In der oberen Leiste befinden sich 3 Auswahllisten für Finanztitel, Darstellungsbreite eines Intervalls und Variante der Darstellung. Mit den Ankreuzkästchen des offenen Menüs „Darstellungsoptionen“ lassen sich Linien in dem Diagramm ein- und ausblenden, wobei bei der Aktualisierung das Menü geöffnet bleibt. Es gibt 3 Methoden, die eine Ausgabe produzieren, und 2 davon wurden nicht über
TPaintBox.OnPaint aufgerufen. Die 3. war die
PaintBox.OnPaint selbst. Damit die beiden anderen auch von
TPaintBox.OnPaint aufgerufen werden, ist der Code dahin gehend angepasst worden, dass über das Feld
TPaintBox.Tag festgelegt wird, welche Methode innerhalb von
PaintBox.OnPaint aufgerufen werden soll. Um die Sache zum Laufen zubringen, muss dann statt
TPaintBox.Repaint tatsächlich
TPaintBox.Invalidate verwendet werden. Wenn es nur um Teilbereiche geht, dann sollte man
InvalidateRect verwenden. Eine der Routine zeichnet eine vertikale Positionsmarke in Form eines schmalen Rechteckes, die von der Mausposition abhängig ist. Diese Positionsmarke ist in der Abbildung nicht zu sehen. Für das Zeichnen einer solchen Positionsmarke hat sich gezeigt, dass die
Blitting-Methode (
BitBlT-Routine) mit dem direkten Speicherzugriff und das Zeichnen außerhalb von
TPaintBox.OnPaint besser ist. Die Darstellung über
TPaintBox.OnPaint reagiert hier zu träge, sodass man hier besser die Programmiertechnik der alten Dinosaurier verwendet. Man muss dabei dafür sorgen, dass vor der Initialisierung von
IGPGraphics die benötigten Inhalte aus den Steuerelementen ausgewertet sind.
Vielen Dank für Deinen Beitrag, der mich effektiv weiter gebracht hat.