http://delphi.about.com/od/adptips2004/a/bltip0804_4.htm

Here's how to implement the code for the CTRL+A key combination ("Select All") for TMemo or TDBMemo:

~~~~~~~~~~~~~~~~~~~~~~~~~
Just drop a memo (Memo1:TMemo) on a form (Form1:TForm) and handle the OnKeyDown event for Memo1 as:

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState) ;
begin
   if (Key = Ord('A')) and (ssCtrl in Shift) then
   begin
     TMemo(Sender).SelectAll;
     Key := 0; //这里即使为0,Windows系统还是能继续接到按键的信息,然后就会导致 BEEP 声音(win7是当当的声音),因为这里只是 KeyDown。
   end;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~
Note: here's how to check the state of CTRL, ALT and SHIFT keys.

http://stackoverflow.com/questions/8466747/automatically-allowing-ctrla-to-select-all-in-a-tmemo

In Delphi 7's TMemo control, an attempt to do the key combo Ctrl + A to select all does not do anything (doesn't select all). So I've made this procedure:

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;

Is there a trick so that I don't have to do this procedure? And if not, then does this procedure look OK?

asked Dec 11 '11 at 19:24
Jerry Dodge
8,642957147
 
3  
Personally I'd sooner create a component derived from the standard memo and handle the key press there so that you don't need to pollute all your forms with special handling code. –  David Heffernan Dec 11 '11 at 19:33
2  
@David: Do you know if a standard Windows edit control in multiline mode disallows the Ctrl+A command, or if there is a problem with the VCL wrapper? (TheTEdit handles Ctrl+A as one would expect.) –  Andreas Rejbrand Dec 11 '11 at 19:35
1  
@Andreas Once I can get to a machine with a compiler I'll try and produce a raw win32 petzold prog and check it out. –  David Heffernan Dec 11 '11 at 19:51
1  
It seems to be an OS issue with no documented explanation. Many posts about it are just based on code this by your own. –  TLama Dec 11 '11 at 19:54
2  
@David: If I am not mistaken, Raymond asks his readers every now and then about things to write about. This would be an interesting topic. –  Andreas Rejbrand Dec 11 '11 at 20:56

1 Answer

up vote 20down voteaccepted

This is more elegant:

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = ^A then 牛人搞了一个更简单的
begin
(Sender as TMemo).SelectAll;
Key := #0; 这里 为#0后,就没有BEEP声音了,Windows系统接不到按了什么键。
end;
end;
answered Dec 11 '11 at 19:30
Andreas Rejbrand
60.4k3152244
 
4  
I know I'm going on a bit but could you possibly explain the ^A for the uninitiated (e.g. me!) –  David Heffernan Dec 11 '11 at 19:44
9  
The Ctrl+A keystroke is send as a character with ordinal value 1 (Ctrl+B as 2, Ctrl+C as 3, etc.). Basically I think that this is a remnant from older times. These 'characters' are usually written ^A^B, etc., and Delphi supports these. You can see them in ASCII tables, like at Wikipedia. –  Andreas Rejbrand Dec 11 '11 at 19:48
2  
Haven't seen that for years, must be from TP days. –  Tony Hopkinson Dec 11 '11 at 20:01
5  
@Jerry: The result is not exactly the same. Your code will not handle the annoying 'beep' sound! –  Andreas Rejbrand Dec 11 '11 at 21:46 这个结果和你的代码效果,不是完全相同的,你的代码没有处理这个烦人的 BEEP声音。
2  
@Jerry - AFAIK there's no fix to this. This is the default behavior of a windows edit control, you can read about expected behavior of an edit control here. –  Sertac Akyuz Dec 11 '11 at 22:43

Your Answer

How to add the "Select All (CTRL+A)" functionality to TMemo/TDBMemo

Title: How to add the "Select All (CTRL+A)" functionality to TMemo/TDBMemo

Question: How to add the "Select All (CTRL+A)" functionality to TMemo/TDBMemo.

Answer:
To implement the code for the CTRL+A key combination ("Select All") for TMemo, TDBMemo or any of it's descendants implement the following code on the OnKeyDownEvent:

procedure OnKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState) ;
begin
   if (Key = Ord('A')) and (ssCtrl in Shift) then
   begin
     TMemo(Sender).SelectAll;
     Key := 0;
   end;
end;

from: http://delphi.cjcsoft.net//viewthread.php?tid=45347

 
 
=========================================
if ssCtrl in shift then
  begin
    if (Key = Ord('c')) or (Key = Ord('C')) then
      ShowMessage('Ctrl+C');

end;

先判断是否按下ctrl才是正确的次序。

