2012-07-24 23 views
5

Giả sử tôi có biểu mẫu, với thanh trình đơn trên đó. Tôi có một mục trên thanh menu, một TMenuItem, mà tôi có thể gán một tổ hợp phím tắt, ví dụ, "Ctrl-I". Nhưng khi tôi gán thuộc tính "ShortCut" cho TMenuItem, có vẻ như chỉ thay đổi giao diện trực quan của mục menu để hiển thị mã phím tắt thay vì tự động nghe cho phím cắt ngắn được nhấn và kích hoạt mã ActionManager của tôi.Thêm khóa nóng vào ứng dụng Delphi của tôi

Google-fu của tôi dường như không thành công hôm nay, tôi chỉ tìm các bài viết về cách gán các phím nóng toàn cầu cho cửa sổ chứ không phải cách gán các phím nóng dành riêng cho ứng dụng chỉ hoạt động trên biểu mẫu đang hoạt động.

Bất kỳ ai có thể phác thảo cho tôi các bước cần thiết để thêm khóa nóng ngoài việc thêm thuộc tính phím tắt trong menu. Tôi đang suy nghĩ một nơi nào đó tôi có thể cần phải thiết lập các hình thức để được lắng nghe cho đầu vào bàn phím và bẫy bấm phím và trả lời nó? Nhưng tôi không chắc chắn nơi nào hay cách Delphi để làm điều đó sẽ được.

+4

Thông thường, không có vấn đề gì khi làm những gì bạn muốn. Nó chỉ hoạt động, tự động. Vì bạn đang sử dụng một trình quản lý hành động, bạn nên sử dụng thuộc tính 'ShortCut' của' TAction', không phải là 'TMenuItem'. –

+0

Có, chỉ cần gán thuộc tính ShortCut và tất cả đều tốt. –

+0

Hãy suy nghĩ về các mục trình đơn chỉ là "một cách được xây dựng động để trình bày các hành động được xác định tĩnh của tôi", do đó, tôi thiết lập các hành động của mình chứ không phải các thuộc tính mục menu của tôi. Các thuộc tính của mục trình đơn bắt nguồn từ danh sách Hành động hoặc trình quản lý tác vụ và truyền ra ngoài. –

Trả lời

6

Dường như bạn đang sử dụng Hành động (ActionManager), vì vậy hãy gán lối tắt của bạn cho Hành động có liên quan để thay thế. (Gán Hành động cho MenuItem sau đó sẽ gán phím tắt cho mục menu.)

+0

Điều này làm việc, cảm ơn! –

-1

Xem xét ví dụ về tay cầm cửa sổ không được cung cấp cho thông điệp VCL, mà chúng tôi sử dụng WM_HOTKEY. Thông báo này được gửi bằng cửa sổ đã đăng ký trong phím nóng Windows cho phép chương trình phản hồi lại, ngay cả khi không có tiêu điểm đầu vào:

type 
TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    private 
    { Private declarations } 
    // Declare a event handler 
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

{ TForm1 } 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    // Registering a hotkey Ctrl+Alt+F5 
    RegisterHotKey(Handle, 0, MOD_CONTROL or MOD_ALT, VK_F5); 
end; 

procedure TForm1.FormDestroy(Sender: TObject); 
begin 
    // Unregisters a hotkey 
    UnRegisterHotKey(Handle, 0); 
end; 

procedure TForm1.WMHotKey(var Msg: TWMHotKey); 
begin 
    // This procedure is called when a window message WM_HOTKEY 
    inherited; // We give the form to process the message, 
       // if she already has its handler 
    Beep;  // We perform additional actions 
end; 
+1

-1 câu hỏi nêu rõ rằng hệ thống phím nóng rộng không phải là những gì được yêu cầu –

+0

dù sao đi nữa, một giải pháp hữu ích của nó cho thấy cách thiết lập khóa nóng toàn cầu – jimsweb

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