Menú desplegable para TButton

Estoy intentando simular un menú desplegable para un TButton, como se muestra a continuación:

procedure DropMenuDown(Control: TControl; PopupMenu: TPopupMenu);
var
  APoint: TPoint;
begin
  APoint := Control.ClientToScreen(Point(0, Control.ClientHeight));
  PopupMenu.Popup(APoint.X, APoint.Y);
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    DropMenuDown(Button1, PopupMenu1);
    // ReleaseCapture;
  end;
end;

El problema es que cuando se despliega el menú, si vuelvo a hacer clic en el botón, deseo que se cierre el menú, pero en su lugar vuelve a bajar.

Estoy buscando una soluciónespecíficamente para Delphi genéricoTButton No hay ningún tercero equivalente.

Respuestas a la pregunta(2)

Su respuesta a la pregunta