Đời sống

Cách hiển thị gợi ý mục menu trong ứng dụng Delphi

Cách hiển thị gợi ý mục menu trong ứng dụng Delphi

Sử dụng ngôn ngữ mã hóa cụ thể để lập trình các ứng dụng Delphi để hiển thị gợi ý hoặc chú giải công cụ khi chuột di chuyển qua một thành phần menu. Nếu thuộc tính "ShowHint" được đặt thành "true" và bạn thêm văn bản vào thuộc tính "gợi ý", thông báo này sẽ được hiển thị khi chuột được đặt trên thành phần (ví dụ như một TButton).

Bật gợi ý cho các mục menu

Do cách Windows được thiết kế, ngay cả khi bạn đặt giá trị cho thuộc tính gợi ý thành một mục menu, gợi ý bật lên sẽ không được hiển thị. Tuy nhiên, các mục menu bắt đầu của Windows có gợi ý hiển thị. Menu yêu thích trong Internet Explorer cũng hiển thị gợi ý mục menu.

Có thể sử dụng sự kiện OnHint của biến ứng dụng toàn cầu trong các ứng dụng Delphi để hiển thị gợi ý mục menu trong thanh trạng thái.

Windows không tiết lộ các thông báo cần thiết để hỗ trợ sự kiện OnMouse Entry truyền thống. Tuy nhiên, thông báo WM_MENUSELECT được gửi khi người dùng chọn một mục menu.

Việc triển khai WM_MENUSELECT của TCustomForm (tổ tiên của TForm) đặt gợi ý mục menu thành "Application.Hint" để nó có thể được sử dụng trong sự kiện Application.OnHint.

Nếu bạn muốn thêm gợi ý bật lên mục menu (chú giải công cụ) vào menu ứng dụng Delphi, hãy tập trung vào thông báo WM_MiabSelect.

Gợi ý Popup

Vì bạn không thể dựa vào phương thức Application.ActivateHint để hiển thị cửa sổ gợi ý cho các mục menu (vì việc xử lý menu hoàn toàn được thực hiện bởi Windows), để cửa sổ gợi ý hiển thị, bạn phải tạo phiên bản cửa sổ gợi ý của riêng mình bằng cách tạo một lớp mới từ "THintWindow."

Đây là cách tạo một lớp TMiabItemHint. Đây là một góa phụ gợi ý thực sự được hiển thị cho các mục menu!

Trước tiên, bạn cần xử lý thông báo Windows WM_MENUSELECT:

kiểu
TForm1 = lớp học(TForm)

riêng tư
thủ tục WMMothySelect (var Msg: TWMMothySelect); thông điệp WM_MENUSELECT;
kết thúc
thực hiện

thủ tục
TForm1.WMMothySelect (var Msg: TWMMothySelect);
var
menuItem: TMothyItem; hSubMothy: HMENU;
bắt đầu

thừa hưởng; // từ TCustomForm (để Application.Hint được gán)
menuItem: = không;
nếu (Msg.MothyFlag $ FFFF) hoặc là (Thg.IDItem 0) sau đó
bắt đầu
nếu Msg.MothyFlag MF_POPUP = MF_POPUP sau đó
bắt đầu
hSubMothy: = GetSubMothy (Msg.Mothy, Msg.IDItem);
menuItem: = Self.Mothy.FindItem (hSubMothy, fkHandle);
kết thúc
khác
bắt đầu
menuItem: = Self.Mothy.FindItem (Msg.IDItem, fkCommand);
kết thúc;
kết thúc; miHint.DoActivateHint (menuItem);
kết thúc
; (* WMMothySelect *)

Thông tin nhanh: thông báo WM_MENUSELECT được gửi đến cửa sổ chủ sở hữu của menu khi người dùng chọn (nhưng không nhấp) một mục menu. Sử dụng phương thức FindItem của lớp TMothy, bạn có thể nhận được mục menu hiện được chọn. Các tham số của hàm FindItem liên quan đến các thuộc tính của tin nhắn nhận được. Khi chúng ta biết con chuột đã kết thúc mục menu nào, chúng ta gọi phương thức DoActivateHint của lớp TMothyItemHint. Biến miHint được định nghĩa là "var miHint: TMothyItemHint" và được tạo trong trình xử lý sự kiện OnCreate của Form.

Bây giờ, những gì còn lại là việc triển khai lớp TMothyItemHint.

Đây là phần giao diện:

TMdBItemHint = lớp học(THintWindow)
riêng tư

activeMiabItem: TMothyItem;
trình chiếu: TTimer;
ẩnTimer: TTimer;
thủ tục HideTime (Tên người gửi: TObject);
thủ tục ShowTime (Tên người gửi: TObject);
công cộng

constructor Tạo (AOwner: TComponent); ghi đè;
thủ tục DoActivateHint (menuItem: TMothyItem);
kẻ hủy diệt Hủy hoại; ghi đè;
kết thúc
;

Về cơ bản, hàm DoActivateHint gọi phương thức ActivateHint của THintWindow bằng cách sử dụng thuộc tính Gợi ý của TMothyItem (nếu được gán). ShowTimer được sử dụng để đảm bảo rằng HintPause của Ứng dụng trôi qua trước khi gợi ý được hiển thị. HideTimer sử dụng Application.HintHidePause để ẩn cửa sổ gợi ý sau một khoảng thời gian được chỉ định.

Sử dụng gợi ý mục menu

Mặc dù một số người có thể nói rằng nó không phải là một thiết kế tốt để hiển thị gợi ý cho các mục menu, có những tình huống thực sự hiển thị gợi ý mục menu tốt hơn nhiều so với sử dụng thanh trạng thái. Danh sách mục menu được sử dụng gần đây nhất (MRU) là một trường hợp như vậy. Một menu thanh tác vụ tùy chỉnh là một menu khác.