Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ao Passar o Mouse num SpeedButton abrir PopUpMenu


robinhocne

Pergunta

Pessoal como eu faço para quando passar com o cursor em cima de um determinado SpeedButton aparecer automaticamento um PopUpMenu....tipo assim...

para o SppedButton1 eu tenho o PopUpMenu1 ai ai passar o cursor em cima desse SpeedButton eu quero que aparece o PopUpMenu1 que está linkado no Speed Button 1 e ao passar o mouse em cima do SpeedButton2 abrir o PopUpMenu2......

uma ajuda!!

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

O componente SpeedButton tem uma propriedade chamada PopupMenu onde voce deverá linkar com um componente

PopupMenu da paleta Standard e usando o botão direito do mouse voce faz a chamada ao PopupMenu.

Entretanto se quiser chamar pelo evento ( MouseMove ) ao passar o cursor pelo SpeedButton faça assim:

procedure TForm1.SpeedButton1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
   PopupMenu1.Popup(SpeedButton1.top+380,SpeedButton1.left-20);
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
O componente SpeedButton tem uma propriedade chamada PopupMenu onde voce deverá linkar com um componente

PopupMenu da paleta Standard e usando o botão direito do mouse voce faz a chamada ao PopupMenu.

Entretanto se quiser chamar pelo evento ( MouseMove ) ao passar o cursor pelo SpeedButton faça assim:

procedure TForm1.SpeedButton1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
   PopupMenu1.Popup(SpeedButton1.top+380,SpeedButton1.left-20);
end;

abraço

E como eu faço para que ao sair o cursor de cima ele some ??

Link para o comentário
Compartilhar em outros sites

  • 0
E como eu faço para que ao sair o cursor de cima ele some ??

neste caso voce deverá criar o PopupMenu em tempo de execuçao, para poder destruí-lo quando o cursor sair da área do PopupMenu.

Caso contrário deverá criar um item dentro do PopupMenu para fecha-lo sem executar nada.

Um exemplo

http://forum.devmedia.com.br/viewtopic.php...c7f7cc8940fc988

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
E como eu faço para que ao sair o cursor de cima ele some ??

neste caso voce deverá criar o PopupMenu em tempo de execuçao, para poder destruí-lo quando o cursor sair da área do PopupMenu.

Caso contrário deverá criar um item dentro do PopupMenu para fecha-lo sem executar nada.

Um exemplo

http://forum.devmedia.com.br/viewtopic.php...c7f7cc8940fc988

abraço

Creio que se criar em tempo de execução não vai ficar muito bom, pois são varios PopUpMenus diferentes e eu teria que deixar eles criados já seria uma boa para mim, pois em tempo de execução na hora que eu for liberar SubMenu para os usuarios vai dar mais trbalho e já criado não!

agora sobre criar o item eu não entendi ! você poderia me ajudar ?

Link para o comentário
Compartilhar em outros sites

  • 0
agora sobre criar o item eu não entendi ! você poderia me ajudar ?

Na propriedade Items do PopupMenu adicione um item < Sair > e não coloque nenhum código para este item

O PopupMenu só é fechado quando voce escolhe um dos itens ... se voce tiver um item sem código, fechará o PopupMenu sem executar nada

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
agora sobre criar o item eu não entendi ! você poderia me ajudar ?

Na propriedade Items do PopupMenu adicione um item < Sair > e não coloque nenhum código para este item

O PopupMenu só é fechado quando voce escolhe um dos itens ... se voce tiver um item sem código, fechará o PopupMenu sem executar nada

abraço

Hum entendi......

mas ainda não seria a maneira certa que eu queria!

Não tem nenhum outro jeito de que quando tirar o mouse de cima do botão o PopUpMenu sumir ???

Link para o comentário
Compartilhar em outros sites

  • 0

Resolvido......

unit Unit2;
interface
uses
Buttons,ExtCtrls,Menus,windows,SysUtils,classes;
type
 TMySpeed = class
  private
    FSbtn:TSpeedButton;
    FPopAdmRel: TPopupMenu;
    FTimer:TTimer;
    Fxmax:integer;
    Fxmin:integer;
    Fymin:integer;
    FyMax:integer;
    procedure MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
    procedure Timer(Sender: TObject);
  public
   Constructor Create(cSbtn:TSpeedButton;cPopAdmRel: TPopupMenu);reintroduce;
   Destructor Destroy;Override;
 end;

implementation

{ TMySpeed }
constructor TMySpeed.Create(cSbtn: TSpeedButton; cPopAdmRel: TPopupMenu);
begin
  FSbtn:=cSbtn;
  FPopAdmRel:=cPopAdmRel;
  cSbtn.OnMouseMove:=MouseMove;
  FTimer:=TTimer.Create(nil);
  FTimer.Interval:=100;
  FTimer.Enabled:=false;
  FTimer.OnTimer:=Timer;
end;
destructor TMySpeed.Destroy;
begin
   FTimer.Free;
  inherited;
end;

procedure TMySpeed.MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  crPos:TPoint;
begin
{  if not assigned(FTimer) then
   begin
     FTimer:=TTimer.Create(nil);
     FTimer.Interval:=100;
     FTimer.Enabled:=false;
     FTimer.OnTimer:=ObjSpeed.Timer;
   end;}
  GetCursorPos(CrPos);
  with FSbtn do
  begin
    Fxmax:=(ClientOrigin.X +ClientWidth);
    Fxmin:=ClientOrigin.X;
    Fymin:= (ClientOrigin.Y);
    FyMax:=ClientOrigin.Y+ ClientHeight;
    FTimer.Enabled:=true;
    FPopAdmRel.Popup(Fxmax,Fymin);
  end;
end;

procedure TMySpeed.OnTimer(Sender: TObject);
const
 WidtItemMenu = 75;
 HeightItemMenu = 25;
var
crPos:TPoint;
begin
   GetCursorPos(CrPos);
   if (CrPos.x > Fxmax+WidtItemMenu )or
      (CrPos.x < Fxmin)or
      (CrPos.y > FyMax +  HeightItemMenu*FPopAdmRel.Items.Count)or
      (CrPos.y < FyMin)
      then
    begin
      keybd_event(vk_escape,0,0,0);
      FTimer.Enabled:=false;
    end;
end;
No Formulario defina uma Variavel do Tipo TMySpeed pois agora iremos Instancia-la
procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
      ObjSpeed:TMySpeed;
  public
No evento OnShow Instancie o Objeto
procedure TForm1.FormShow(Sender: TObject);
begin
  ObjSpeed:=TMySpeed.Create(SpeedButton1,PopupMenu1);
end;
e No Evento OnClose Destrua-0
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 ObjSpeed.FREE;
end;

Não esqueça de Definir a Uses da Classe Agora na Secção Interface e não mais na Secçao Implementation

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...