想实现这样的一个功能,就是在窗体上单击鼠标后再按下某一按键(或者顺序相反),能显示出一个子窗体?请大神指教!!MDIForm

解决方案 »

  1.   

    新建一个项目,然后在菜单 file->new->form delphi 创建第二窗体(第一个窗体即主窗体),
    假设第二个窗体的单元名为 unit2,
    在主窗体的单元中(假设主窗体单元名为unit1)uses unit2接着uses Unit2; // 引用第二个窗体所在单元var
     isClickForm:Boolean = False; // 全局变量,用来断定是否鼠标点击了窗体// 主窗体的 Click 时间
    procedure TForm1.FormClick(Sender: TObject);
    begin
      isClickForm:=True; // 标记当前点击了主窗体
    end;// 主窗体的 keypress 事件
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
        // 如果当前点击了主窗体,并且按下了键盘的 a 键
        if (isClickForm) and (Key = 'a') then
         begin
           isClickForm:=False;// 重置回false
           Form2.Caption:='我是第二个窗体';
           Form2.Show; // 调用unit2单元中的form2窗体对象的show方法显示该窗体
         end;
    end;
      

  2.   


    感谢sololie在深夜依旧回帖的帮助,还有一点小问题,就是不知怎么搞的,当我按下键盘后窗体不知怎么了,不能响应我的键盘命令。试过OnKeyPress和OnKeyDown都不行!我好像知道原因是因为我的Form里面存在如ComboBox类控件,窗体一加载焦点好像就落在ComboBox控件上了,我按下按键后相应的字符也被ComboBox控件接收了,所以窗体好像就不能响应我的键盘事件,请问怎样把焦点移到窗体上呢????
      

  3.   

    大神说的有点深奥呀!什么是spy++?怎么操作spy++???......
      

  4.   

    大神说的有点深奥呀!什么是spy++?怎么操作spy++???......
    你不是说不响应消息嘛
    spy++是个工具,可以看到窗体的消息
      

  5.   

    大神说的有点深奥呀!什么是spy++?怎么操作spy++???......
    你不是说不响应消息嘛
    spy++是个工具,可以看到窗体的消息我用的是Lazarus不是Delphi,新手啊,才开始学没两天,你说的spy++真没听说过,是IDE自带的还是怎么???
      

  6.   

    大神说的有点深奥呀!什么是spy++?怎么操作spy++???......
    你不是说不响应消息嘛
    spy++是个工具,可以看到窗体的消息我用的是Lazarus不是Delphi,新手啊,才开始学没两天,你说的spy++真没听说过,是IDE自带的还是怎么???

    这个是VS自带的工具,网上有单独的下载。
    带句柄的Windows窗口,这个工具都能可以用
      

  7.   

    现在可心了,原来要将窗体的KeyPreview属性设置为True,否则键盘事件会直接被窗体内的子控件所截获。
      

  8.   


    感谢sololie在深夜依旧回帖的帮助,还有一点小问题,就是不知怎么搞的,当我按下键盘后窗体不知怎么了,不能响应我的键盘命令。试过OnKeyPress和OnKeyDown都不行!我好像知道原因是因为我的Form里面存在如ComboBox类控件,窗体一加载焦点好像就落在ComboBox控件上了,我按下按键后相应的字符也被ComboBox控件接收了,所以窗体好像就不能响应我的键盘事件,请问怎样把焦点移到窗体上呢????procedure TForm1.FormClick(Sender: TObject);
    begin
       isClickForm:=True; // 标记当前点击了主窗体   // 加入下面两行,
       KeyPreview:=True; // keypreview也可以在属性面板中设定 
       ActiveControl:=nil; // 使所有窗体中的控件处于非活动状态
    end;