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;
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;