转贴:weenyboy(七号编码) 回复于2001-6-28 10:50:09 得0分  
定义热键f2-f9,在热键处理中向窗体发消息来模拟打开主菜单formcreate:
  RegisterHotKey(Handle, 1001, 0, vk_F1)formdestroy:
  UnregisterHotKey(Handle, 1001);procedure HotProc(var Message: TMessage); Message WM_HotKey;
begin
  case Message.Msg of
    1001: begin
      PostMessage(Handle, WM_KEYDOWN, vk_F1, 0);
      PostMessage(Handle, WM_KEYUP, vk_F1, 0);
      PostMessage(Handle, WM_KEYDOWN, Ord('F'), 0);  //比如使用(&File)菜单
      PostMessage(Handle, WM_KEYUP, Ord('F'), 0);
    end;
end;  

解决方案 »

  1.   

    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
      p: TPoint;
    begin
      if Key=VK_F1 then
      begin
        p := ClientToScreen(Point(0,0));
        TrackPopupMenu( miFile.Handle, TPM_LEFTALIGN, p.X, p.Y, 0, Handle, nil );
      end;
    end;
      

  2.   

    更好的办法:假定“文件”菜单的快捷键是Fprocedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key=VK_F1 then
      begin
        // 模拟Alt+F
        keybd_event( VK_MENU, 0, 0, 0 );
        keybd_event( Ord('F'), 0, 0, 0 );
        keybd_event( Ord('F'), 0, KEYEVENTF_KEYUP, 0 );
        keybd_event( VK_MENU, 0, KEYEVENTF_KEYUP, 0 );
      end;
    end;