Mover componentes de acordo com a posição do mouse
11/12/2005
0
Estou fazendo um instalador e gostaria de fazer uma coisa um pouco ´diferente´... Coloquei alguns botões no Form e quatro Shapes. Quero que no botão que o mouse posicionar, os Shapes se movam cada um para uma extremidade do botão que o mouse está.
Ex.: Se posicionar o mouse no botão debaixo, os shapes vão descendo e cada um fique em uma ´ponta´ do botão. Se for no botão de cima, os shapes subam, fazendo o mesmo...
Desde já agradeço a ajuda.
[ ]s
Marceloneox
Posts
12/12/2005
Adriano Santos
Vai precisar fazer mudar o left e o top dos shapes igualando-os a posição do mouse, mais ou menos assim:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Shape1.Left := X; Shape1.Top := Y; end;
Precisa só fazer as contas corretas para que o shape fique no local que vc deseja.
12/12/2005
Massuda
A princípio, (acho que) você pode acompanhar o movimento do cursor do mouse sobre o form usando o evento .OnMouseMove do form e para saber se o mouse está sobre algum controle, use o método .ControlAtPos do form; talvez tenha que converter as coordenadas do mouse para o sistema de coordenadas local, ou seja, relativo ao form, usando o método .ScreenToClient do form.
Para mover os shapes, basta alterar as propriedades .Top e .Left do shape.
04/01/2006
Marceloneox
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Shape1.Left := X; Shape1.Top := Y; end;
Com esse código moverei os Shapes no Form de uma forma geral, e não é muito bem isso o que eu quero. Quero que eles se movam só quando entram em um componente, um botão por exemplo. Se o mouse entrar na região do botão, os Shapes se movem e se ajustam nas extremidades deste botão, entendeu?
05/01/2006
Marceloneox
[ ] s
05/01/2006
Dpinho
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Shape1.Left := Button1.Left - 80;
Shape1.Top := Button1.Top;
end;
procedure TForm1.Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Shape1.Left := Button2.Left - 80;
Shape1.Top := Button2.Top;
end;
05/01/2006
Marceloneox
Vlw.
05/01/2006
Michael
Vc vai ter tbm que pensar em um algoritmo para calcular a trajetória dos componentes até a nova posição, traçando corretamente o caminho a ser percorrido pelos shapes. Simples, mas não trivial.
[]´s
Clique aqui para fazer login e interagir na Comunidade :)