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

11/12/2005

0

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


Marceloneox

Marceloneox

Responder

Posts

12/12/2005

Adriano Santos

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:

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.


Responder

12/12/2005

Massuda

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.


Responder

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?


Responder

05/01/2006

Marceloneox

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


Responder

05/01/2006

Dpinho

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;


Responder

05/01/2006

Marceloneox

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.


Responder

05/01/2006

Michael

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


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar