2015-04-24 16 views

Trả lời

0

Bạn có thể mã hóa các cách sau:

var CurrentForm: TForm; // Make sure to make it a global variable 

    procedure KeyDownEvents(var Key: Word; Shift: TShiftState); 
    begin 
    CurrentForm:=Screen.ActiveForm.Name; 
    if Key = VK_F9 then CurrentForm.KeyBoard1.Show; 
    end; 

Điều này sẽ khắc phục vấn đề. Tương tự, bạn có thể xử lý biểu mẫu khi nhấp chuột và nhấn phím khác. Hi vọng điêu nay co ich.

+0

Tôi có phải viết nó cho tất cả các sự kiện chính không? – archit

+0

Nếu bạn muốn bạn có thể viết nó cho một sự kiện cụ thể hoặc tất cả theo yêu cầu của bạn. –

+0

Làm cho tinh thần. Cảm ơn. – archit

10

Screen.ActiveForm thực hiện thủ thuật.

+1

Hãy coi chừng rằng nếu bạn có biểu mẫu phụ tạm thời phụ trợ cung cấp thông tin cho biểu mẫu khác, ví dụ:' InputBox' hoặc 'ShowMessage', biểu mẫu đó sẽ là ActiveForm. Cá nhân tôi sẽ tạo ra một "cơ sở" hình thức để tất cả các "muốn" hình thức sẽ kế thừa từ nó và sau đó theo dõi các hình thức hoạt động currenctly bằng cách ghi đè thông điệp WM_ACTIVE ở dạng cơ sở để nuôi một biến WantedActiveForm toàn cầu. – EProgrammerNotFound

+0

Cách tiếp cận mà tôi đã đề cập hữu ích nếu bạn có bộ hẹn giờ kiểm tra biểu mẫu đang hoạt động hoặc một cái gì đó như thế này. Tất nhiên nó không phải là một quy tắc chung, trong hầu hết thời gian, Screen.ActiveForm thực sự làm các trick. Điều WM_ACTIVE này là cần thiết bởi vì 'OnActivate' không được kích hoạt khi bạn hoàn thành bằng cách sử dụng một dạng phương thức, không phải vì nó, người ta có thể sử dụng' OnActivate' và 'OnDeactivate' thay vì ghi đè' WM_ACTIVE'. – EProgrammerNotFound

+0

nơi được viết 'WM_ACTIVE' đọc' WM_ACTIVATE' – EProgrammerNotFound

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