AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi problem mit minipaint--->4ecke und kreise...
Thema durchsuchen
Ansicht
Themen-Optionen

problem mit minipaint--->4ecke und kreise...

Ein Thema von la.ma · begonnen am 13. Apr 2005 · letzter Beitrag vom 14. Apr 2005
Antwort Antwort
la.ma

Registriert seit: 30. Mär 2005
4 Beiträge
 
#1

problem mit minipaint--->4ecke und kreise...

  Alt 13. Apr 2005, 12:59
hallo,

also ich habe genau das selbe problem, wie hier beschrieben und zwar da punkt 1.

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
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: problem mit minipaint--->4ecke und kreise...

  Alt 13. Apr 2005, 14:58
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 Hier im Forum suchenOffScreenBitmaps um, die du vor dem Zeichnen wieder leerst, dann hast du erstens bessere Performance und zweitens eben dein Problem gelöst.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Jarmen_Kell

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

Re: problem mit minipaint--->4ecke und kreise...

  Alt 13. Apr 2005, 15:40
Wenn du's mit den PenModes machen willst, müsste das vom Prinzip her so aussehen:

Delphi-Quellcode:
#####
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;
Ich hab einige unwichtige Sachen rausgenommen und Kommis eingefpgt, und hoff' ma, dass du durchsteigst.

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
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: problem mit minipaint--->4ecke und kreise...

  Alt 13. Apr 2005, 16:06
Zitat von Jarmen_Kell:
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
Ich habe Farbverfälschung, nicht Farbverlust geschrieben .
Aber für Zeichenprogramme ist das wirklich nicht schlecht, ich habe nur an einfache Animationen gedacht.
Bitmaps sind trotzdem sauberer .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
la.ma

Registriert seit: 30. Mär 2005
4 Beiträge
 
#5

Re: problem mit minipaint--->4ecke und kreise...

  Alt 14. Apr 2005, 14:54
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
  Mit Zitat antworten Zitat
Jarmen_Kell

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

Re: problem mit minipaint--->4ecke und kreise...

  Alt 14. Apr 2005, 20:33
@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
  Mit Zitat antworten Zitat
Antwort Antwort


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:52 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