TMemo Ctrl + A的更多相关文章

  1. Delphi 记事本 TMemo

    Windows记事本记事本     描述:     用Delphi模仿的Windows记事本 界面和功能都和Windows的记事本一样,是用Memo实现的而不是RichEdit 可以执行以下功能 文件 ...

  2. Delphi TMemo 可以显示、编辑多行文本

    多行编辑框组件(TMemo)TMemo组件可以显示.编辑多行文本,是一个标准的Windows多行编辑组件.对一些比较多的文本内容可以利用TMemo组件来显示.编辑. 1.TMemo组件的典型用法 TM ...

  3. Windows cmd 长时间不输出新内容 直到按下ctrl + c 取消或者回车的解决办法

    换了一台新电脑, 在使用 ant 拷贝大量文件的时候 cmd 窗口过了很久没有继续输出新的内容,远远超过平时的耗时, 以为已经卡死 按下 ctrl + c 取消, 这时并没有取消, 而是输出了新内容, ...

  4. [No00008B]远程桌面发送“Ctrl+Alt+Delete”组合键调用任务管理器

    向远程桌面发送"Ctrl+Alt+Delete"组合键的两种方法 1.在本地按下Ctrl+Alt+End,可以成功发送"Ctrl+Alt+Delete"组合键! ...

  5. Linux下的ctrl常用组合键

    在linux的命令模式下使用ctrl组合键能让操作更便捷. ctrl + k -- 剪切光标及其后边的内容: ctrl + u -- 剪切光标之前的内容: ctrl + y -- 在光标处粘贴上两个命 ...

  6. 鼠标上下滑动总是放大缩小页面,按住ctrl+0

    鼠标上下滑动总是放大缩小页面,可能是ctrl键失灵了,幸好键盘有两个ctrl键,按住ctrl+0,页面就正常了,吓死宝宝了,~~~~(>_<)~~~~

  7. eclipse中ctrl+h默认打开是JavaSearch,怎么设置成默认打开是FileSearch

    window->preferences->General->keys. 找到File Search(有搜索框的,可以搜索),然后在下方 Binding按下ctrl +h .

  8. CapsLock与ctrl的键位修改

    windows下修改方式: linux下修改方式: 在用户目录下新建文档命名为keychange.sh 编辑以下内容: remove Lock = Caps_Lock remove Control = ...

  9. windows 中去除Ctrl+Alt+Del才能登录

    安装windows 7后登录的时候有一样很麻烦的步骤是需要先按Ctrl+Alt+Del,才能输入用户密码进行登录.这里笔者介绍一下如何取消这个东西. 点击“开始菜单”,点击“控制面板”. [管理工具] ...

随机推荐

  1. 网站精准查询IP

    分享一些网站能精准查询IP的 https://www.chaidu.com/App/Web/IP/ http://www.ipip.net/ip.html http://www.hao7188.com ...

  2. JVM类加载机制总结

    1.运行时加载优点 提高灵活性,可以在运行时动态加载,连接.例子:面向接口编程,动态绑定实现类(但C++也有动态绑定,说明动态绑定不一定通过运行时加载Class字节码实现,也可能是机器码支持的) 2. ...

  3. url rewrite导致的500.19 0x8007000d

    https://stackoverflow.com/questions/13532447/http-error-500-19-iis-7-5-error-0x8007000d It seems you ...

  4. 关于PATH_INFO

    nginx支持PATH_INFO? 想让nginx支持PATH_INFO,首先需要知道什么是pathinfo,为什么要用pathinfo? pathinfo不是nginx的功能,pathinfo是ph ...

  5. Jquery 移除某一个div下面的所有img图片

    function one(){ $('#dimg img').remove(); }

  6. illumina support

    http://support.illumina.com/help/BaseSpace_App_WGS_BWA_help/Content/Vault/Informatics/Sequencing_Ana ...

  7. nginx 启停命令

    nginx 启停配置 #!/bin/sh # # nginx Startup script for nginx # # chkconfig: - 85 15 # processname: nginx ...

  8. 《A_Pancers》团队作业6—团队项目系统设计改进与详细设计

    一.团队项目系统设计改进: 1.分析项目系统设计说明书初稿的不足,特别是软件系统结构模型建模不完善内容: 在上一次的项目系统设计说明书中没有很好的完成软件系统结构模型的建模设计,只做了基本的系统项目原 ...

  9. UVA - 11853 Paintball(dfs)

    UVA - 11853 思路:dfs,从最上面超过上边界的圆开始搜索,看能不能搜到最下面超过下边界的圆. 代码: #include<bits/stdc++.h> using namespa ...

  10. Android之设计模式

    设计模式的概念 1.基本定义:设计模式(Design pattern)是一套被反复使用的代码设计经验的总结.使用设计模式的目的是为了可重用代码.让代码更容易被他人理解.设计模式是是软件工程的基石脉络, ...