Delphi-PRAXiS
Seite 1 von 2  1 2      

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:55 Uhr.
Seite 1 von 2  1 2      

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