AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PaintBox.Paint startet immer wieder neu

Ein Thema von SteffenSchm · begonnen am 29. Apr 2021 · letzter Beitrag vom 30. Apr 2021
Antwort Antwort
Seite 1 von 3  1 23      
SteffenSchm

Registriert seit: 2. Nov 2004
Ort: Herzogenaurach
84 Beiträge
 
Delphi 10.3 Rio
 
#1

PaintBox.Paint startet immer wieder neu

  Alt 29. Apr 2021, 13:19
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
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.476 Beiträge
 
Delphi 12 Athens
 
#2

AW: PaintBox.Paint startet immer wieder neu

  Alt 29. Apr 2021, 13:21
Kannst du das mit einem einfachen Beispielprogramm reproduzieren?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
SteffenSchm

Registriert seit: 2. Nov 2004
Ort: Herzogenaurach
84 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: PaintBox.Paint startet immer wieder neu

  Alt 29. Apr 2021, 13:35
Muss ich mal versuchen.
Alles drumherum rausschmeissen und nur das Problem übrig lassen - Ich melde mich!
Steffen
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: PaintBox.Paint startet immer wieder neu

  Alt 29. Apr 2021, 14:05
Hallo,
warum benutzt du nicht Invalidate bzw. InvalidateRect?

Das Paint wird ja auch Windows selbst aufgerufen.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: PaintBox.Paint startet immer wieder neu

  Alt 29. Apr 2021, 14:54
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)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: PaintBox.Paint startet immer wieder neu

  Alt 29. Apr 2021, 14:55
PaintBox in ein Panel, Panel caption = 'painting...', PaintBox visible = false, wenn fertig visible = true ?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: PaintBox.Paint startet immer wieder neu

  Alt 29. Apr 2021, 15:07
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)
$2B or not $2B

Geändert von himitsu (29. Apr 2021 um 15:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: PaintBox.Paint startet immer wieder neu

  Alt 29. Apr 2021, 15:27
Mist War ein Versuch wert
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
SteffenSchm

Registriert seit: 2. Nov 2004
Ort: Herzogenaurach
84 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: PaintBox.Paint startet immer wieder neu

  Alt 29. Apr 2021, 17:22
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?
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

AW: PaintBox.Paint startet immer wieder neu

  Alt 29. Apr 2021, 17:32
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.
$2B or not $2B

Geändert von himitsu (29. Apr 2021 um 17:36 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 Uhr.
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