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 !!!