ich habe ein problem, ich möchte ein windows paint nach schreiben(ansicht keine problem) nur ist er beim zeichnen eines größeren objekts einfach zu langsamm/träge...
ich weiß einfach nicht mehr weiter und hoffe das ihr euch den code anschauen könnt und mir helfen könnt:
Code: Alles auswählen
procedure TForm1.PaintBox1MouseDown(Sender: TOBject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  r1:trect;
begin
  if (ssLeft in Shift) and (ssright in shift = false) then begin
    mx:=x; my:=y;
//    r1.left:=; r1.top:=0; r1.Right:=buffer3.Width; r1.Bottom:=buffer3.Height;
    buffer3.Canvas.CopyRect(br,buffer.canvas,br);
    SetValue(buffer.canvas);
  end;
 
end;
 
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  r1:Trect;
begin
  if ssLeft in Shift then begin
    if t = true then begin
      buffer.Canvas.CopyRect(br,buffer3.canvas,br);
      t:=False;
    end;
 
    if Toolindex = 1 then begin
      Buffer.Canvas.moveto(mx,my);
      Buffer.Canvas.LineTo(x,y);
    end;
 
//    if mx < x then
      r1.left:=mx;
//    else
  //    r1.left:=mx+1;
 
//    if my < y then
     r1.top:=my;
//    else
//     r1.top:=my+1;
 
//    if x > mx then
      r1.right:=x;
//    else
//      r1.right:=x-1;
 
//    if y > my then
      r1.Bottom:=y;
//    else
//      r1.Bottom:=y-1;
 
    if Toolindex = 2 then Buffer.Canvas.Rectangle(r1);
    if Toolindex = 4 then Buffer.canvas.Ellipse(r1);
    t:=true;
    paintbox1.canvas.CopyRect(br,buffer.canvas,br);
    if ti >= tc then begin
      ti:=0;
 
      br.left:=mx-1;
      br.top:=my-1;
      br.right:=x+1;
      br.Bottom:=y+1;
      paintbox1.canvas.CopyRect(br,buffer.canvas,br);
    end
    else begin
      inc(ti);
    end;
 
  end;
end;
 
procedure TForm1.PaintBox1MouseUp(Sender: TOBject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mx:=-1; my:=-1; t:=false; clear:=False; BackupvaluetoBuffer;
end;
 
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  r1:TRect;
begin
  r1.left:=0; r1.top:=0; r1.Right:=buffer.Width; r1.Bottom:=buffer.Height;
  paintbox1.canvas.CopyRect(r1,buffer.canvas,r1);
 
end;
 
procedure TForm1.PaintBox1Resize(Sender: TObject);
begin
    SetBufferSize(paintbox1.Width,paintbox1.Height)
end;ich frage mich wie das die IDE von lazarus macht !
denn dort kann ich große objekte problemslos zeichnen !
selbst in meinem paint2 ist es recht träge !
weiß jemmand rat ?
VIELEN DANK FÜR EURE HILFE !

 
 Verein
Verein 
 Links
Links Suche
Suche