Code: Alles auswählen
procedure TPaintControl.Paint;
var
  dx,dy:Integer;
begin
  inherited Paint;
  dx:=0; dy:=0;
   if ismouseup = true then begin
     ismouseup:=false;
     buffer.canvas.copyrect(rect(mx,my,sx+1,sy+1),buffer2.canvas,rect(mx,my,sx+1,sy+1));
   end;
 
//  if t = true then begin
    if oldrect.Right-sx > 0 then
      dx:=oldrect.Right-sx
    else
     dx:=sx-oldrect.Right;
 
    if oldrect.Bottom-sy > 0 then
      dy:=oldrect.Bottom-sy
   else
      dy:=sy-oldrect.Bottom;
 
 
    oldrect.Right:=dx+oldrect.Right+1;
    oldrect.Bottom:=dy+oldrect.Bottom+1;
 
 
    buffer3.canvas.copyrect(oldrect,buffer.canvas,oldrect);
    t:=False;
//  end;
  t:=True;
  // buffer3.Canvas.Draw(0,0,Buffer);
 
  with Buffer2.Canvas do begin
    buffer2.Canvas.Brush.Style:=bsSolid;
    buffer2.Canvas.Brush.Color:=clWhite;
    Rectangle(0,0,buffer2.Width,buffer2.Height);
 
//    buffer2.canvas.copyrect(rect(mx,my,sx+1,sy+1),buffer.canvas,rect(mx,my,sx+1,sy+1));
 
    Brush.style:=bsClear;
    Pen.Style:=psDash;
    Pen.color:=clRed;
    Rectangle(mx,my,sx,sy);
 
    buffer3.canvas.copyrect(rect(mx,my,sx+1,sy+1),buffer2.canvas,rect(mx,my,sx+1,sy+1));
 
 
  //  canvas.copyrect(rect(mx,my,sx+1,sy+1),buffer3.canvas,rect(mx,my,sx+1,sy+1));
 
   Canvas.Draw(0,0,Buffer3);
  end;
auf diese art und weise geht es zwar !  sobalt ich aber die größe verwendere(maximieren klickte) .....
dann kann man die alte zeichen fläche wieder sehen....
das passiert beim vergrößern des forms:
Code: Alles auswählen
procedure TForm1.FormResize(Sender: TObject);
var
  ox,oy:Integer;
begin
  if Assigned(Buffer) then
  begin
  ox:=buffer.Width; oy:=buffer.Height;
  Buffer.Width:=Width;
  Buffer.Height:=Height;
  Buffer2.Width:=Width;
  Buffer2.Height:=Height;
  Buffer3.Width:=Width;
  Buffer3.Height:=Height;
 
  buffer.canvas.FillRect(ox,oy,Width,Height);
  buffer3.canvas.FillRect(0,0,Width,Height);
  buffer2.canvas.FillRect(0,0,Width,Height);
  canvas.FillRect(0,0,Width,Height);
  end;
end;
ich mache das so umstälich weil ich möchte mehre figuren zeichnen und nicht nur die aktuell !
die idee war folgende:
ich zeichne in einen buffer(buffer2) und davor lösche ich nur diesen buffer ständig !
jetzt gebe ich den inhalt aus buffer2 auf buffer3 aus und zeichne in anschließend auf den canvas !
sobalt ich die maustaste loslasse zeichne ich den inhalt von buffer2 auf buffer !
und genau hier liegt warscheinlich das problem:
ich kann buffer nicht einfach beim vergrößern neu installisieren per rechteck weil dann würde ja alles verschwinden was ich jemals gezeichne habe  !
Eine andere idee währe noch folgene, ich weiß nur nicht wie ich sie umsetztne könnte/sollte:
ich zeichne im moment von Mausklick position bis tasäliche Mause Move position alles bei jeder mausbewegung neu, richtig ?
was währe wenn jetzt nicht von der Mausklick position alles neu zeichnen würde sondern von der "alten" position alles neu zeichnen würde... ich wette das würde ernorm viel cpu last sparen !!
problem dabe isi nur ich weiß nicht wie ich es umsetzten soll !!!