Problema do Canvas do Delphi 6?

Delphi

26/03/2003

O programa abaixo no Delphi3 funciona perfeitamente. No Delphi 6 pisca feito maluco. Alguem sabe qual é o problema?


var
GuardaLinhaResize : integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
with Image1 do
begin
canvas.Pen.Color:= clwhite;
canvas.Brush.Color:= clwhite;
canvas.Rectangle(0,0,image1.Width,Image1.Height);

canvas.Pen.Color:= clblue;
canvas.Brush.Color:= clblue;
canvas.Rectangle(100,100,300,300);
end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
with Image1 do
begin
Canvas.Pen.Style := psdot;
Canvas.Pen.Mode := pmNot;
if GuardaLinhaResize > 0 then
begin
Canvas.MoveTo(GuardaLinhaResize,0);
Canvas.LineTo(GuardaLinhaResize,Image1.Height);
end;
GuardaLinhaResize := X;
Canvas.MoveTo(X,0);
Canvas.LineTo(X,Image1.Height);
Canvas.Pen.Mode := pmCopy;
end;
end;


Anonymous

Anonymous

Curtidas 0

Respostas

Anonymous

Anonymous

26/03/2003

Será que ninguem sabe? Digam pelo menos alguma coisa.


GOSTEI 0
Anonymous

Anonymous

26/03/2003

Digam algo


GOSTEI 0
Anonymous

Anonymous

26/03/2003

algo


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

26/03/2003

[b:5def551d14]var[/b:5def551d14]
GuardaLinhaResize : integer;
Fbitmap : TBitmap; [color=#0000FF:5def551d14]//lugar aonde vamos desenhar[/color:5def551d14]

[b:5def551d14]procedure[/b:5def551d14] TForm1.FormCreate(Sender: TObject);
[b:5def551d14]begin[/b:5def551d14]
FBitmap := TBitmap.create(self); /cria o bitmap
Fbitmap.width := Image1.width; [color=0000FF:5def551d14]// define o tamanho[/color:5def551d14]
FBitmap.Height := Image1.Heigth;
[b:5def551d14]with[/b:5def551d14] FBitmap[b:5def551d14] do[/b:5def551d14]
[b:5def551d14]begin[/b:5def551d14]
canvas.Pen.Color:= clwhite;
canvas.Brush.Color:= clwhite;
canvas.Rectangle(0,0,Image1.Width,Image1.Height);

canvas.Pen.Color:= clblue;
canvas.Brush.Color:= clblue;
canvas.Rectangle(100,100,300,300);
[b:5def551d14]end[/b:5def551d14];
[b:5def551d14]end[/b:5def551d14];

[b:5def551d14]procedure[/b:5def551d14] TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
[b:5def551d14]begin[/b:5def551d14]
[b:5def551d14]with[/b:5def551d14] FBitmap[b:5def551d14] do[/b:5def551d14]
[b:5def551d14]begin[/b:5def551d14]
Canvas.Pen.Style := psdot;
Canvas.Pen.Mode := pmNot;
[b:5def551d14]if [/b:5def551d14]GuardaLinhaResize > 0 [b:5def551d14]then[/b:5def551d14]
[b:5def551d14]begin[/b:5def551d14]
Canvas.MoveTo(GuardaLinhaResize,0);
Canvas.LineTo(GuardaLinhaResize,Image1.Height);
[b:5def551d14]end[/b:5def551d14];
GuardaLinhaResize := X;
Canvas.MoveTo(X,0);
Canvas.LineTo(X,Image1.Height);
Canvas.Pen.Mode := pmCopy;
[b:5def551d14]end[/b:5def551d14];
Image1.canvas.copyrect(bounds(0,0,image1.width,image1.heigth),FBitmap.canvas,bounds(0,0,FBitmap.width,FBitmap.heigth));
[b:5def551d14]end[/b:5def551d14];

[b:5def551d14]procedure[/b:5def551d14] TForm1.FormClose(Sender: TObject);
[b:5def551d14]begin[/b:5def551d14]
FBitmap.free; [color=#0000FF:5def551d14]//não esqueça de liberar o bitmap da memória[/color:5def551d14]
[b:5def551d14]end[/b:5def551d14];

assim não pisca, primeiro você faz todos os desenhos na memória e dapois passa a imagem pronta para a tela
visite esta página, ela te dá uma boa noção de como trabalhar com o canvas e explica o porque de cada coisa. http://www.cristianok.hpg.ig.com.br/art1/index.htm


GOSTEI 0
Anonymous

Anonymous

26/03/2003

Muito obrigado, Marcelo Saviski.

Abraço,
Thiago S.


GOSTEI 0
POSTAR