Próbuję symulować menu rozwijane dla TButton, jak pokazano poniżej:rozwijanego menu dla 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;
Problemem jest to, że gdy menu jest spadła w dół, jeśli kliknę przycisk jeszcze raz ja chciałby zamknąć menu, ale zamiast tego ponownie opada.
szukam rozwiązania specjalnie dla rodzajowego Delphi TButton
nie innego równoważnego 3rd Party.
Czy PopupListEx nie jest przesadą tutaj? Wiemy, że menu jest zamykane zaraz po linii DropMenuDown (ponieważ popup jest synchroniczny), czy coś przeoczyłem? – Vlad
jeśli klikniesz przycisk ..., poczekasz n sekund bez robienia niczego ... a następnie ... zdecydujesz się nacisnąć ponownie przycisk ... przed naciśnięciem go, ponieważ nic nie zrobiłeś ... popup jest nadal otwarty? tak więc, jeśli "cMenuClosed: = GetTickCount;' zaraz po 'DropMenuDown (Button1, PopupMenu1);' sprawa, którą właśnie wyjaśnię, nie powinna działać ... – Whiler
Co miałem na myśli to: 'procedure TForm1.Button1Click (Sender: TObject); Rozpocznij DropMenuDown (Button1, Menu podręczne1); cMenuClosed: = GetTickCount; koniec; Procedura TForm1.Button1MouseDown (Nadawca: TObject; Przycisk: TMouseButton; Shift: TShiftState; X, Y: Integer); rozpocząć jeśli (Button = mbLeft), a nie ((cMenuClosed + 100)
Vlad