Evento do mouse sobre o componente

24/04/2013

15

Desejo saber fazer a seguinte coisa no Delphi 7: quando o cursor do mouse passar sobre o SpeedButton(apenas passar, sem clicar) o componente aumentaria de tamanho. Quando o cursor do mouse sair de cima, o componente voltar ao tamanho inicial. Se alguém puder me esclarecer ficaria muito grato.
Responder

Posts

24/04/2013

Rafael Mota

Boa Tarde!!

Para aumentar o tamanho no evento OnMouseMov do botão você coloca:
SpeedButton1.Height := 40;

Para voltar ao tomanho normal, no evento OnMouseMov do Form você coloca:
SpeedButton1.Height := 22;
Responder

24/04/2013

Joel Rodrigues

Opa, neste caso acho que você deveria utilizar os eventos OnMouseEnter (quando o mouse "entra" no controle) e OnMouseLeave (quando o mouse deixa o controle).

Aí utilizaria o que o amigo acima disse:
procedure TFormMain.SpeedButton1MouseEnter(Sender: TObject);
begin
  (Sender as TSpeedButton).Height := 40;
  (Sender as TSpeedButton).Width := 40;
end;

e
procedure TFormMain.SpeedButton1MouseLeave(Sender: TObject);
begin
  (Sender as TSpeedButton).Height := 22;
  (Sender as TSpeedButton).Width := 22;
end;
Responder

24/04/2013

Joel Rodrigues

Repare que dessa forma o botão aumenta, mas não mantém seu centro. Para isso seria preciso desloca-lo para a esquerda e para cima. Então ficaria assim:

procedure TFormMain.SpeedButton1MouseEnter(Sender: TObject);
begin
(Sender as TSpeedButton).Height := 40;
(Sender as TSpeedButton).Width  := 40;
(Sender as TSpeedButton).Left   := (Sender as TSpeedButton).Left - 9;
(Sender as TSpeedButton).Top   := (Sender as TSpeedButton).Left - 9;
end;


e

procedure TFormMain.SpeedButton1MouseLeave(Sender: TObject);
begin
(Sender as TSpeedButton).Height := 22;
(Sender as TSpeedButton).Width := 22;
(Sender as TSpeedButton).Left   := (Sender as TSpeedButton).Left + 9;
(Sender as TSpeedButton).Top   := (Sender as TSpeedButton).Left + 9;
end;


Aí eu considerei que o tamanho original é 22x22 e você está aumentando para 40x40. Então há uma diferença de 18x18. Sendo assim, deslocamos o botão para a esquerda e para cima em 9px (metade da variação).
Responder

24/04/2013

Joel Rodrigues

Só mais um comentário: observe que dessa forma você pode usar o mesmo evento para vários botões, pois aí estamos usando o Sender do método e não referenciando diretamente o botão pelo nome.
Boa sorte e qualquer coisa, é só falar.
Responder

24/04/2013

Rafael Mota

Obrigado pelo complemento Joel!

Mas,eu acho que no Delphi 7 o speedbutton ainda não possui os eventos OnMouseEnter e OnMouseLeave.
Responder

24/04/2013

Joel Rodrigues

Vixe, véi... bem observado.
Que bobeira minha.
Faz tanto tempo que não vejo o D7 que às vezes me esqueço desses detalhes.
Obrigado por lembrar.
Abraço.
Responder