2011-12-11 18 views
10

在Delphi 7的TMemo控件中,嘗試執行組合鍵Ctrl + A以選擇全部不做任何操作(不全選)。所以我做了這個程序:自動允許Ctrl + A在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; 

是否有一招,我不必做這個過程?如果沒有,那麼這個程序看起來好嗎?

+0

@RRUZ備忘錄可能被命名爲「HTML」。 –

+3

個人而言,我會盡快創建一個由標準備忘錄派生的組件,並在那裏處理按鍵,這樣就不需要使用特殊處理代碼來污染您的所有表單。 –

+2

@David:你知道多行模式下的標準Windows編輯控件是否不允許Ctrl + A命令,或者如果VCL包裝有問題? ('TEdit'處理Ctrl + A,就像我們期望的那樣。) –

回答

24

這是更優雅:

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

我知道我有點不知所措,但是你能否解釋爲不熟悉的人(^^) –

+9

Ctrl + A鍵盤按鍵發送爲序號爲1的字符(Ctrl + B爲2, Ctrl + C爲3等)。基本上我認爲這是一個來自舊時代的殘餘。這些'字符'通常寫成'^ A','^ B'等,並且Delphi支持這些。你可以在ASCII表格中看到它們,例如[在維基百科](http://en.wikipedia.org/wiki/ASCII)。 –

+2

多年沒有見過,一定是從TP天。 –

0

我用以前的答案,並討論建立負責處理,我在小的測試程序中使用的按鍵響應事件的獨立組件。

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; 

加入「全選」的行爲在窗體上的所有組件的另一種方式是一個動作列表添加到您的形式與標準選擇的所有行動。

相關問題