AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rechtecke auf TImage ziehen mit DrawFocusRect

Ein Thema von Delphi-Narr · begonnen am 7. Jan 2010 · letzter Beitrag vom 7. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

Rechtecke auf TImage ziehen mit DrawFocusRect

  Alt 7. Jan 2010, 20:45
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!
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

Re: Problem mit DrawFocusRect

  Alt 7. Jan 2010, 20:52
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;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Problem mit DrawFocusRect

  Alt 7. Jan 2010, 20:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem mit DrawFocusRect

  Alt 7. Jan 2010, 21:13
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Problem mit DrawFocusRect

  Alt 7. Jan 2010, 21:25
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
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

Re: Problem mit DrawFocusRect

  Alt 7. Jan 2010, 21:27
Du musst dazu den ersten Beitrag editieren. Dies kannst du innerhalb von 24h machen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Rechtecke auf TImage ziehen mit DrawFocusRect

  Alt 7. Jan 2010, 21:30
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
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#8

Re: Rechtecke auf TImage ziehen mit DrawFocusRect

  Alt 7. Jan 2010, 21:34
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 Habs gerade getestet. Aber es gibt noch einen Bug, wenn ich das Rechteck nicht nach rechts unten ziehe.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Rechtecke auf TImage ziehen mit DrawFocusRect

  Alt 7. Jan 2010, 21:42
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...
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#10

Re: Rechtecke auf TImage ziehen mit DrawFocusRect

  Alt 7. Jan 2010, 21:45
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr.
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