![]() |
Komponente mit PaintBox zeichnet sich immer neu
Hi,
ich entwickele gerade eine Komponente. Diese basiert auf einem TCustomPanel auf dem eine TScrollbox liegt, und in der wiederum eine TPaintbox gezeichnet werden soll. Ziel ist es die TScrollBox etwas kleiner zu halten, als das Panel ist (es kommt noch etwas Informationen daneben), die TPaintBox aber weit größer sein kann, und dementsprechend mit der Scrollbox alle Bereiche angescrollt werden können. Die ersten einfachen Zeichnungsfunktionen sind fertig. Gezeichnet wird im TPaintBox.Paint. Wenn ich nun die Komponente auf der Form ablege, wird die Paintbox ständig neu gezeichnet. Viel mehr mache ich aber noch gar nicht, außer dass ich bei den Properties der Komponente und im Resize ein Invalidate drin habe. Woran kann das liegen, bzw. wie muss ich es mache, damit die PaintBox.Paint nur aufgerufen wird, wenn auch wirklich neu gezeichnet werden muss. |
AW: Komponente mit PaintBox zeichnet sich immer neu
Du musst feststellen welche Komponente das Invalidieren der PaintBox auslöst.
Ich behaupte mal das es von der TScrollbox ausgelöst wird basierend darauf das die TPaintBox innerhalb der ScrollBox größer ist. Das löst ein Repaint aus. Setze zur Designtime die TPaintBox in der weite gleich denn TScrollbox und das Repaint sollte behoben sein. Verändere dann die größe nachträglich im Code selbst, abhängig von der Value der ScrollBox. gruss |
AW: Komponente mit PaintBox zeichnet sich immer neu
Ja, das Problem ist, dass
Delphi-Quellcode:
von
TPaintBox
Delphi-Quellcode:
ableitet und somit kein eigenes (dediziertes) Canvas besitzt. Stattdessen wird das Canvas des Parents verwendet. Wenn du Beispielsweise einen
TGraphicControl
Delphi-Quellcode:
über eine PaintBox legst und dann mal mit der Maus hoverst, wirst du sehen, dass
TButton
Delphi-Quellcode:
ausgelöst wird. Gleiches gillt, wenn du auf das komplette darunterliegende Formular
OnPaint
Delphi-Quellcode:
anwendest.
Invalidate
Solltest du aber recht einfach prüfen können wer Schuld ist, indem du mal einen Breakpoint im
Delphi-Quellcode:
der PaintBox setzt und dir dann den Stacktrace ansiehst (mhh wobei .. kann sein, dass das Dank Message-Queue doch nicht möglich ist).
OnPaint
|
AW: Komponente mit PaintBox zeichnet sich immer neu
Ah, danke für den Tipp. Ich habe meine Denkfehler gefunden. Ich Dummie hab natürlich die Größe der Paintbox im ObPaint der Paintbox berechnet und auch dort gesetzt ;-) Ab da lief fleißig im Kreis ;-)
|
AW: Komponente mit PaintBox zeichnet sich immer neu
Zitat:
Da gehören NUR zeichnungsrelevante Dinge hin. gruss |
AW: Komponente mit PaintBox zeichnet sich immer neu
Ja, nee, ist eigentlich klar. Aber du kennst das ja: "Mal eben schnell, zum testen..."
|
AW: Komponente mit PaintBox zeichnet sich immer neu
Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz