Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Objekte in Paintbox bewegen (https://www.delphipraxis.net/191186-objekte-paintbox-bewegen.html)

Maurooon 17. Dez 2016 15:15

Delphi-Version: 5

Objekte in Paintbox bewegen
 
Hallo Community,

wie kann ich mit canvas gezeichnete Objekte automatisch mit der Zeit in x bzw y Richtung bewegen lassen? Ein Beispiel: ich zeichne einen Kreis auf die Koordinate 10,10 in einer 200x200 großen Paintbox. Nun möchte ich, dass der Kreis innerhalb x Sekunden auf die Koordinate 10,190 wander. Geht das überhaupt so wie ich mir das vorstelle? Also das etwas gezeichnetes wandert und dabei etwas anderes in der Paintbox gezeichnete nicht? Oder muss ich das mit einem image machen?

Schon jetzt vielen Dank für eure Hilfe!!! LG

Uwe Raabe 17. Dez 2016 15:27

AW: Objekte in Painbox bewegen
 
Das Zeichnen der Paintbox geschieht im OnPaint-Event. Dort kannst du den Kreis dann ja an die passende Position zeichnen. Du musst nur zyklisch ein PaintBox.Invalidate aufrufen, damit das OnPaint-Event ausgelöst wird (z.B. durch einen Timer).

Maurooon 17. Dez 2016 15:59

AW: Objekte in Painbox bewegen
 
Okay, und wie funktioniert ein Timer?

stahli 17. Dez 2016 16:01

AW: Objekte in Painbox bewegen
 
Timer auf das Formular ziehen.
Interval einstellen.
Doppelklicken und bei der Ereignisbehandlung die Anweisungen eintragen.

Maurooon 17. Dez 2016 16:03

AW: Objekte in Painbox bewegen
 
Okay, und den "alten" Kreis löscht der Timer dann automatisch? Oder gibt es dafür einen Befehl?

stahli 17. Dez 2016 16:17

AW: Objekte in Painbox bewegen
 
Paintbox.Invalidate;
veranlasst das Neuzeichnen.
Ob der alte Kreis dabei noch in dem Bild bleibt oder das alte Bild zuvor automatisch gelöscht wird, kannst Du einfach ausprobieren.

Aviator 17. Dez 2016 18:14

AW: Objekte in Painbox bewegen
 
Falls du das alte Bild auf jeden Fall löschen willst, kannst du einfach als erste Zeile im OnPaint Event
Delphi-Quellcode:
Paintbox1.Canvas.FillRect(PaintBox1.ClientRect)
reinschreiben. Natürlich vorher mit
Delphi-Quellcode:
Paintbox1.Canvas.Brush.Color := clXYZ // clXYZ durch gewünschte Farbe ersetzen
die gewünschte Farbe setzen damit da nicht plötzlich alles in Pink gezeichnet wird. :)
ABer im Normalfall sollte die Paintbox sowieso schon alles automatisch löschen wenn ich mich nicht irre. :roll:

Maurooon 17. Dez 2016 18:18

AW: Objekte in Painbox bewegen
 
Ich selbst benutze da immet PainBox1.refresh für, malt einfach alles weiß.

Weiß jemand ob es irgendwie möglich ist während eine Prozedur läuft (d.h. sie evtl eine Minute läuft weil sleep() eingebaut ist) einen anderen Button wie z.B. einen Radiobutton zu drücken?

Aviator 17. Dez 2016 18:31

AW: Objekte in Painbox bewegen
 
Zitat:

Zitat von Maurooon (Beitrag 1356467)
Weiß jemand ob es irgendwie möglich ist während eine Prozedur läuft (d.h. sie evtl eine Minute läuft weil sleep() eingebaut ist) einen anderen Button wie z.B. einen Radiobutton zu drücken?

Wenn
Delphi-Quellcode:
Sleep()
benutzt wird, dann "hängt" die komplette Anwendung für diese Dauer. Aus diesem Grund benutzt man kein Sleep. Auch nicht um irgendwas visuell schön aussehen zu lassen. Da baut man sich dann einen Thread in dem das alles abgearbeitet wird (darin kann man dann wiederum Sleep() benutzen) und gibt das an die GUI weiter.
Delphi-Quellcode:
Sleep()
und
Delphi-Quellcode:
Application.ProcessMessages
sollte man wo es geht vermeiden.

Maurooon 18. Dez 2016 14:44

AW: Objekte in Paintbox bewegen
 
Mhmmmm, okay.

Wie kann ich zwei PaintBoxen übereinander legen und die eine transparent machen, sodass ich das auf beiden Paintboxen gezeichnete sehe?

Uwe Raabe 18. Dez 2016 14:50

AW: Objekte in Paintbox bewegen
 
Zitat:

Zitat von Maurooon (Beitrag 1356491)
Wie kann ich zwei PaintBoxen übereinander legen und die eine transparent machen, sodass ich das auf beiden Paintboxen gezeichnete sehe?

Warum willst du das machen?

Maurooon 18. Dez 2016 15:07

AW: Objekte in Paintbox bewegen
 
Für z.B. folgendes: Ich zeichne auf der einen Paintbox ein Haus, da es Winter ist schneit es (auf der zweiten PaintBox). Jetzt muss ich ja nach jedem mal dass random Schneeflocken gezeichnet werden refreshen und da dies das Haus nicht löschen soll, passiert dies auf einer seperaten Paintbox. Damit ich nun aber beides sehe, müsste am besten die zweite transparent sein.

jaenicke 18. Dez 2016 15:27

AW: Objekte in Paintbox bewegen
 
Am besten zeichnest du das Haus in eine TBitmap und im OnPaint zeichnest du dann zuerst diese Bitmap mit Draw oder BitBlt auf die Paintbox und zeichnest danach den Schnee.

stahli 18. Dez 2016 15:30

AW: Objekte in Paintbox bewegen
 
Ich schließe mich jaenicke an.

Wobei ich vor Jahren auch mal eine Paintbox über ein Image gelegt habe um dort Rasterpunkte drauf gelegt habe (wäre bei Dir halt Schnee).
Grundsätzlich sollte das also lösbar sein. Aber das kopieren des Hausabbildes und Ergänzung mit dem Schnee sollte die übersichtlichere Lösung sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 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