![]() |
Rechtecke auf TImage ziehen mit DrawFocusRect
Hallo, ich möchte gerne auf TImage ein Rechteck "ziehen", ähnlich wie bei Zeichenprogrammen. Dies soll mit über die Befehle OnMouseDown und Move geschehen. Beim Drücken der Maustaste wird der Startpunkt festgelegt, jetzt soll man das Rechteck ziehen können. Mein Problem: Das Rechteck wird gezogen, es erscheinen aber innerhalb dieses Rechtecks seeeehr viele andere Rechtecke, alle mit gestrichelter schwacher Linie.
Was kann ich machen?
Delphi-Quellcode:
procedure TForm1.BildMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin Bild.Canvas.MoveTo(X,Y); Zeichnen:=True; Bild.Canvas.Pen.mode:=pmxor; Xf:=X; Yf:=Y; end; procedure TForm1.BildMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if not Zeichnen then exit; if Werkzeug.ItemIndex=1 then //Das Rechteck-Werkzeug begin Bild.Canvas.DrawFocusRect(Rect(Xf,Yf,X,Y)); end; end; Liebe Grüße! |
Re: Problem mit DrawFocusRect
Das Problem ist, dass das Bild sich den letzten Rahmen merkt und diesen nicht löscht. Du musst das Bild inkl. Rahmen neu zeichnen -> siehe Code:
Delphi-Quellcode:
procedure TForm1.BildMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if not Zeichnen then exit; if Werkzeug.ItemIndex=1 then //Das Rechteck-Werkzeug begin // Bild "clearen" Bild.Canvas.Brush.Color := clWhite; Bild.Canvas.FillRect(Rect(0, 0, Bild.Width, Bild.Height)); // Neuen Rahmen zeichnen Bild.Canvas.DrawFocusRect(Rect(Xf,Yf,X,Y)); end; end; |
Re: Problem mit DrawFocusRect
Ja, darauf würde ich ja zurückgreifen, aber das, was bereits auf dem Bild ist, soll da auch bleiben...
Eine Art Zeichenprogramm solls werden. |
Re: Problem mit DrawFocusRect
Hallo, kannst du dem Thema bitte einen aussagekräftigeren Titel geben? Das du ein Problem hast sagt bereits die gewählte Forenkategorie aus und "DrawFocusRect" sagt nicht sehr viel über dein Problem aus.
Bedenke das auch du Vorteile von einem aussagekräftigerem Titel hast. Aber auch das Andere mit gleichem Problem das Thema später über die Suche besser finden (wenn ein ordentlicher Titel vergeben wurde) ist nicht zu vernachlässigen. :) |
Re: Problem mit DrawFocusRect
Nun ja, ich fand den Titel recht gut, da ich mich nicht ohne Suche aufs Forum geschmissen habe. In anderen Foren klappt diese Methode zum Zeichnen von Rechtecken auf einer TImage-Komponente und so habe ich mir gedacht, es ist ein spezifisches Problem bei mir.
Alternative Titel hätten mehr mit meinem Projekt als mit meinem Problem zu tun, deshalb habe ich diesen gewählt. Wenn dir der Titel nicht aussagekräftig genug ist, kannst du ihn bitte ändern, mir fehlen dazu die Rechte... LG |
Re: Problem mit DrawFocusRect
Du musst dazu den ersten Beitrag editieren. Dies kannst du innerhalb von 24h machen.
|
Re: Rechtecke auf TImage ziehen mit DrawFocusRect
Ok, danke - wieder was gelernt.
Ich sehe gerade, ich habe das gleiche Problem auch mit geraden Linien und Ellipsen. Mein Programm hat bereits den "Farbeimer", den Bleistift und ein Radiergummi... LG |
Re: Rechtecke auf TImage ziehen mit DrawFocusRect
Mir fällt irgendwie nur folgendes ein: Und zwar gibt es ja das sichtbare Bild. Zudem brauchst du noch eines, welches nicht auf der Form oder eben unsichtbar ist. Dieses dient als Zwischenspeicher. Wenn du nun eine Aktion abgeschlossen hast synchonisierst du beide Bilder, d.h. du kopierst den Inhalt des sichtbaren Bildes in das des nicht sichtbaren. Anstatt nun das TImage zu "clearen", wie ich das vorher per Code gezeigt habe, zeichnest du einfach das gepufferte, nicht sichtbare Bild. Verständlich?
Ob das aber die beste Lösung ist, kann ich dir nicht sagen. Edit 1: Also es funktioniert auf jedenfall mal :thumb: Habs gerade getestet. Aber es gibt noch einen Bug, wenn ich das Rechteck nicht nach rechts unten ziehe. |
Re: Rechtecke auf TImage ziehen mit DrawFocusRect
Ich könnte das ganze auch mit einem dynamischen Shape machen, dessen Koordinaten dann an das Image übergeben werden. Ich wunder mich halt nur, warum das nicht so klappt...
|
Re: Rechtecke auf TImage ziehen mit DrawFocusRect
Das Problem ist doch, dass du etwas zeichnest und das wieder rückgängig machen musst. Und das geht halt nicht so einfach, außer du kennst du Zustand zuvor, den du dann wieder einblendest. Das ist genau das Verfahren, das ich dir gerade erzählt habe.
Was hälst du davon, wenn du das wirklich mit Shapes macht und zusätzlich noch mit Ebenen, à la Photoshop arbeitest? Sowas finde ich recht praktisch. Zudem könntest du dann später auch noch Eigenschaften von Objekten ändern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 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