Sto cercando di simulare un menu a discesa per un TButton, come illustrato di seguito:goccia giù per 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;
Il problema è che quando il menu è sceso verso il basso, se clicco di nuovo il tasto I vorrebbe che il menu si chiuda, ma invece scende di nuovo.
Sto cercando una soluzione specificatamente per Delphi generico TButton
non equivalente di terze parti.
È il PopupListEx non un peso inutile qui? Sappiamo che il menu è chiuso subito dopo la riga DropMenuDown (dato che il popup è sincronizzato) o mi sono perso qualcosa? – Vlad
se fai clic sul pulsante ... quindi, attendi n secondi senza fare nulla .... e poi ... decidi di premere nuovamente il pulsante ... prima di premerlo, dato che non hai fatto nulla ... il popup è ancora aperto? quindi, se si 'cMenuClosed: = GetTickCount;' subito dopo 'DropMenuDown (Button1, PopupMenu1);' il caso che ho appena spiegato non dovrebbe funzionare ... – Whiler
Cosa intendevo dire: 'procedure TForm1.Button1Click (Sender: TObject); begin DropMenuDown (Button1, PopupMenu1); cMenuClosed: = GetTickCount; fine; procedure TForm1.Button1MouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbLeft) e non ((cMenuClosed + 100)
Vlad