AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Canvas Rectangle mit MouseMove, MouseDown und MouseUp
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas Rectangle mit MouseMove, MouseDown und MouseUp

Ein Thema von Nils_13 · begonnen am 12. Aug 2005 · letzter Beitrag vom 12. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Canvas Rectangle mit MouseMove, MouseDown und MouseUp

  Alt 12. Aug 2005, 11:27
Hi,

ich zeichne ein Viereck wenn ich die Mouse drücke. Wenn ich die Mouse bewege, dann soll das Viereck erweitert werden. Wenn ich die Mouse zurück bewege, passiert ein Grafikfehler: die anderen Rectangles sind noch vorhanden.
1. wie kann ich das beheben ?
2. wie kann ich es Regeln, den Startwert von der MouseDown-Position aus (wie in einem Strategiespiel) festzulegen, damit das Viereck auch von dem gewünschten Punkt aus gezeichnet wird ?

Der bisherige Code:
Delphi-Quellcode:
  private
    { Private-Deklarationen }
    mbdown : Boolean;

{ ... }

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
mbdown := true;
end;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
mbdown := false;
PaintBox1.Repaint;
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if mbdown = True then
  begin
    PaintBox1.Canvas.Brush.Color := clBlack;
    PaintBox1.Canvas.Brush.Style := bsSolid;
    PaintBox1.Canvas.Pen.Color := clWhite;
    PaintBox1.Canvas.rectangle(Rect(0,0,x,y));
  end;
end;
Wenn ich PaintBox1.Repaint verwende, dann flackert es.
Miniaturansicht angehängter Grafiken
rectangle_734.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp

  Alt 12. Aug 2005, 12:02
Zitat von Nils_13:
[...], passiert ein Grafikfehler: die anderen Rectangles sind noch vorhanden.
Fehler? Dein Code ist doch korrekt . Du musst vor dem Zeichnen des nächsten Rechtecks schon das alte wieder löschen, indem du z.B. per Delphi-Referenz durchsuchenFillRect den gesamten Bitmapinhalt löschst.
Um Flimmern zu vermeiden, solltest du mit Hier im Forum suchenOffScreenBitmaps arbeiten.

Zu 2.: Die Position im OnMouseDown speichern ?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp

  Alt 12. Aug 2005, 14:41
Verwende bei Zeichnen als penmode pmnotxor. Und schau mal in dein Demo-Verzeichnis, unter Demos/Doc findest du GraphEx, das wird das auch demonstriert.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Jarmen_Kell

Registriert seit: 17. Mär 2005
188 Beiträge
 
#4

Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp

  Alt 12. Aug 2005, 15:58
tada
Delphi-Quellcode:
var
  moused:TPoint;
  current:TPoint;

procedure TForm1.PaintBoxMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  moused.x:=x;
  moused.y:=y;
  current.x:=x;
  current.y:=y;
end;

procedure TForm1.PaintBoxMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer); // Alternativ ImageMouseMove o.ä.
begin
  if SSLeft in Shift then imgpaint(pmnotxor,current.X,current.Y);
  current.x:=x;
  current.y:=y;
  if SSLeft in Shift then imgpaint(pmnotxor,current.x,current.y);
end;

procedure TForm1.imgpaint(mode:TPenMode;x,y:Integer);
begin
  PaintBox.canvas.Pen.Mode:=mode; // Wieder Image.Canvas o.ä.
  PaintBox.Canvas.Rectangle(moused.x,moused.y,x,y);
end;
Hat den Vorteil, dass du auch noch ruckzuck andere Sachen wie Dreiecke, Rauten, Striche etc einfügen kannst.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp

  Alt 12. Aug 2005, 16:13
Und was macht ihr beiden, wenn Nils keinen einfarbigen Hintergund hat ?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp

  Alt 12. Aug 2005, 16:47
Zitat von Khabarakh:
Und was macht ihr beiden, wenn Nils keinen einfarbigen Hintergund hat ?
genau das gleiche

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp

  Alt 12. Aug 2005, 16:49
Ja, Falschfarbenbilder sind was Schönes .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#8

Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp

  Alt 12. Aug 2005, 19:46
Das Viereck soll innen Transparent sein.
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp

  Alt 12. Aug 2005, 21:16
Zitat von Khabarakh:
Ja, Falschfarbenbilder sind was Schönes .
ok, das meinst du. Aber das wirkt sich ja nur auf den Markierungsrahmen aus. Dort finde ich es aber eher praktisch, da du den Rahmen immer sehen wirst. Schwarzer Rahmen auf einem schwarzem Bereich macht sich auch nicht so gut .
Man kann statt pmnotxor noch pmnot und unterschiedlichen Farben probieren.
Aber wenns wirklich eine bestimmte Farbe sein soll, dann gehts nur mit Neuzeichnen.

Zitat von Nils_13:
Das Viereck soll innen Transparent sein.
das wird es auch sein

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Jarmen_Kell

Registriert seit: 17. Mär 2005
188 Beiträge
 
#10

Re: Canvas Rectangle mit MouseMove, MouseDown und MouseUp

  Alt 12. Aug 2005, 21:26
"Wir beiden" lassen das einfach so und machen dann nur noch mal beim OnMouseUp

imgpaint(pmcopy,current.x,current.y); Fertig ist die Wurst.
  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 08:41 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