Tôi cố gắng để mô phỏng một menu thả xuống cho một TButton, như hình dưới đây:Drop down menu cho 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;
Vấn đề là khi menu được giảm xuống, nếu tôi nhấp vào nút một lần nữa tôi muốn menu đóng lại, nhưng thay vào đó nó lại giảm xuống.
Tôi đang tìm giải pháp cụ thể cho chung Delphi TButton
không phải bất kỳ tương đương nào của bên thứ ba.
PopupListEx không phải là quá mức cần thiết ở đây phải không? Chúng tôi biết rằng trình đơn được đóng ngay sau dòng DropMenuDown (vì cửa sổ bật lên đồng bộ), hoặc tôi đã bỏ sót điều gì đó? – Vlad
nếu bạn bấm vào nút ... sau đó, bạn chờ đợi n giây mà không làm gì .... và sau đó ... bạn quyết định nhấn một lần nữa nút ... trước khi nhấn nó, như bạn đã làm gì ... cửa sổ bật lên vẫn mở? Vì vậy, nếu bạn 'cMenuClosed: = GetTickCount;' ngay sau khi 'DropMenuDown (Button1, PopupMenu1);' trường hợp tôi chỉ giải thích không nên làm việc ... – Whiler
Điều tôi muốn nói là: 'procedure TForm1.Button1Click (Tên người gửi: TObject); bắt đầu DropMenuDown (Button1, PopupMenu1); cMenuClosed: = GetTickCount; kết thúc; thủ tục TForm1.Button1MouseDown (Tên người gửi: TObject; Nút: TMouseButton; Shift: TShiftState; X, Y: Integer); bắt đầu nếu (Nút = mbLeft) và không ((cMenuClosed + 100)
Vlad