![]() |
problem mit minipaint--->4ecke und kreise...
hallo,
also ich habe genau das selbe problem, wie ![]() wie kriege ich das hin, dass der die rechteck,e die der in mousemove zeichnet, sofort wieder löscht? ich habe im buch was gelesen, dass man das mit canvas.pen.mode irgendwie was machen muss... danke schon mal |
Re: problem mit minipaint--->4ecke und kreise...
Du könntest mit den Penmodes Xor und NotXor arbeiten, allerdings ist das nur bei einfachen Zeichnungen möglich, IMHO aufwendig (immer zusätzlich die letzten Koordinaten usw. speichern) und führt zu Farbverfälschungen.
Steig besser auf ![]() |
Re: problem mit minipaint--->4ecke und kreise...
Wenn du's mit den PenModes machen willst, müsste das vom Prinzip her so aussehen:
Delphi-Quellcode:
Ich hab einige unwichtige Sachen rausgenommen und Kommis eingefpgt, und hoff' ma, dass du durchsteigst.
#####
type Tmainform = class(TForm) PaintBox:TPaintbox; // mehr Kompos dürften hier nich wichtig sein private mausd:Boolean; // LMB gedrückt?!? doing:Integer; // auszuführende Aktion current,moused:Tpoint; pencolor,brushcolor:Tcolor; penstyle:TPenStyle; brushstyle:TBrushStyle; pensize:Integer; pstart,pnow,pdiff:TStatusPanel; procedure copyto2; // für undo-Funktion procedure imgpaint(mode:TPenmode;x,y:Integer); function Randompixels(const x: Integer): Integer; { Private declarations } public { Public declarations } end; var mainform: Tmainform; ##### procedure Tmainform.imgMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin moused.x:=x; moused.y:=y; current.x:=x; current.y:=y; pstart.Text:=inttostr(x) + ', ' + inttostr(y); mausd:=true; {if doing=1 then with PaintBox.Canvas do begin Pen.Style:=pssolid; Brush.Color:=pencolor; Brush.Style:=bssolid; Ellipse(round(x-pensize/16),round(y-pensize/16),round(x+pensize/16),round(y+pensize/16)); resetpen_brush; end; if doing=6 then begin with PaintBox.Canvas do begin Brush.Style:=bssolid; Pen.Color:=brushcolor; Pen.Width:=1; Rectangle(X-pensize,Y-pensize,X+pensize,Y+pensize); resetpen_brush; end; end; PaintBox.Canvas.MoveTo(x,y);} // Das waren jetzt spezielle Sachen in meinem Prog .. nich wichtig end; procedure Tmainform.imgpaint(mode:TPenMode;x,y:Integer); begin PaintBox.canvas.Pen.Mode:=mode; // hier wird der PenMode eingestellt. case doing of 2: begin PaintBox.Canvas.MoveTo(moused.X,moused.y); PaintBox.Canvas.LineTo(x,y); end; 3: PaintBox.Canvas.Rectangle(moused.x,moused.y,x,y); 4: PaintBox.Canvas.Ellipse(moused.x,moused.y,x,y); 5: begin ledtentertext.Left:=x; ledtentertext.Top:=y; ledtentertext.Visible:=true; end; 8: begin PaintBox.Canvas.Pen.Width:=1; PaintBox.Canvas.Pen.Style:=psdot; PaintBox.Canvas.Brush.Style:=bsclear; PaintBox.Canvas.Rectangle(moused.X,moused.Y,x,y); resetpen_brush; end; end; end; procedure Tmainform.PaintBoxMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Iairbrush:Integer; begin pnow.Text:=inttostr(x) + ', ' + inttostr(y); if mausd then pdiff.Text:=inttostr(-(moused.x-x)) + ', ' + inttostr(-(moused.y-y)); // Ko-Od-Anzeige if (mausd) and (doing=1) // Frei Zeichnen (Stift in M$-Paint) then begin PaintBox.Canvas.MoveTo(current.x,current.y); PaintBox.Canvas.LineTo(x,y); end; if mausd then imgpaint(pmnotxor,current.X,current.Y); // Objekt an alter Pos zeichnen, um es zu entfernen current.x:=x; // neue Ko-Od zuweisung current.y:=y; // " if mausd then imgpaint(pmnotxor,current.x,current.y); // Obejkt an aktueller Pos neu malen img.Canvas.Pen.Mode:=pmcopy; if (mausd) and (doing=7) then for Iairbrush:=1 to 5 do img.canvas.Pixels[randompixels(x),randompixels(y)]:=pencolor; end; procedure Tmainform.imgMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (mausd) and (doing <> 8) then imgpaint(pmcopy,current.x,current.y); // "richtiges" Zeichnen mausd:=false; end; PS: Farbverlust gibt habe ich noch nie bemerkt. Sieht nur etwas merkwürdig beim Zeichnen aus ^^ Hat allerdings den Vorteil, dass man besser sieht, wo man gerade langzeichnet |
Re: problem mit minipaint--->4ecke und kreise...
Zitat:
Aber für Zeichenprogramme ist das wirklich nicht schlecht, ich habe nur an einfache Animationen gedacht. Bitmaps sind trotzdem sauberer :mrgreen: . |
Re: problem mit minipaint--->4ecke und kreise...
so, ich habs nu hinbekommen, leider arbeite ich ohne eine paintbox und auch nicht mit delphi 7..
so hier nochmal für die nachwelt:
Delphi-Quellcode:
procedure Tpaint.FormMouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin //Rechteck else if BitBtnrechteck.Enabled = False then begin Mausgedrueckt := True; xanfang := x; yanfang := y; xende := x; yende := y; end end; procedure Tpaint.FormMouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer); begin //Rechteck if BitBtnrechteck.enabled = false then begin if MausGedrueckt = true then begin canvas.pen.mode := pmnotxor; canvas.rectangle (xanfang,yanfang,xende,yende); canvas.pen.style := psdot; canvas.rectangle (xanfang,yanfang,x,y); xende := x; yende := y; end end; end; procedure Tpaint.FormMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin //Rechteck If Bitbtnrechteck.enabled = false then begin canvas.pen.mode := pmcopy; Canvas.Pen.Style := pssolid ; canvas.pen.mode := pmcopy; Canvas.Pen.Style := pssolid ; xende := x; yende := y; Canvas.Rectangle(xanfang, yanfang, x, y); end; end; so viel spaß noch und danke nochmal |
Re: problem mit minipaint--->4ecke und kreise...
@la.ma: Brauch dir doch nicht leid zu tun ;)
@Khabarakh: Jo stimmt schon. Ich bin auch gerade so mehr oder weniger dabei, mein Paint umzubauen und über BMPs laufen zu lassen. Animationen sind da in der Tat eher weniger relevant ;) Ich denke, dass es insgesamt ganz gut ist, wenn man so ungefähr anfängt, wie ich das schrieb. Ist ja doch recht simpel und verständlich. Wenn man dann mehr auf Persormance etc. achten, was neues ausprobieren oder soetwas will, kann man's ja noch ändern. Nur Gott hat gleich perfekt angefangen :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 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