Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   PaintBox.Paint startet immer wieder neu (https://www.delphipraxis.net/207754-paintbox-paint-startet-immer-wieder-neu.html)

SteffenSchm 29. Apr 2021 12:19

PaintBox.Paint startet immer wieder neu
 
Hallo,

ich habe folgendes aktuelle Problem:

Im Hauptfenster meine Programms wird eine PaintBox angezeigt, welche in der Methode PaintBox.Paint neu gezeichnet wird. Das klappte bisher sehr gut (ist ja auch nichts besonderes). In einer aktuellen Anwendung des Programms soll jetzt aber eine sehr große Anzahl von Polylines dargestellt werden. Dies dauert lange, so dass man beim Aufbau des Bildes zuschauen kann. Nicht schön - wäre aber auch kein Problem.

Das Problem ist, dass die Zeichnung nie fertiggestellt wird. Nach einigen Sekunden wird das Bild jeweils verworfen und der Aufbau beginnt von vorn.

Kann mir jemand erklären, woran das liegt bzw. wie man das verhindern kann?

Besten dank im voraus!
Steffen

Uwe Raabe 29. Apr 2021 12:21

AW: PaintBox.Paint startet immer wieder neu
 
Kannst du das mit einem einfachen Beispielprogramm reproduzieren?

SteffenSchm 29. Apr 2021 12:35

AW: PaintBox.Paint startet immer wieder neu
 
Muss ich mal versuchen.
Alles drumherum rausschmeissen und nur das Problem übrig lassen - Ich melde mich!

hoika 29. Apr 2021 13:05

AW: PaintBox.Paint startet immer wieder neu
 
Hallo,
warum benutzt du nicht Invalidate bzw. InvalidateRect?

Das Paint wird ja auch Windows selbst aufgerufen.

himitsu 29. Apr 2021 13:54

AW: PaintBox.Paint startet immer wieder neu
 
gab es nicht einen "lock"-Befehl (an PaintBox oder eher am Canvas), mit dem du vor/während deinem Zeichnen die Ereignisse der Paitbox deaktivieren kannst, damit es beim Zeichnen nicht neu startet?

Ansonsten bleibt noch die Möglichkeit in ein Bitmap zu zeichnen und jenes dann im OnPaint anzuzeigen.
Und statt .Paint besser ein Refresh bzw. Invalidate aufrufen.
(alternativ ein TImage)

KodeZwerg 29. Apr 2021 13:55

AW: PaintBox.Paint startet immer wieder neu
 
PaintBox in ein Panel, Panel caption = 'painting...', PaintBox visible = false, wenn fertig visible = true ?

himitsu 29. Apr 2021 14:07

AW: PaintBox.Paint startet immer wieder neu
 
Nein.
TPaintBox hat keinen Speicher, es muß also sichtbar bleiben, sonst ist das Gemalte weg und beim nächsten Show/OnPaint wird neu gezeichnet.
Bloß was auf den sichtbaren Canvas gemalt wird, das ist auch sichtbar.

(aber gerade das ist auch ein Vorteil, z.B. gegenüber TImage ... wenn schnell genug gezeichnet werden kann, dann fällt quasi der Cache/Hintergrundbitmap/DoubleBuffered/... weg und Zeichenoperationen landen direkt in der Anzeige, ohne Umwege)

KodeZwerg 29. Apr 2021 14:27

AW: PaintBox.Paint startet immer wieder neu
 
Zitat:

Zitat von himitsu (Beitrag 1488184)
Nein.

Mist :) War ein Versuch wert

SteffenSchm 29. Apr 2021 16:22

AW: PaintBox.Paint startet immer wieder neu
 
Ich habe das Programm jetzt mit Debugger laufen lassen und dabei tritt das Problem nicht auf.
Kann es sein, dass ich innerhalb der langen Schleife in der Methode PaintBox.Paint die Steuerung mal an das Programm zurückgeben muss?

himitsu 29. Apr 2021 16:32

AW: PaintBox.Paint startet immer wieder neu
 
Nein,
jedenfalls nicht wenn du die Aktualisierung der PaintBox/Canvas während des Zeichnens nicht deaktivierst.

Sonst kann es passieren, dass mitten in deinem OnPaint ein neues OnPaint ausgelöst wird und du in einer Endlosschleife landen könntest.


Wie gesagt ihr hättet die Wahl auf ein TBitmap zu zeichnen und anschließend ein Invalidate/Refresh der PaintBox auszulösen. (bzw. im OnChange des Bitmap das Invalidate der PaintBox auslösen)
Die PaintBox zeichnet dann im OnPaint dann nur noch das Bitmap.

Oder eben TImage ... arbeitet dann so ähnlich, wie grade für die PaintBox mit TBitMap beschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz