![]() |
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 |
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).
|
AW: Objekte in Painbox bewegen
Okay, und wie funktioniert ein Timer?
|
AW: Objekte in Painbox bewegen
Timer auf das Formular ziehen.
Interval einstellen. Doppelklicken und bei der Ereignisbehandlung die Anweisungen eintragen. |
AW: Objekte in Painbox bewegen
Okay, und den "alten" Kreis löscht der Timer dann automatisch? Oder gibt es dafür einen Befehl?
|
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. |
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:
reinschreiben. Natürlich vorher mit
Paintbox1.Canvas.FillRect(PaintBox1.ClientRect)
Delphi-Quellcode:
die gewünschte Farbe setzen damit da nicht plötzlich alles in Pink gezeichnet wird. :)
Paintbox1.Canvas.Brush.Color := clXYZ // clXYZ durch gewünschte Farbe ersetzen
ABer im Normalfall sollte die Paintbox sowieso schon alles automatisch löschen wenn ich mich nicht irre. :roll: |
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? |
AW: Objekte in Painbox bewegen
Zitat:
Delphi-Quellcode:
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.
Sleep()
Delphi-Quellcode:
und
Sleep()
Delphi-Quellcode:
sollte man wo es geht vermeiden.
Application.ProcessMessages
|
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 09:55 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