Entwickler-Ecke

Multimedia / Grafik - Paintbox Verwischt oder bleibt nicht im Vordergrund


CJ(lux) - Mo 30.08.10 15:40
Titel: Paintbox Verwischt oder bleibt nicht im Vordergrund
Hi,

Also, ich habe 2 Komponente auf meiner Form, eine TImage und eine TPaintBox.

-Die TImage wird permanent immer neu mit vielen Vierecken mit verschiedenen Farben gefüllt.
-Auf meine PaintBox soll beim Programmstart ein einmaliger Raster gezeichnet werden, und dieser soll immer im Vordergrund auf der TImage sein.

Mein Problem ist dieser, dass wenn ich die TImage 'befülle' verschwindet mein Raster auf der Paintbox..

Frage:
Wie stelle ich es an, dass mein Raster immer Sichtbar bleibt?


mfG
CJ


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 30.08.2010 um 15:42


elundril - Mo 30.08.10 15:48

Hallo und :welcome: im DF!

Ich hoffe du zeichnest die Vierecke nicht im selbst im TImage? Wenn doch, würd ich beides in die Paintbox schmeißen.

zu deinem Problem: Zeichne das Raster auf ein TBitmap (sogenanntes Off-Screen Bitmap) und zeichne das im OnPaint-Ereigniss von der Paintbox einfach immer auf die Paintbox.

lg elundril


CJ(lux) - Mo 30.08.10 22:50

Hey, danke für deine Antwort! Dann muss ich mir zuerst noch das mit den Bitmaps anschaun ;)


Hidden - Mo 30.08.10 23:03

Moin!

Zur Paintbox wäre zu erwähnen, dass sie nicht dauerhaft bemalt werden kann - sie ist absichtlich wie eine abwischbare Tafel.

Die Paintbox-Komponente hat ein OnPaint-Ereignis, in dem du alles auf sie zeichnen kannst. Der Grund dafür ist der, dass Windows zu bestimmten Zeitpunkten(etwa, wenn ein anderes Fenster darübergezogen wird) Anweisung gibt, die Komponente neu zu zeichnen.

Dann wird die Methode OnPaint aufgerufen, und du kannst individuell auf dieses Repaint reagieren. Meißt geschieht das, indem du die fixen Teile deiner Grafik von einer Bitmap per StretchDraw/Draw herüberkopierst, dann einige stark bewegliche darüberzeichnest.

Dazu kannst du auch wieder andere Bitmaps nehmen, bei denen du die Eigenschaft .Transparent auf true stellst und sie dann per (Stretch)Draw in deine Zeichnung übernimmst.

Ein Repaint(und die dazugehörige Methode OnPaint) kannst du auch manuell mit dem Aufruf von Paintbox1.Repaint; auslösen(beispielsweise in einem Timer).

lg,