还有怎么用del键代替退格键

解决方案 »

  1.   

    这样试试:
    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if key = VK_DECIMAL then
      begin
        key:= 0;
        keybd_event(vk_back, MapVirtualKey(vk_back, 0), 0, 0);
        keybd_event(vk_back, MapVirtualKey(vk_back, 0), KEYEVENTF_KEYUP, 0);
        keybd_event(vk_back, MapVirtualKey(vk_back, 0), 0, 0);
        keybd_event(vk_back, MapVirtualKey(vk_back, 0), KEYEVENTF_KEYUP, 0);
      end;
    end;
      

  2.   

    用+代替空格简单,因为keypress事件可以捕获到,然后直接替换
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
        if key='+' then key:=' ';
    end;第二个问题就稍麻烦点了,keypress事件捕捉不到del这种功能键,只能靠keydown,但keydown事件直接替换又不行,比如
    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    if key =46 then key:=8;//del 替换为back
    end;
    这种代码是行不通的,所以楼上的代码肯定也没经过测试,呵呵
      

  3.   

    procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
    begin
      Handled := True;
      case Msg.CharCode of
        VK_ADD: PostMessage(Handle, WM_KEYDOWN, VK_SPACE, 0);
        VK_DELETE:  PostMessage(Handle, VK_ESCAPE, VK_SPACE, 0);
      end;
    end;
      

  4.   

    to: hellolongbin(一个人[散分贴收20%灌水税,非散分贴收10%资源占用税]) 你试试看就知道我测试没有了。呵呵
      

  5.   

    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var s:string;   i:integer;
    begin
        if key =46 then
        begin
            key:=0;
            s:=edit1.Text;
            i:=edit1.SelStart;
            edit1.Text:=copy(s,1,i-1)+copy(s,i+1,length(s));
            edit1.SelStart:=i-1;
        end;
    end;
      

  6.   

    回复人: xixuemao(俺可是㊣②㈧经儿滴人) ( ) 信誉:100  2005-09-28 16:02:00  得分: 0  
     
     
       to: hellolongbin(一个人[散分贴收20%灌水税,非散分贴收10%资源占用税]) 你试试看就知道我测试没有了。呵呵
      
    --------------------------------
    我试过了才说的啊要不你再试试看? :p
      

  7.   

    解释一下,楼主说的是小键盘上的del键,不是delete键。hellolongbin(一个人[散分贴收20%灌水税,非散分贴收10%资源占用税]) 
    你再试试看。^_^
      

  8.   

    如果是delete键,这样就可以了。
    这两个键可是不一样的哦;
    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if key = 46 then
      begin
        key:= 0;
        keybd_event(vk_back, MapVirtualKey(vk_back, 0), 0, 0);
        keybd_event(vk_back, MapVirtualKey(vk_back, 0), KEYEVENTF_KEYUP, 0);
      end;
    end;
      

  9.   

    还是我来总结一下吧:
    procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
    begin
        if edit1.Focused then
        begin
            case Msg.CharCode of
            VK_ADD:
                begin
                    Handled := True;
                    keybd_event(VK_SPACE,0,KEYEVENTF_EXTENDEDKEY or 0,0);
                    keybd_event(VK_SPACE,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
                end;
                VK_DELETE:
                begin
                    Handled := True;
                    keybd_event(VK_BACK,0,KEYEVENTF_EXTENDEDKEY or 0,0);
                    keybd_event(VK_BACK,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
                end;
            end;
        end;
    end;