各位高手 我在 截获 application的onhelp 事迹时 发现 按下F1键
并不执行 ONHELP事迹 而 在调用了 application.helpcommand(HELP_FINDER,0)时
触发了onhelp 事迹。
请问这种情况问题出在哪里
按理说,F1键应该要触发onhelp事迹的 
请高手指点!!我是在form的oncreate中写了:application.onhelp:=apphelp;
其中 apphelp是用来实现的函数
你说直接截F1是怎么搞的
我现在最好能用我在oncreate中写的方法来实现
可是F1却不能触发onhelp事件了
我该怎么办!

解决方案 »

  1.   

    建一个Action了,将其热键设为F1,再在其中写代码。
      

  2.   

    兄弟,咱们同病相怜啊!我今天也遇到了这个问题,首先表示对这个问题的严重关切。
    我的研究结果是:
    同样的代码在Delphi4下编译,一点问题也没有,onhelp也执行
    只要给Application.HelpFile赋个值
    在写下面的代码就可以了
    function TForm1.ApplicationEvents1Help(Command: Word; Data: Integer;
      var CallHelp: Boolean): Boolean;
    begin
      CallHelp := False;
      //调用chm
    end;
    delphi5没试过,估计也可以
    Delphi6不知道什么原因就是不行
    不知道是不是vcl的内部调用机制有所变化
    我也暂时用action解决了
    帮你up
      

  3.   

    楼上的兄弟!请问你所说的action是怎么实现的 
    可否详细讲以下
    还有在 action 中写东西的话,按F1就可以调用相应的文档了吗???
      

  4.   

    在窗体上放一个ActionList控件(Standard页最后的那个)
    双击那个控件,在弹出的窗口中点New Action按钮新建一个动作,
    将动作的快捷键设置为F1,在动作的OnExecute事件中调用chm文档
    调用chm文档要用到microsoft的api
    我有个单元,是有关chm的api的声明
    http://voodoo.xiloo.com/htmlhelpapi.htm 你去下载吧
    (速度不快,但应该可以看到:)
    给你个调用的例子吧 HtmlHelpShowTopic('\主界面.htm');
      

  5.   

    delphi6是做了改动:
    只有在窗体标题兰上放了帮助按钮才能响应 onhelp事件。
    如果没有放,按f1是不触发onhelp的。不过你可以拦截 WM_HELP 消息(当按 f1 时会收到)。procedure WMHelp(var Message: TMessage); message WM_HELP;
      

  6.   

    请教楼上:可否拦截整个application的 WM_HELP 消息
    用application 的onmessage可以吗?
      

  7.   

    请教楼上:可否拦截整个application的 WM_HELP 消息
    用application 的onmessage可以吗?
      

  8.   

    请教楼上:可否拦截整个application的 WM_HELP 消息
    用application 的onmessage可以吗?
      

  9.   

    to w_anghe:应该可以吧!
    顺便问一下 阁下对 assign() 和 assigned()函数 能帮忙清楚的解释一下吗?
    举个例子 是最好的啦
    希望知情的同志 们都过来 说说你们自己的见解!!!!
      

  10.   

    assigned() 应该是判断是不是传入的参数是不是空(nil)
    例如 if assigned(x) then 相当于 if x <> nil then
    assign()是把参数中对象的属性复制给自己
    例如
    Memo1.Lines.Assign(Memo2.Lines)是把Memo2.Lines的属性复制Memo1.Lines
    是复制而不是引用
      

  11.   

    To w_anghe:
       请问在你的Example中,如果这样做有没有问题:
       Memo1.Assign(memo2)
       我在使用Edit1.Assign(Edit2)出现了错误
       请问我错在了哪里?
      

  12.   

    assign这个方法似乎需要子类重载它,看vcl的源码吧
    对tstringlist类是可以这么用的,其他类如果没有重载assign方法就不
    可以了
      

  13.   

    To w_anghe
    你能不能讲的清楚点!
    我做了这个动作是有效的
    Edit1.Font.Assign(Edit2.Font)