![]() |
Rechtecke auf TImage "ziehen"
Hallo,
ich bin gerade dabei, eine Art Paintprogramm zu schreiben. Dabei gibt es nur ein kleines Problem: Ich möchte Rechtecke und Ellipsen auf der TImage Komponente aufziehen. Ich abeite mit MouseDown, MouseMove und MouseUp. Bei MouseDown wird der Ursprungspunkt des Rechtecks in den Variablen x2 und y2 gespeichert. Außerdem wird die TBitmap Variable "Alt" auf das aktuelle Bitmap der TImage gesetzt. Bei MouseMove soll wird dann erst der alte Zustand wiederhergestellt werden
Delphi-Quellcode:
und dann das Rechteck gezogen werden.
Image1.picture.bitmap:=Alt;
Delphi-Quellcode:
Dabei bekomme ich leider immer eine Zugriffsverletzung...
Image1.Canvas.Rectangle(X2,Y2,X,Y);
Wo ist der Fehler oder kann man das auf diese Art gar nicht machen. OnFormCreate habe ich die Variable mit
Delphi-Quellcode:
initialisiert...
Alt:=TBitmap.Create;
Liebe Grüße! |
Re: Rechtecke auf TImage "ziehen"
Ich würde zur graphischen Ausgabe keine Image-Komponente nehmen, sonder einfach auf die Zeichenfläche einer Paintbox zeichnen. Die Image-Komponente ist für sowas eigentlich nicht gedacht.
mfg |
Re: Rechtecke auf TImage "ziehen"
Zitat:
|
Re: Rechtecke auf TImage "ziehen"
Ich weiß zwar nicht, was gegen die Verwendung einer Paintbox-Komponente spricht, aber gut. Vielleicht solltest du anstatt
Delphi-Quellcode:
einmal
Image1.Canvas.Rectangle(X2,Y2,X,Y);
Delphi-Quellcode:
versuchen (kann dir im Moment aber auch nicht sagen, ob das so funktioniert). Allerdings müsstest du in diesem Fall der Image-Komponente wohl noch mitteilen, dass sie sich neu zeichnen muss.
Image1.Picture.Bitmap.Canvas.Rectangle(X2,Y2,X,Y);
|
Re: Rechtecke auf TImage "ziehen"
Mit
Image1.picture.bitmap.Assign(Alt); statt Image1.picture.bitmap:=Alt; könnte es evtl. hinhauen. Irgendwie sowas war da. Das ist auch (mit) ein Grund warum TImage nicht so prima ist - es ist eigentlich nur zur Anzeigen von statischen Bildern. Wenn man aus dem Programm heraus selbst zeichnet, macht man das üblicherweise einfach auf ein TBitmap (welches ja zunächst nirgends angezeigt wird), und kopiert das fix und fertige Bitmap dann als aller letzten Schritt (idealerweise im OnPaint() Ereignis der Painbox) auf eben diese Paintbox. TImage bringt einen riesen Haufen unnötigen Ballast mit, und an obigem sieht man ja schon, dass eine derartige Nutzung eher eine Vergewaltigung ist ;) |
Re: Rechtecke auf TImage "ziehen"
Ok, soweit klappt das. Aber soweit kam ich auch, wenn ich einfach nur Bild.Picture wiederhergestellt habe, da, wenn man das Rechteck jetzt wieder kleiner ziehen will, das alte nicht verschwindet...
|
Re: Rechtecke auf TImage "ziehen"
Hallo,
vielleicht hilft dir ![]() Allerdings gibt es keine "Punkte", an denen du dein Rechteck größer ziehen kannst. Grüße, Matze |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 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