返回列表 回复 发帖

VB中如何建立完整的联机帮助

帮助文件是任何全功能的、基于Windows的应用程序的一个很重要的组成部分。如果一个商品化的软件没有完整的联机帮助手册,那么可以肯定它不是一个成熟的软件,因为不提供帮助就好象是假定用户从来不会有问题。
    要生成自己程序的帮助文件,可以使用工具Microsoft Help Compiler(HC.EXE)作为编译器,它能把帮助文件源代码编译成一个Windows可以调用的二进制的帮助程序(HLP文件)。非常幸运的是该帮助编译程序已经包括在VB的专业版和企业版中。在VB光盘TOOLS\HCW目录中,运行SETUP即可安装。
    帮助文件的建立过程:
    1. 用WORD编写好帮助文件内容,存盘成RTF(Rich Text Format)格式的文件;
    2. 加入诸如$、#、K和分页符等形式的脚注符号,其有固定的语法来描述帮助文件的页面格式、字体、图像、风格、背景等,详细可参考有关资料;
    3. 设置热点,如跳转热点、弹出热点、图形热点等,并建立主题间的链接;
    4. 建立不可滚动的标题区;
    5. 插入所要的图形。
    Microsoft Help Compiler可以生成HLP、HPJ、CNT等文件,其中HLP为Windows可以调用的二进制的帮助文件,HPJ是帮助工程文件,CNT为帮助项目文件。HPJ经过Microsoft Help Compiler编译后成为正式的Windows可以调用的二进制的hlp帮助文件。
    VB中提供帮助的方式有如下三种。
    一、使用程序中“帮助”菜单项或者是“帮助”命令按钮直接调用帮助文件
    一般用此法来调用完整的帮助内容主题,以下详细说明怎样调用帮助文件。
    1. 要调用帮助文件,Windows 95 下本身有一个名为Winhlp或Winhlp32 的程序(c:\windows\winhelp.exe或winhlp32.exe),可以单独运行。选中你所要打开的帮助文件即可,使用Shell命令运行winhelp.exe。
    Private Sub Help_Click()
    Dim z
    z = Shell("c:\windows\winhelp c:\vb\help\vb.hlp", vbMaximizedFocus)
    End Sub
    2. 使用CommonDialog对话框来增加帮助文件。
    CommonDialog控制提供了一种强有力的、灵活的访问帮助文件的方法。建立一个名为mnuHelp的菜单,鼠标单击菜单时会出现帮助文件。
    Private Sub mnuHelp_Click()
    CommonDialog1.HelpFile = "c:\vb\help\vb.hlp"
    CommonDialog1.HelpCommand = cdlHelpContext
    CommonDialog1.HelpContext = Help
    CommonDialog1.ShowHelp
    End Sub
    3. 使用WinHelp API函数调用帮助文件。
    声明中加入:
    Private Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long, ByVal lpHelpFile As String, ByVal wCommand   As Long, ByVal dwData As Long) As Long
    Private Sub Command1_Click()
    x = WinHelp(hwnd, "c:\vb\help\crw.hlp", cdlHelpContents, 0)
    End Sub
    其中hWnd设置应用程序的hWnd属性,lpHelpFile包含所要激活的帮助文件名字的字符串,wCommand是控制的预定义常量之一,dwData为根据wCommand而采取的多种类型的值。
    二、使用缺省的上下文关联的F1帮助键
    用户期待所有的软件程序都应有上下文敏感帮助系统。上下文关联的帮助使用户只需单击就能跳转到合适的帮助主题。如果应用程序中没有上下文关联的帮助,那么用户就必须从帮助菜单上选择项目来访问所有帮助信息,然后人工地查找合适的帮助主题。
    上下文敏感意味着帮助系统显示窗口所含的内容与用户当前用该软件试图达到的目的紧密对应。例如当用户按下F1寻求某一指定字段的帮助,程序应该弹出指定字段所相关的帮助,而不是内容主题。这要求需要向帮助编译器提供组成帮助文件的有关信息,并将帮助上下文ID值(HelpContextID属性)赋给帮助上下文字符串。对于应用程序中对象上下文有关的帮助,当编译帮助文件时,必须对 object 和相关联的帮助主题赋予相同的上下文编号。如果已经为应用程序建立了 Microsoft Windows 操作系统环境的帮助文件,并设置了应用程序的 HelpFile 属性,那么当用户按 F1 键时,Visual Basic 将自动地调用帮助并查找被当前上下文编号所定义的主题。
    当前上下文编号是拥有焦点的对象的 HelpContextID 的值。如果 HelpContextID 被设为 0,那么 Visual Basic 将在对象的容器 HelpContextID 中查找,若仍然为 0,那么将在那个对象的容器中查找,如此继续下去。如果不能找到非 0 的当前上下文号,那么 F1 键被忽略。
    当用户将焦点放在这个控制上并按F1键时,就显示该控制的帮助主题。例如可以把CommandButton对象的HelpContextID 设为 0,但像line和label不能接受焦点,因此没有显示上下文关联帮助所必需的HelpContextID属性。
    三、使用“这是什么”帮助
    Windows 95为帮助文件的工作方式提供了一个新特性: “这是什么”帮助。它显示一个特殊的问号框,当单击时,鼠标光标变成一个带特殊问号“?”的光标符号,可以激活一个特定于所单击对象的弹出窗口式上下文敏感帮助。WhatsThisHelp与上下文关联帮助相类似,主要区别在于两者的调用不同:当控制接收到焦点并且用户按下F1键时,就是上下文关联帮助;当用户把“?”图标拖动到一个WhatsThisHelp设置为帮助上下文ID的控制时,才激活WhatsThisHelp。在应用程序中包含WhatsThisHelp,使应用程序更具有专业化的口味,并且“?”图标很容易与帮助关联起来,指导用户从这里寻找使用帮助。
    “这是什么”帮助可以从工具栏按钮、菜单项或者对话框的标题栏上的按钮启动。有三种访问技术可用在应用程序中提供“这是什么”的 Help。采用其中任何一种访问技术时,都必须将 WhatsThisHelp 属性设置为 True。WhatsThisHelp 属性返回或设置一个值,该值决定上下文敏感的帮助是否使用由 Windows 95 Help 提供的“这是什么”弹出式窗口或主 Help 窗口。该值在运行时为只读状态。
    1使用 WhatsThisButton 属性可在窗体的标题栏提供一个“这是什么”按钮,同时窗体的BorderStyle设置为1-Fixed Single或3-Fixed Dialog。鼠标指针能改变成“这是什么”状态(带问号的箭头)。所显示的主题由用户所单击控件的 WhatsThisHelpID 属性所标识。Windows 95 使用窗口右上角处的“这是什么”按钮来启动 Windows Help,并加载一个由 WhatsThisHelpID 属性所标识的主题。
    2调用窗体的 WhatsThisMode 方法。这将导致不使用按钮而像单击“这是什么”按钮时同样的行为。例如,可从应用程序的菜单条的某个菜单命令中来调用该方法。
    Private Sub Command1_Click()
    WhatsThisMode
    End Sub
    按F5运行后,单击命令,便出现“这是什么”光标。
    3为某个特定的控件调用 ShowWhatsThis 方法,显示 Windows 95 Help 所提供的“这是什么”弹出式窗口使用的 Help 文件中选定的一个主题,所显示的主题由该控件的 WhatsThisHelpID 属性来标识。ShowWhatsThis 方法对于从应用程序上下文菜单中提供上下文敏感 Help非常有用。该方法显示语法中指定对象的 WhatsThisHelpID 属性所标识的主题。下面的例子显示通过在为该按钮创建的上下文菜单中选取一个菜单命令的某个 CommandButton 控件的“这是什么”的 Help 主题。
    设置窗体的 WhatsThisHelp 属性为 True。将 CommandButton 控件放在窗体上,用“菜单编辑器”创建一个菜单,使它具有顶层不可见的项 mnuBtnContextMenu 和子菜单 mnuBtnWhatsThis,子菜单标题为“这是什么?”
    Private ThisControl As Control
    Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
   If Button = vbRightButton Then
   Set ThisControl = Command1
   PopupMenu mnuBtnContextMenu
   End If
   Set ThisControl = Nothing
    End Sub
    Private Sub mnuBtnWhatsThis_Click()
   ThisControl.ShowWhatsThis
    End Sub

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。
返回列表