2010-01-06 69 views
9

Microsoft User Experience Interaction Guidelines đưa ra một số hướng dẫn giao diện người dùng khi sử dụng một nút menu:Tạo một nút menu trong Windows của

http://i.msdn.microsoft.com/Aa511453.command51(en-us,MSDN.10).png

Làm thế nào cách nào để tạo một trong những nút menu? Tôi đã tìm thấy thông tin về

  • làm thế nào để tạo ra một nút chia trong Vista trở lên
  • làm thế nào để tạo ra một nút trên thanh công cụ với một trình đơn thả xuống
  • làm thế nào để tạo ra một nút bấm thường xuyên và bằng tay dây lên một OnClick trình xử lý sự kiện bật lên một menu

Nhưng có cách nào tiêu chuẩn để tạo nút, không phải trên thanh công cụ, với hình tam giác nhỏ xuống, tự động bật lên trình đơn khi được nhấp không?

(Tôi đang sử dụng Delphi/C++ Builder, nhưng giải pháp khác được hoan nghênh.)

Trả lời

11

Bạn có thể sử dụng nút Bật để buộc cửa sổ bật lên và để nhất quán không sử dụng vị trí con trỏ, mà là vị trí điều khiển.

procedure TForm1.Button1Click(Sender: TObject); 
var 
    pt : TPoint; 
begin 
    Pt.X := Button1.Left; 
    Pt.Y := Button1.Top+Button1.Height; 
    pt := ClientToScreen(Pt); 
    PopupMenu1.Popup(pt.x,pt.y); 
end; 

Sau đó bạn có thể thêm "Glyph" bằng cách sử dụng một Delphi 2010 nút, hoặc một phiên bản TBitBtn trước và gán thuộc tính bitmap/glyph đến một hình ảnh thích hợp và sắp xếp đúng.

+3

Bạn cũng có thể sử dụng ký tự hình tam giác nhỏ trỏ xuống ▾ (http://www.fileformat.info/info/unicode/char/25be/index.htm) –

+0

Tôi có cần phải làm gì đặc biệt để hiển thị hình tam giác đó không lên? Nó ám chỉ như một chiếc hộp (nhân vật không được công nhận) khi tôi thử nó trong các điều khiển của tôi. –

+0

Nếu bạn không thể yên tâm về việc có phông chữ với ký tự mong muốn, thì một nút bit có hình chữ nhật được căn chỉnh về bên phải có lẽ là ý tưởng tốt hơn. Bạn có thể yêu cầu hệ điều hành cho một hình ảnh tích hợp thích hợp, nhưng đó là một chủ đề cho một câu hỏi riêng biệt. –

4

Bạn không đề cập đến phiên bản Delphi bạn đang sử dụng, nhưng trong Delphi 2010 TButton có tính chất mới cho điều này : DropDownList có thể được liên kết với một TPopupMenu để xác định các mục menu và Style có thể được đặt thành bsSplitButton.

Nút này tạo ra một nút mà bạn có thể nhấn cũng có mũi tên thả xuống ở bên phải, Để làm cho menu bật lên khi bạn nhấp vào bên trái mũi tên, mã này trong trình xử lý nhấn nút sẽ thực hiện công việc.

procedure TForm1.Button1Click(Sender: TObject); 
var 
    CursorPos: TPoint; 
begin 
    GetCursorPos(CursorPos); 
    PopupMenu1.Popup(CursorPos.X, CursorPos.Y); 
end; 

trong các phiên bản trước của Delphi Tôi nghĩ bạn phải sử dụng TToolBar.

+0

bsSplitButton thực hiện thả xuống, nhưng không phải khi nút được nhấp vào bên trái của dải phân cách. Dễ dàng hơn để xử lý trong onclick để xử lý cả hai phương pháp. – skamradt

+0

Tôi thấy cách làm các nút chia nhỏ (cũng có sẵn trong Delphi 2009, chúng tôi đang sử dụng), nhưng tài liệu của Microsoft mô tả các nút menu khác biệt với cả hai nút tách và nút nhấn, và có vẻ rất kỳ quặc là cách duy nhất để thực hiện nút menu là để mô phỏng một với OnClick. –

+1

Nó hầu như không phải là một * mô phỏng *, Josh. Bạn nghĩ gì các nút menu "thực" thực hiện, nếu không hiển thị menu khi chúng được nhấp? Ý tôi là, bạn có thể tạo thành phần TMenuButton, nhưng tất cả nó sẽ làm là ghi đè phương thức 'Click' để hiển thị thuộc tính' PopupMenu' thay vì gọi trình xử lý sự kiện 'OnClick'. Vì vậy, bạn thực sự chỉ lưu một cuộc gọi hàm. –

Các vấn đề liên quan