2011-12-11 20 views
10

Trong điều khiển TMemo Delphi 7, một nỗ lực để làm tổ hợp phím Ctrl + A để chọn tất cả không làm bất cứ điều gì (không chọn tất cả). Vì vậy, tôi đã thực hiện thủ tục này:Tự động cho phép Ctrl + A chọn tất cả trong TMemo?

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; 
    Shift: TShiftState); 
var 
    C: String; 
begin 
    if ssCtrl in Shift then begin 
    C:= LowerCase(Char(Key)); 
    if C = 'a' then begin 
     Memo1.SelectAll; 
    end; 
    end; 
end; 

Có một thủ thuật vì vậy mà tôi không cần phải làm thủ tục này? Và nếu không, thì thủ tục này có ổn không?

+0

@RRUZ bản ghi nhớ có thể có tên là 'HTML'. –

+3

Cá nhân tôi sẽ sớm tạo ra một thành phần có nguồn gốc từ bản ghi nhớ tiêu chuẩn và xử lý nhấn phím ở đó để bạn không cần phải gây ô nhiễm tất cả các biểu mẫu của bạn với mã xử lý đặc biệt. –

+2

@David: Bạn có biết nếu điều khiển chỉnh sửa Windows chuẩn ở chế độ nhiều dòng không cho phép lệnh Ctrl + A hoặc nếu có sự cố với trình bao bọc VCL? ('TEdit' xử lý Ctrl + A như mong đợi.) –

Trả lời

24

Đây là tao nhã hơn:

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char); 
begin 
    if Key = ^A then 
    begin 
    (Sender as TMemo).SelectAll; 
    Key := #0; 
    end; 
end; 
+4

Tôi biết tôi đang đi một chút nhưng có thể bạn có thể giải thích '^ A' cho người chưa được bắt đầu (ví dụ như tôi!) –

+9

Phím tắt Ctrl + A được gửi dưới dạng ký tự có giá trị thứ tự 1 (Ctrl + B là 2, Ctrl + C là 3, v.v.). Về cơ bản tôi nghĩ rằng đây là một tàn dư từ những lần cũ hơn. Những 'ký tự' này thường được viết là '^ A','^B', v.v. và Delphi hỗ trợ chúng. Bạn có thể thấy chúng trong bảng ASCII, như [at Wikipedia] (http://en.wikipedia.org/wiki/ASCII). –

+2

Đã không thấy điều đó trong nhiều năm, phải từ ngày TP. –

0

tôi đã sử dụng các câu trả lời và thảo luận trước để tạo ra một thành phần độc lập mà xử lý sự kiện KeyPress mà tôi sử dụng trong các chương trình thử nghiệm nhỏ.

TSelectMemo = class(TMemo) 
protected 
    procedure KeyPress(var Key: Char); override; 
end; 

...

procedure TSelectMemo.KeyPress(var Key: Char); 
begin 
    inherited; 
    if Key = ^A then 
    SelectAll; 
end; 

Một cách khác để thêm "chọn tất cả" hành vi cho tất cả các thành phần trên một hình thức là thêm một danh sách hành động để hình của bạn với một tiêu chuẩn chọn tất cả các hành động.

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