Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SauloBr

Problemas com o Canvas

Recommended Posts

Bom dia colegas do Imasters,

 

Gostaria de saber o pq que quando eu abro uma janela por cima do meu desenho canvas, ele simplesmente apaga a parte que a janela estava sobreposta?

 

 

 

Vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente dar um Repaint depois que fechar a janela.

Marcio o repaint apaga todo o desenho...hehehe Quero que o desenho não se apague quando a janela sobrepor!

:blink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem algum exemplo de como esta fazendo para desenhar ?

Estou desenhando com os metodos normais do Canvas(MoveTo,LineTo) existente no fórum e na internet, utilizando os eventos do MouseDown,MouseUp e MouseMove.

 

Exemplo:

procedure TForm1.FormMouseUp(Sender: TObject);

begin

  case Ferramenta of

  frLinha:

	begin
	  Canvas.MoveTo(Origem.X, Origem.Y);
	  Canvas.LineTo(X, Y)
	end;

  frRetângulo: Canvas.Rectangle(Origem.X, Origem.Y, X, Y);

  frElipse: Canvas.Ellipse(Origem.X, Origem.Y, X, Y);

  frRetRedondo: Canvas.RoundRect(Origem.X, Origem.Y, X, Y, . (Origem.X - X) div 2, (Origem.Y - Y) div 2);

  end;

  FlagDesenho := False;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: . Integer);

begin

  if FlagDesenho then

   begin

	 Canvas.Pen.Mode := pmNotXor;

	 case Ferramenta of

	 frLinha :

	   begin

		  Canvas.MoveTo(Origem.X, Origem.Y);
		  Canvas.LineTo(MovePonto.X, MovePonto.Y);
		  Canvas.MoveTo(Origem.X, Origem.Y);
		  Canvas.LineTo(X, Y);

	   end;

	 frRetângulo :

	 begin

		Canvas.Rectangle(Origem.X, Origem.Y, MovePonto.X, MovePonto.Y);
		Canvas.Rectangle(Origem.X, Origem.Y, X, Y);

	 end;

	frElipse :

	begin

	   Canvas.Ellipse(Origem.X, Origem.Y, X, Y);
	   Canvas.Ellipse(Origem.X, Origem.Y, X, Y);

	end;

	frRetRedondo :

	begin

	  Canvas.RoundRect(Origem.X, Origem.Y, X, Y,(Origem.X - X) div 2, (Origem.Y - Y) div 2);
	  Canvas.RoundRect(Origem.X, Origem.Y, X, Y,(Origem.X - X) div 2, (Origem.Y - Y) div 2);

	end;

 end;

	MovePonto := Point(X, Y);

end;

	Canvas.Pen.Mode := pmCopy;

end;

No caso eu só estou usando a ferramenta linha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem algum exemplo de como esta fazendo para desenhar ?

Estou desenhando com os metodos normais do Canvas(MoveTo,LineTo) existente no fórum e na internet, utilizando os eventos do MouseDown,MouseUp e MouseMove.

 

Exemplo:

procedure TForm1.FormMouseUp(Sender: TObject);

begin

  case Ferramenta of

  frLinha:

	begin
	  Canvas.MoveTo(Origem.X, Origem.Y);
	  Canvas.LineTo(X, Y)
	end;

  frRetângulo: Canvas.Rectangle(Origem.X, Origem.Y, X, Y);

  frElipse: Canvas.Ellipse(Origem.X, Origem.Y, X, Y);

  frRetRedondo: Canvas.RoundRect(Origem.X, Origem.Y, X, Y, . (Origem.X - X) div 2, (Origem.Y - Y) div 2);

  end;

  FlagDesenho := False;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: . Integer);

begin

  if FlagDesenho then

   begin

	 Canvas.Pen.Mode := pmNotXor;

	 case Ferramenta of

	 frLinha :

	   begin

		  Canvas.MoveTo(Origem.X, Origem.Y);
		  Canvas.LineTo(MovePonto.X, MovePonto.Y);
		  Canvas.MoveTo(Origem.X, Origem.Y);
		  Canvas.LineTo(X, Y);

	   end;

	 frRetângulo :

	 begin

		Canvas.Rectangle(Origem.X, Origem.Y, MovePonto.X, MovePonto.Y);
		Canvas.Rectangle(Origem.X, Origem.Y, X, Y);

	 end;

	frElipse :

	begin

	   Canvas.Ellipse(Origem.X, Origem.Y, X, Y);
	   Canvas.Ellipse(Origem.X, Origem.Y, X, Y);

	end;

	frRetRedondo :

	begin

	  Canvas.RoundRect(Origem.X, Origem.Y, X, Y,(Origem.X - X) div 2, (Origem.Y - Y) div 2);
	  Canvas.RoundRect(Origem.X, Origem.Y, X, Y,(Origem.X - X) div 2, (Origem.Y - Y) div 2);

	end;

 end;

	MovePonto := Point(X, Y);

end;

	Canvas.Pen.Mode := pmCopy;

end;

No caso eu só estou usando a ferramenta linha.

 

Márcio, eu acho q o certo é que não ocorra o repaint do form, pq ele faz isso automatico com os desenhos canvas, deve ser isso que apaga. Agora como evitar que o form não ative o repaint natural( nativo do form)? Sera que tenho q redesenhar a tela antiga?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.