Fórum Reta de um ponto ate a posicao do mouse no mousemove #255194
20/10/2004
0
Sei que existe o metodo DrawFocusRect do canvas, que faz exatamente isso so que com um retangulo. E para apaga-lo, é so dar outro DrawFocusRect para os mesmo pontos. Mas preciso disso para uma reta.
Desde ja agradeco qq ajuda,
Gabriela.
Gabriela
Curtir tópico
+ 0Posts
20/10/2004
Dbezerra
Muito legal saber q mulheres de nomes tão bonitos também se interessam pelo Delphi. :D
Bom, acho q arrumei uma solução para o seu problema. Faça o seguinte:
No [b:31fbf7e6a0]private[/b:31fbf7e6a0] do form, declare uma variável booleana, por exemplo ´[b:31fbf7e6a0]Clicou[/b:31fbf7e6a0]´.
No evento ´[b:31fbf7e6a0]OnMouseDown[/b:31fbf7e6a0]´ da imagem, coloque o seguinte código:
Clicou := True; // Só pintar a linha quando o usuário clicar
Canvas.Brush.Color := clBtnFace; // Cor do formulário
Canvas.FillRect(ClientRect); // Limpa tudo que foi pintado no formulário
Image1.Repaint; // Redesenha a imagem
Canvas.Pen.Style := psDash; // Seta linha pra estilo pontinhado
Canvas.MoveTo(X, Y); // Posiciona a caneta do canvas na posição onde
// o usuário clicou.
No evento ´[b:31fbf7e6a0]OnMouseMove[/b:31fbf7e6a0]´ da imagem, coloque este código:
if Clicou then
Canvas.LineTo(X, Y); // pinta a linha desde aonde a caneta foi
// posicionada até aonde o mouse estiver posicionado no momento
E, por fim, no evento ´[b:31fbf7e6a0]OnMouseUp[/b:31fbf7e6a0]´ da imagem, coloque o código a seguir:
Clicou := False; // Faz com que ele não pinte caso o usuário não tenha
// clicado antes na imagem
Não sei se era exatamente isso que você queria, mas acho que isso deve te ajudar...
Um Abraço! :wink:
Gostei + 0
22/10/2004
Gabriela
Mas teste seu código e a reta continuava, não sumia...
Mas ja consegui resolver, vou colocar aqui se alguem precisar de alguma coisa parecida ( o segredo é colocar a caneta no mode PMNOT (ele pinta com as cores inversas a da imagem, e depois é so pintar por cima que volta ao normal!):
Foi mais ou menos assim:
clicou: integer; inicializa clicou := 0; OnMouseDown if clicou > 1 then begin Image1.Canvas.MoveTo(p1.X,p1.y); Image1.Canvas.LineTo(p2.x,p2.y); end; clicou := 1; p1.x := x; p1.y := y; OnMouseMove image1.Canvas.Pen.Mode := pmNot; if clicou > 1 then begin Image1.Canvas.MoveTo(p1.X,p1.y); Image1.Canvas.LineTo(p2.x,p2.y); end; if clicou >=1 then begin p2.X := x; p2.Y := y; end; Image1.Canvas.MoveTo(p1.X,p1.y); Image1.Canvas.LineTo(x,y); inc(clicou);
Abraços, Gabriela.
Gostei + 0
22/10/2004
Marcelo Saviski
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)