小弟现在 做一个程序 需要在 类似Memo的文本框中 截获快捷键进行处理
例如 我按下 Ctrl+K 那么我就在Memo中加入'你好' 
请问 各位大人如何实现 
谢谢 我会多给分的

解决方案 »

  1.   

    procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      case Key of
        Ord('K'): if ssCtrl in Shift then TMemo(Sender).SelText := '你好';
        Ord('L'): if ssCtrl in Shift then TMemo(Sender).SelText := '结帖';
      end;
    end;
      

  2.   

    谢谢 你的 代码 可能我没有说明白 
    我是在ini文件里放了 有一些已经些好的 快捷键 例如'F12' 'Ctrl+A'等
    然后程序运行 先将快捷键 加载 再做判断 如果 用您的代码 那就很麻烦了 
    不知道 还能不能给各 指点 分一定给的 谢谢
      

  3.   

    道理是一样的,只不过你读完INI后要用个CASE语句把读到字符串转换成ASCII码
    然后再象伴水写的那样做判断!
      

  4.   

    //参考,自己动手
      Menus.TextToShortCut(); // 先把文本转换成ShortCut
      Menus.ShortCutToKey(); // 再把ShortCut转换成Key和Shift判断
      

  5.   

    unit Unit1;
    interface
    uses  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
    type  TForm1 = class(TForm)    procedure FormCreate(Sender: TObject);    procedure FormDestroy(Sender: TObject);  private    { Private declarations }    aatom:atom;    procedure hotkey(var msg:tmessage);message wm_hotkey;  public    { Public declarations }  end;
    var  Form1: TForm1;
    implementation
    {$R *.DFM}
    procedure TForm1.FormCreate(Sender: TObject);begin  aatom:=globaladdatom('hot key');  RegisterHotKey(handle,aatom,MOD_ALT,vk_f12);end;
    procedure TForm1.hotkey(var msg:tmessage);begin  if (msg.LParamHi=VK_F12) and (msg.LParamLo=MOD_ALT) then    SetForegroundWindow(handle);end;
    procedure TForm1.FormDestroy(Sender: TObject);begin globalDeleteatom(aatom);end;
    end.