Mover componentes de acordo com a posição do mouse
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
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
Curtidas 0
Respostas
Adriano Santos
11/12/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
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.
GOSTEI 0
Massuda
11/12/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.
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.
GOSTEI 0
Marceloneox
11/12/2005
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?
GOSTEI 0
Marceloneox
11/12/2005
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
[ ] s
GOSTEI 0
Dpinho
11/12/2005
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;
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;
GOSTEI 0
Marceloneox
11/12/2005
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.
Vlw.
GOSTEI 0
Michael
11/12/2005
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
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
GOSTEI 0