设置ALT+2,Home,End,Back,Delete等的功能键遇到的有关问题

设置ALT+2,Home,End,Back,Delete等的功能键遇到的问题。

我在出窗口上有一个TEdit控件和一个TButton控件

在Form.Create时,我设置了KeyPreview:=   True;
然后在KeyDown事件中过滤按键
procedure   TfrmMain.FormKeyDown(Sender:   TObject;   var   Key:   Word;
    Shift:   TShiftState);
begin
    case   Key   of
        VK_F2:   ;//按下F2
        VK_F3{,   VK_ADD小键盘+}:   ;//按下F3,和小键盘的 "+ "号键

        $30..$39{   VK_0,VK_1,VK_3   -   VK_9   },
        $41..$5A{   VK_A   -   VK_Z   },
        VK_NUMPAD0..VK_NUMPAD9,
        VK_HOME,   VK_END,
        VK_BACK,   VK_DELETE:
                begin
                        if   (Shift   =   [ssAlt])   and   (Key   =   $32)   then   begin
                                //   按下   ALT+2   时
                               
                        end   else   begin
                                //   当焦点不在Edit上时,按下   A-Z,0-9,Home,End,Back,Delete键都会自动回到Edit,并且输入按下的Key
                                if   not   Edit1.Focused   then   begin
                                        Edit1.SetFocus;
                                        //   这里暂时用了模拟键盘的方法
                                        keybd_event(Key,   0,   0,   0);
                                        keybd_event(Key,   0,   KEYEVENTF_KEYUP,   0);
                                end;
                        end;
                end;
    end;
end;


问题1:
        当按下Alt+2时,会正确跳到处理Alt+2的地方,但如果当前焦点在Edit的时候,在Edit中同样会输入 "2 "这个字符。有没有方法不让Edit输入这个字符呢?

问题2:
        在焦点不在Edit上时,按下A-Z,0-9等按键会自动将焦点返回到Edit,但如果不写keybd_event这2行模拟键盘敲击事件的代码,在Edit中就不会输入按下的字符。
        我只查到通过SendMessage(hwnd,   WM_SETTEXT,   0,   Longint(str));的方法。但这个方法是设置整个Edit.Text,并不是往后加一个字符。
        能不能通过发送消息或其他方法实现模拟键盘敲击的功能,当然并不是光增加字符,因为还有Home,End,Back和Delete键。

------解决方案--------------------
if not Edit1.Focused then
begin
Edit1.SetFocus;
edit1.Text:=edit1.Text+char(Key);
end;
------解决方案--------------------