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/)
-   -   Delphi canvasobject..alte position löschen (https://www.delphipraxis.net/3145-canvasobject-alte-position-loeschen.html)

Haegar 25. Feb 2003 19:49


canvasobject..alte position löschen
 
hallo,

ich habe ein image...den hinterhrund lade ich aus einer
*.bmp-datei. jetzt bewege ich in object auf dem Canvas der image-komponente! das problem.....das canvas wird zwar immer schön neu gezeichnet (position ändert sich), doch muss ich ja auch die alte position löschen, wie mach ich das denn?? (also so das dann wieder der hintergrund zu sehen ist)

gruss haegar

Haegar 25. Feb 2003 21:47

mal ne idee von mir, umsetzen is ja ne andere sache :D

is vielleicht nicht grad originell, aber vielleicht ne temporäre lösung!
- dort wo objekt gezeichnet wird vorher ausschnitt vom hintergrundbild kopieren (selbe größe wie objekt)
-nach weiterbewegen des objektes, die kopie wieder einfügen.

was sagt ihr dazu??
:roll:

grus haegar

nailor 25. Feb 2003 22:34

Richtig, sag ich da. Jetzt ist nur die Frage, ob man nicht schlauer grade den ganzen Hintergrund nimmt, oder ob man nicht einfach zwei Images übereinander legen sollte, wodurch Delphi die Sache von alleine macht.

lodda 26. Feb 2003 09:50

Hallo Haegar
probier mal die API-Funktion BitBlt.
Der Aufruf müsste ungefähr so gehen:

Delphi-Quellcode:
BitBlt(Canvas.Handle, Canvas.Left, Canvas.Top, Image.Width, Image.Heigth, Image.Handle, altx, alty, SCRINVERT);
Canvas ist in dem Fall die Zeichenfläche auf die du zeichnen willst, altx und alty sind die alten Koordinaten. Der Parameter SCRINVERT sorgt für einen XORPut. Wenn du das Bild mit der Funktion auf den Hintergrund kopiert hast, dann müsste beim zweiten mal drüberkopieren wieder das ursprüngliche Hintergrundbild rauskommen

Haegar 26. Feb 2003 11:00

wie versteh ich das mit dem canvas.handle??
was soll denn da hin?
ausserdem kennt er dieses SCRINVERT nicht!?

lodda 26. Feb 2003 11:21

1.) Wie schon gesagt, Canvas ist die Zeichenfläche auf die du zeichnen willst. Also entweder direkt auf das Formular mit Form1.Canvas.Handle oder auf ein zweites Image. Also z.B BackGroundImage.canvas.Handle
2.) :oops: hab mich verschrieben es muss SRCINVERT heißen.

Haegar 26. Feb 2003 11:44

und das image.handle...mit image ist dann das zu zeichnende object gemeint???

lodda 26. Feb 2003 11:56

Genau!

Haegar 26. Feb 2003 11:59

aha, und was mach ich wenn das ne eigene klasse vom typ TObject abgleitet is??

lodda 26. Feb 2003 14:57

Dieses Object muss ja ein Canvas haben auf dem es zeichnet. Dieses Canvas
hat ein Handle, dass du angeben musst.


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