estoy tratando de simular un menú desplegable para un TButton, como se muestra a continuación:Desplegar menú para TButton
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 el menú se deja caer hacia abajo, si hago clic en el botón otra vez quisiera que el menú se cerrara, pero en lugar de eso, vuelve a caer.
Estoy buscando una solución específicamente para Delphi genérico TButton
sin equivalente de terceros.
¿Está el PopupListEx no es una exageración aquí? Sabemos que el menú está cerrado justo después de la línea DropMenuDown (ya que la ventana emergente es sincrónica), o me perdí algo? – Vlad
si hace clic en el botón ... luego, espera n segundos sin hacer nada ... y luego ... decide presionar nuevamente el botón ... antes de presionarlo, ya que no ha hecho nada ... la ventana emergente todavía está abierta? entonces, si 'cMenuClosed: = GetTickCount;' justo después de 'DropMenuDown (Button1, PopupMenu1);' el caso que acabo de explicar no debería funcionar ... – Whiler
Lo que quise decir es esto: 'procedure TForm1.Button1Click (Sender: TObject); begin DropMenuDown (Button1, PopupMenu1); cMenuClosed: = GetTickCount; final; procedure TForm1.Button1MouseDown (Sender: TObject; Botón: TMouseButton; Shift: TShiftState; X, Y: Entero); begin if (Button = mbLeft) and not ((cMenuClosed + 100)
Vlad