Ajuda - Busca - Membros - Calendário
Versão Completa: OnMouseMove
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
Blackleaf
Bom eu estava montando um programa aí para "incrementar" eu decidi botar um efeito OnMouseMove.

Aí eu sei que para botar esses efeitos assim eu preciso colocar num Bitbtn que já tem a sua propriedade para imagens nele.

Aí eu queria saber que comando eu posso usar para quando eu passar o mouse em cima do bitbtn ele mudar a imagem de dentro (estilo os navegadores feitos em delphi).
Jhonas
QUOTE
eu queria saber que comando eu posso usar para quando eu passar o mouse em cima do bitbtn ele mudar a imagem de dentro (estilo os navegadores feitos em delphi).


CODE
cc : integer = 0;
implementation

{$R *.DFM}

procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   cc := cc + 1;
   If cc = 1 then
     begin
       BitBtn1.Glyph.LoadFromFile('c:\ignore.bmp');
       sleep(50);
       exit;
     end
   else
     begin
       BitBtn1.Glyph.LoadFromFile('c:\import.bmp');
       cc := 0;
       sleep(50);
     end;


isto vai te dar uma noção de como fazer animação

http://www.geocities.com/wallstreet/exchan...hi/delphi_1.htm
Blackleaf
Hey Jhonas!

Acho que a lógica do código está certa, mas eu não estou conseguindo um boa qualidade, fica piscando quando eu passo o mouse por cima do botão, já até tentei mudar para Gif, e diminuir o sleep (até mesmo tirar), mas ainda fica o tal "pisca-pisca" e ainda as vezes trava o botão e fica numa imagem só (questão de segundos).

O que eu poderia fazer para parar esse "pisca-pisca" ?
Jhonas
QUOTE
Acho que a lógica do código está certa, mas eu não estou conseguindo um boa qualidade, fica piscando quando eu passo o mouse por cima do botão, já até tentei mudar para Gif, e diminuir o sleep (até mesmo tirar), mas ainda fica o tal "pisca-pisca" e ainda as vezes trava o botão e fica numa imagem só (questão de segundos).

O que eu poderia fazer para parar esse "pisca-pisca" ?


O evento MouseMove do botão vai provocar isto sempre, porque o ponteiro do mouse tem muitas coordenadas (X,Y) de controle.


O melhor não é usar evento MouseMove do botão mas sim o evento OnClick. ou seja qundo voce clicar uma vez fica com uma figura, quando clicar novamente troca a figura.

Procure no forum, já tem algo do tipo.

abraço
--Morpheus --
QUOTE(Blackleaf @ 17/06/2008 - 12:37) *
O que eu poderia fazer para parar esse "pisca-pisca" ?

a menos que você encontre um componente com esta funcionalidade, você pode criar seu próprio, derivando do TBitBtn e processando as mensagens (message): CM_MOUSEENTER (ao entrar) e CM_MOUSELEAVE (ao deixar)

Deste modo, a imagem será trocada quando o mouse "entrar" ou "sair" da área retangular do botão. Neste novo componente você define um variável de controle e os métodos mais ou menos deste modo:
CODE
unit ....
uses ...
type
  TBitBtnNovo = class(TBitBtn)
    constructor Create(AOwner: TComponent); override;
    ...
  private
    FMouseSobre :Boolean;
    procedure MouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure MouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  ...
  end;

implementation

constructor TBitBtnNovo.Create(AOwner: TComponent); override;
begin
  inherited;
  FMouseSobre := False;
end;

procedure TBitBtnNovo.MouseEnter(var Message: TMessage);
begin
  if Not FMouseSobre then
  begin
    FMouseSobre := True;
    Glyph.LoadFromFile('c:\imagem_mouse_sobre.bmp');
  end;
end;

procedure TBitBtnNovo.MouseLeave(var Message: TMessage);
begin
  if FMouseSobre then
  begin
    Glyph.LoadFromFile('c:\imagem_mouse_fora.bmp');
    FMouseSobre := False;
  end;
end;

se funcionar, você pode até tentar incrementar o componente, adicionando propriedades para definição das imagens referentes a cada uma das duas situações.

t+
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.