PopUpMenu sotto Pulsante (TSpeedButton)

Chi usa le Librerie Jedy in Delphi trova su TJvSpeedButton la property DropDownMenu.

A volte risulta necessario, visualizzare, un Menu in una posizione voluta,
per farlo basta sfruttare un PopUpMenu, posizionandolo dove serve.

Nell'esempio visualizzeremo un Menu di tipo PopUp sotto un Pulsante (TSpeedButton).

Utilizzeremo ClientOrigin.X e  ClientOrigin.Y delllo SpeedButton per posizionare
il PopUp menu dove serve;

creiamo qualche procedura di verifica

controlla quale Pulsante e' stato cliccato
mnuAttivo,mnuPrecedente variabili di tipo TPopUpMenu

su X e Y si scrive la posizione del Pulsante

Codice: [Seleziona]

procedure TForm1.CheckPulsante(Sender: TObject);
var tPulsante: TSpeedButton;
    X, Y : integer;
begin
  //in base al pulsante setta il PopUpmenu relativo
  if Sender = SpeedButton1 then
    begin
     mnuAttivo := PopUpMenu1;
     tPulsante := SpeedButton1;  //assegna TSpeedButton a tPulsante
    end
  else if Sender = SpeedButton2 then
    begin
     mnuAttivo := PopUpMenu2;
     tPulsante := SpeedButton2;
    end
  else if Sender = SpeedButton3 then
    begin
     mnuAttivo := PopUpMenu3;
     tPulsante := SpeedButton3;
    end;

  if mnuPrecedente = mnuAttivo then
    begin
      mnuPrecedente := nil;
      mnuAttivo.Close;  //chiude il menu presente
    end
  else
    begin
      //fissa posizione pulsante
      X := tPulsante.ClientOrigin.X;

      //per posizionare sotto il pulsante si agginge l'altezza dello stesso
      Y := tPulsante.ClientOrigin.Y + SpeedButton3.Height;
      CheckMenuAttivo(mnuAttivo, X, Y);
      mnuPrecedente := mnuAttivo;
    end;
end;


si va a verificare se il menu visualizzato e' diverso da quello assegnato al Pulsante
e si posiziona il Menu con PopUp(X,Y),
dove X = posizione orizzontale del Pulsante
         Y = posizione verticale del Pulsante

Codice: [Seleziona]

procedure TForm1.CheckMenuAttivo(var MenuAttivo: TPopUpMenu; var X, Y: integer);
begin
  if mnuPrecedente  mnuAttivo then
    MenuAttivo.Popup(X, Y)  // visualizza PopUpMenu
  else
    mnuPrecedente := mnuAttivo;
end;


inserire un Form 3 TSpeedButton, e 3 TPopUpMenu
dichiarare mnuAttivo, mnuPrecedente: TPopUpMenu;

SMF 2.0.8 | SMF © 2011, Simple Machines
Privacy Policy
SMFAds for Free Forums
TinyPortal © 2005-2012

Go back to article