Array
(
)

Mover componentes de acordo com a posição do mouse

Marceloneox
   - 11 dez 2005

E aí galera, blz?

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


Adriano Santos
   - 12 dez 2005


Citação:
E aí galera, blz?

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


Vai precisar fazer mudar o left e o top dos shapes igualando-os a posição do mouse, mais ou menos assim:

#Código


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.


Massuda
   - 12 dez 2005

Não sei se entendi direito...

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.


Marceloneox
   - 04 jan 2006

#Código


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?


Marceloneox
   - 05 jan 2006

Consegui criar um método pra mover os Shapes, mas não consegui fazer eles deslizarem até o controle que o mouse está posicionado. Os Shapes tem que deslizar pelo Form até se posicionarem nas extremidades do componente onde o mouse está. Se alguém puder me ajudar...

[ ] s


Dpinho
   - 05 jan 2006

Fiz isto utilizando o OnMouse do Button
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;


Marceloneox
   - 05 jan 2006

A questão de posicionar os Shapes eu consegui resolver, criei um método só pra todos os botões que os Shapes se ajustarão, mas não consigo fazer os Shapes deslizarem até o botão que o cursor do mouse está posicionado. Quando o mouse entra em outro botão, simplesmente os Shapes aparecem no novo controle que o mouse está posicionado. Eu quero que eles vão deslizando pelo Form da posição antiga até o nova posição.

Vlw.


Michael
   - 05 jan 2006

Para produzir esta animação vc vai ter que colocar o código que movimenta os shapes dentro de um timer, e ir ajustando seus Left´s e Top´s a cada iteração.

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