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 Mini-Paint - Rechtecke ziehen (https://www.delphipraxis.net/148583-mini-paint-rechtecke-ziehen.html)

Dellphi 4. Mär 2010 15:37


Mini-Paint - Rechtecke ziehen
 
Hallo!

Ich habe ein kleines Problem mit meinem Mini-Paint Programm, welches ich zur Zeit programmiere:

Ich wollte ein Rechteck programmieren, dass man wie im echten Paint aufziehen kann.
Dies ist mir auch gelungen, sogar mit Fallunterscheidung für gefüllt und ungefüllt, aber man sieht während des Ziehens des Rechtecks nichts.
Wie kann ich das ändern?

Hier mein Quelltext:

Delphi-Quellcode:
procedure TPaint.BildMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     with Bild.Canvas do begin
     if BtRechteck.Enabled=False
     then begin
     if BtRechteckungefuellt.Enabled=False
     then begin
          Brush.Style:=bsclear;
          XAnfang:=X;
          YAnfang:=Y;
          XEnde:=X;
          YEnde:=Y;
          Moveto (XAnfang,YAnfang);
     end;
     if BtRechteckgefuellt.Enabled=False
     then begin
          Brush.Style:=bssolid;
          XAnfang:=X;
          YAnfang:=Y;
          XEnde:=X;
          YEnde:=Y;
          Moveto (XAnfang,YAnfang);
     end;
     end;
     end;
end;

procedure TPaint.BildMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
     with Bild.Canvas do begin
     if BtRechteck.Enabled=False
     then begin
     if MausGedrueckt=True
     then begin
     if BtRechteckungefuellt.Enabled=False
     then begin
     Brush.Style:=bsclear;
     Pen.mode := pmnotxor;
     Moveto (XAnfang,YAnfang);
     Rectangle (xanfang,yanfang,xende,yende);
     Pen.style := psdot;
     Moveto (XAnfang,YAnfang);
     Rectangle (xanfang,yanfang,x,y);
     XEnde:=X;
     YEnde:=Y;
     end;
     if BTRechteckgefuellt.Enabled=False
     then begin
     Brush.Style:=bssolid;
     Pen.mode := pmnotxor;
     Moveto (XAnfang,YAnfang);
     Rectangle (xanfang,yanfang,xende,yende);
     Pen.style := psdot;
     Moveto (XAnfang,YAnfang);
     Rectangle (xanfang,yanfang,x,y);
     XEnde:=X;
     YEnde:=Y;
     end;
     end;
     end;
     end;
end;

procedure TPaint.BildMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     with Bild.Canvas do begin
     MausGedrueckt:=False;
     if BtRechteck.Enabled=False
     then begin
     if BtRechteckungefuellt.Enabled=False
     then begin
          Brush.Style:=bsclear;
          Pen.mode := pmcopy;
          Pen.Style := pssolid ;
          Xende := x;
          YEnde := y;
          Rectangle(XAnfang, YAnfang, X, Y);
     end;
     if BTRechteckgefuellt.Enabled=False
     then begin
          Brush.Style:=bssolid;
          Pen.mode := pmcopy;
          Pen.Style := pssolid ;
          Xende := x;
          YEnde := y;
          Rectangle(XAnfang, YAnfang, X, Y);
     end;
     end;
     end;
end;
Vielen Dank schonmal im Voraus !!!!

isilive 4. Mär 2010 15:47

Re: Mini-Paint - Rechtecke ziehen
 
Habs jetzt nur überflogen. Kann es sein, dass du BTRechteckungefuellt zweimal auf False überprüfst? :stupid:

Tipp1: auf true oder false überprüfen ist doppelt gemoppelt. Du kannst das direkt so schreiben.

Tipp2: Wenn du einrückst, kannst du deinen eigenen Code auch nachher noch lesen :mrgreen:

Delphi-Quellcode:
procedure TPaint.BildMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
     with Bild.Canvas do
       begin
       if not(BtRechteck.Enabled) then
         if MausGedrueckt then
           if BtRechteckungefuellt.Enabled then
               begin
               Brush.Style:=bssolid;
               Pen.mode := pmnotxor;
               Moveto (XAnfang,YAnfang);
               Rectangle (xanfang,yanfang,xende,yende);
               Pen.style := psdot;
               Moveto (XAnfang,YAnfang);
               Rectangle (xanfang,yanfang,x,y);
               XEnde:=X;
               YEnde:=Y;
               end
             else
               begin
               Brush.Style:=bsclear;
               Pen.mode := pmnotxor;
               Moveto (XAnfang,YAnfang);
               Rectangle (xanfang,yanfang,xende,yende);
               Pen.style := psdot;
               Moveto (XAnfang,YAnfang);
               Rectangle (xanfang,yanfang,x,y);
               XEnde:=X;
               YEnde:=Y;
               end
       end;
end;
LG Isilive

Dellphi 4. Mär 2010 15:56

Re: Mini-Paint - Rechtecke ziehen
 
ja, danke, dass macht das ganze ein bisschen übersichtlicher :D:D

Aber wie bekomme ich denn jetzt die "gezogenen" Rechtecke hin?
:wiejetzt:

DeddyH 4. Mär 2010 15:58

Re: Mini-Paint - Rechtecke ziehen
 
Bei Google suchenDelphi Gummibandeffekt
Ich denke mal, Du suchst das.

Dellphi 4. Mär 2010 16:06

Re: Mini-Paint - Rechtecke ziehen
 
ja, nur leider habe ich dort die Antwort auch nicht gefunden! :wiejetzt:

p80286 4. Mär 2010 16:22

Re: Mini-Paint - Rechtecke ziehen
 
Hast Du Dir einmal dieSeiten 7-24 bis 7-28 in dem Entwicklerhndbuch angeschaut?

da steht eigentlich alles drin was Du benötigst.

Gruß
K-H

DeddyH 4. Mär 2010 16:23

Re: Mini-Paint - Rechtecke ziehen
 
Da schickt man durch die Blume einen Link zum Entwicklerhandbuch und dann wird das nichtmal gelesen :?

Dellphi 4. Mär 2010 16:32

Re: Mini-Paint - Rechtecke ziehen
 
Ja, habe ich :D Das wusste ich auch schon alles mit den Parametern und 3 Prozeduren und so.
Ich habe es auch versucht umzusetzen, aber nicht geschafft, eine Gummilinie für ein Rechteck zu machen.
Für eine normale Linie heb ich es geschafft, allerdings als ich versuchte nach dem gleichen Muster bei dem Rechteck vorzugehen, kam das oben genannte (Delphi-Quelltext) heraus.

Vielen Dank im Voraus!!! :wiejetzt: :wiejetzt:

DeddyH 4. Mär 2010 17:11

Re: Mini-Paint - Rechtecke ziehen
 
Aufbauend auf dem Code aus dem Entwicklerhandbuch:
Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Drawing := true;
  Origin := Point(X,Y);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Drawing then
    begin
      Canvas.Pen.Mode := pmNotXor;
      Canvas.Pen.Style := psDot;
      Canvas.Rectangle(Origin.X,Origin.Y,MovePt.X,MovePt.Y);
      Canvas.Rectangle(Origin.X,Origin.Y,X,Y);
    end;
  MovePt := Point(X,Y);
  Canvas.Pen.Mode := pmCopy;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Drawing := false;
end;

Dellphi 4. Mär 2010 18:07

Re: Mini-Paint - Rechtecke ziehen
 
eine frage noch:

sind MovePt und Origin Variablen vom Typ Tpoint?


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