就是F1打开,F2取消,Tab移动.
谢谢。

解决方案 »

  1.   

    在OnKeyDown事件中写代码。
    如果是F1的键值,你就将Enter键的消息发出去。
    以前写过,具体不太记得。
      

  2.   

    好象没有OnKeyDown事件啊,哈哈..
      

  3.   

    那个新开的窗体应该是window的,不属于delphi的
    所以如果实现那样的话
    可以自己做一个opendialog
      

  4.   

    我忘了说了,这个事件在其它组件中有,你没有,你可以自以做个组件,
    将之包起来。自已做个OnKeyDown事件。
    难道还有delphi做不了的事吗??
    :))
      

  5.   

    你的可视类:TMyClass
    加如下定义:
      private
        FOnKeyDown: TKeyDownEvent;  protected
        procedure TriggerKeyDownEvent(var Key: Word; Shift: TShiftState); virtual;  published
        property OnKeyDown: TKeyDownEvent read FOnKeyDown write FOnKeyDown;procedure TMyclass.TriggerKeyDownEvent(var Key: Word; Shift: TShiftState);
    begin
      if assigned(FOnKeyDown) then
        FOnKeyDown(Self, Key, Shift);
    end;
      

  6.   

    如果对API熟,可以用消息拦截,要不然就得自己写个OpenDialog。
      

  7.   

    做个基于OpenDialog的可视类很快。几分钟的事。
    加一个事件,其它所有事件,属性继承过来。
    再写事件代码。
    至于,如可写可视化组件,不用在这说了吧。
      

  8.   

    你在窗口类中定义:
    procedure CMDialogKey(var Msg: TCMDialogKey); message cm_DialogKey;写如下代码:
    procedure TForm1.CMDialogKey(var Msg: TCMDialogKey);
    begin
      if (Msg.CharCode = VK_RETURN) then
      begin
        Perform (CM_DialogKey, VK_TAB, 0);
        Msg.Result := 1;
        //MessageDlg('FKDKD'+#13+#10+'', mtWarning, [mbOK], 0);
      end
      else
        inherited;
    end;
    当你按下回车键时,会将消息转为TAB消息送到消息队列中。
    这样当你按下回车键时,相当于按下一个TAB键。但是我用VK_F1代换VK_RETURN 时,没有反映,也许系统有比较高的响应权,被操作系统截住了。
    但我用其它的值,就可用了。下面是一些消息值:VK_F1 = 112;
      {$EXTERNALSYM VK_F2}
    VK_F2 = 113;
      {$EXTERNALSYM VK_F3}
    VK_F3 = 114;
      {$EXTERNALSYM VK_F4}
    VK_ESCAPE = 27;
      {$EXTERNALSYM VK_SPACE}
    VK_TAB = 9;
      {$EXTERNALSYM VK_CLEAR}
    VK_RETURN = 13;
      {$EXTERNALSYM VK_SHIFT}你再想想办法吧。
      

  9.   

    自己重写吧,注意不要调用GetOpenFileName
      

  10.   

    GetOpenFileName
    是Windows的API函数,它的作用就是显示一个Windows公共对话框(文件选择),Delphi的TOpenDialog就是调用它。再怎么重载也没有用的。