AGB  ·  Datenschutz  ·  Impressum  







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

Mini-Paint - Rechtecke ziehen

Ein Thema von Dellphi · begonnen am 4. Mär 2010 · letzter Beitrag vom 4. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
Dellphi

Registriert seit: 5. Nov 2009
23 Beiträge
 
#1

Mini-Paint - Rechtecke ziehen

  Alt 4. Mär 2010, 16:37
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 !!!!
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Mini-Paint - Rechtecke ziehen

  Alt 4. Mär 2010, 16:47
Habs jetzt nur überflogen. Kann es sein, dass du BTRechteckungefuellt zweimal auf False überprüfst?

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

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
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Dellphi

Registriert seit: 5. Nov 2009
23 Beiträge
 
#3

Re: Mini-Paint - Rechtecke ziehen

  Alt 4. Mär 2010, 16:56
ja, danke, dass macht das ganze ein bisschen übersichtlicher

Aber wie bekomme ich denn jetzt die "gezogenen" Rechtecke hin?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

Re: Mini-Paint - Rechtecke ziehen

  Alt 4. Mär 2010, 16:58
Bei Google suchenDelphi Gummibandeffekt
Ich denke mal, Du suchst das.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Dellphi

Registriert seit: 5. Nov 2009
23 Beiträge
 
#5

Re: Mini-Paint - Rechtecke ziehen

  Alt 4. Mär 2010, 17:06
ja, nur leider habe ich dort die Antwort auch nicht gefunden!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Mini-Paint - Rechtecke ziehen

  Alt 4. Mär 2010, 17:22
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

Re: Mini-Paint - Rechtecke ziehen

  Alt 4. Mär 2010, 17:23
Da schickt man durch die Blume einen Link zum Entwicklerhandbuch und dann wird das nichtmal gelesen
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Dellphi

Registriert seit: 5. Nov 2009
23 Beiträge
 
#8

Re: Mini-Paint - Rechtecke ziehen

  Alt 4. Mär 2010, 17:32
Ja, habe ich 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!!!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#9

Re: Mini-Paint - Rechtecke ziehen

  Alt 4. Mär 2010, 18:11
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Dellphi

Registriert seit: 5. Nov 2009
23 Beiträge
 
#10

Re: Mini-Paint - Rechtecke ziehen

  Alt 4. Mär 2010, 19:07
eine frage noch:

sind MovePt und Origin Variablen vom Typ Tpoint?
  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 10:14 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