Delphi中如何实现联机帮助.doc_第1页
Delphi中如何实现联机帮助.doc_第2页
Delphi中如何实现联机帮助.doc_第3页
Delphi中如何实现联机帮助.doc_第4页
Delphi中如何实现联机帮助.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十一章Delphi应用程序的Help应用所有的应用程序都是TApplication的派生类。TApplication有三种方法调用在线帮助系统。HelpContext方法可调用WinHelp(关于Winhelp的内容见上节)。它把HelpFile 中的文件名和一个文本代码传递给WinHelp。HelpFile是TApplication的字符串类型的属性,专门用来存放Help文件的。如果HelpFile属性是空字符,HelpContext返回假值,其它情况均返回真值。下面的例子使用窗体上的一个按钮,当用户单击按钮,屏幕出现DATA.HLP文件中714号主题内容。procedure TForm2.Bin1Click(Snder : TObject)beginApplication.HelpFile := DATAHLP;Application.HelpContext(714); end; HelpJump方法可调用WinHelp。它传递HelpFile属性中的文件名和帮助文件的内容字符串(详见11.1节)。内容字符串是帮助文件中唯一辨识帮助主题的字符串。如果HelpFile 属性是空字符,HelpFJump返回假值,其它情况均返回真值。下面的例子使用了窗体上的一个按钮。当用户单击按钮, 帮助系统调出了 DELPH2.HLP文件中的Default属性。因为Default属性的内容字符串是VclDefaultPcedure TForm1.Tbn|Click(Sender : TObject)beginApplication.HelpFile := DELPHI.HLP;Application.HelpJump (VclDefaultProperty);endHelpCommand方法能快速访问WinHelp函数中的各种命令。根据这些命令WinHelp执行不同的动作。表11.2是WinHelp函数的有关信息。BOOL WinHelp(hwd,LpszHelpFile,fuCommand,dwData)表11.2 WinHelp的参数及含义参数 类型描 述hwnd HWND 请求帮助的窗口LpszHelpFile LPSTK 待显示的帮助文件的文件名fuCommand UNIT 请求的帮助类型dwData DWORD 帮助所需的描述表或关键字HelpCOmmand向WinHelp传递fuCommand和dwData,fuCommand 是帮助类型可为表11.3中的列值之一。表11.3 fuCommand的取值及含义值 含 义HELP_LONTEXT 显示dwData指定描述长的帮助信息HELP_CONTENTS 显示帮助的内容主题HELP_SET_LONTENTS 如果dwData是Orol04则在一个弹出 式窗口中显示Help主题HELP_HELP PONHELP 显示Help应用程序的自身帮助,函 数忽略lpszHelpFile和dwData参数HELP_INDEX 显示帮助文件的索引HELP_KEY 显示dwData指定的关键字的帮助HELP_MULTIKEY 显示一个关键字的帮助,该关键字 在一个可变关键字表中HELP_QUIT 向Help应用程序报告文件不再使用HELP_SETNDEX 把dwData指定的描述符作为帮助文 件的当前索引dwData参数的含义依赖于fuCommand的设置,如果fuCommand为HELP_CONTEXT,dwData为一个32 位的无符号整数,它包含一个描述表标识号:如果 fuCommand 为 HELP_KEY,dwData 则为一个指定长指针,所指的字符串是帮助的关键字。 如果 fuCommand 为HELPMULLTIKEY,dwData则指向一个MULTIKEYHELP数据结构的长指针。下面的例子使用了窗体中的按钮。 当用户单击按钮帮助系统将显示指定文件的帮助内容主题。procedure TForm1.Bin1Click(Sender : TObject)beginApplication.HelpFile := MyHlep.HLPApplication.HelpCommand(HELP_CONTENTS,0);end;TApplication部件的OnHelp事件响应帮助事件。 当应用程序接收到一个所需的帮助时,发生OnHelp事件。使用OnHelp事件可以在需要帮助时定义一些特殊过程。 以下的例子改变了应用程序的帮助文件,AppHelp函数用来处理OnCreate事件。function TForm1.AppHelp(Command.Word;Data : lontint) : Booleanbeginif OpenDialog1.Exeeute thenApplication HelpFile := OpenDialog1.FileName;end;11.2.2 通用对话框中使用帮助系统Delphi通用对话框中都能显示一个帮助按钮。如果程序显示了对话框中的帮助按钮,应该确保应用程序的帮助文件中有相应的主题。在通用对话框中使用帮助系统,要做到以下三点:1. 把对话框的Option|SHOWHelp属性设置成true,这样在程序运行时将出现帮助按钮。 ShowHelp 属性与其部件的名字相关, 例如字体对话框的 ShowHelp 属性称为fdShowHelp。 2. 为对话框部件定义帮助文件。3. 定义应用程序的文件名。11.3 Delphi帮助提示(Hint)的应用使用Delphi集成开发环境时,用户常把鼠标置于程序部件上,如加速按钮,对齐按钮等。鼠标在部件上停留超过一定时间后,Delphi将会显示一个弹出窗口, 里面有部件名称和概述。这就是Delphi的帮助提示。Delphi的应用程序可通过定义ShowHint 属性实现帮助提示。11.3.1 帮助提示的显示ShowHint属性可应用于所有的控件和应用程序部件,控件的ShowHint 属性含义与程序的稍有不同。控件的ShowHint属性决定某一控件是否显示帮助提示,如果ShowHint 是真值,当用户把鼠标置于控件之上超过一定时间后,控件将出现帮助提示。如果是假值,则不出现提示。控件是否显示还决定于控件的ParentShowHind属性。如果 ParentShowHint是真值,控件的父类的ShowHint属性将决定控件是否显示帮助提示。 假如有一个分组框和一个检查框,分组框是检查框的父件。表11.3说明了子件与父件的 ShowHint,ParentShowHint属性设置对子件帮助提示的影响。表11.3 Hint属性设置对帮助提示的影响分组框ShowHint 检查框ParentShowHint 检查框ShowHint 帮助提示T或F F T 显示 T T F 显示F T T 不显示T或F F F 不显示T表示真值,F表示假值把控件的ShowHint属性设置成真值,系统自动将ParentShowHint设置成假值。应用程序部件的ShowHint属性可以决定整个程序的帮助提示是否有效。如果应用程序的ShowHint 属性为真,程序中各部件的帮助提示才有效, 但是否显示还要取决于部件的SHowHint, ParentShowHint及其父件的ShowHint属性,如果应用程序的ShowHint属性为假值,无论程序部件的属性如何设置,程序中所有帮助提示都无效。Hint属性是显示在帮助提示框中的文本字符。Hint属性应用于所有控件,包括应用程序部件菜单部件。因为应用程序部件不是可视部件,因此不能在Object Inspector 窗口中定义Hint属性。但可以在定义部件的Hint属性时同时定义应用程序部件的Hint 属性,定义时只需用“|字符会分开,例如: Edit.Hint := Name |Enter Name in the edit box等价于 Edit.Hint := Name;Application.Hint := Enter Name in the edit box应用程序的Hint属性可用在OnHint事件。如果只定义了一个值,Delphi把这个值同时赋给部件和应用程序部件的Hint属性。 如果应用程序的ShowHint属性为假值,所有的帮助提示将不显示, 但可以利用程序部件的Hint属性显示其它提示,如状态条等。当某一部件的SHowHint属性为真, 但又没有定义Hint 属性, 如果此时文件定义了Hint属性,则此部件将使用文件的Hint值。11.3.2 OnHint事件当用户把鼠标放在某一部件,而该部件的Hint 值不为空值,此时发生OnHint事件。利用OnHint事件可以执行一些特殊的操作。最常用是利用OnHint事件显示状态条的标题,状态条是用面板来实现的。下面举例说明。这个例子使用了面板部件,菜单,一个编辑框。菜单可随意设计, 但需记住每个菜单项的Hint 值。 另外, 定义编辑框的Hint 值, 把面板置于窗体底部( 将Align 属性置于dBotton)把面板标题置于左端(将Alignment属性置于taleftJustify)。OnHint 事件是应用程序部件的事件,而应用程序部件是非可视部件,不能使用Object Inspector窗体定义事件,必须编写自己的OnHint事件。首先,在TForm1对象中宣称DisplayHint方法,并在单元的implementation部分编写实现代码。在DisplayHint方法中,把应用程序的Hint属性赋给面板的标题。另一个重要问题是必须把DisplayHint方法作为处理OnHint事件的方法。窗体的OnCreate事件的代码解决了这个问题。下面列出了程序的完整代码。当用户运行程序, 把鼠标置于菜单或部件之上,在窗体的状态条中将出现定义的提示。TypeTForm1 = class(TForm)Button1: TButton;Panel1: TPanel;Edit1: TEdit;procedure FormCreate(Sender: TObject);private Private declarations publicprocedure DisplayHint(Sender: TObject);end;varForm1: TForm1;implementation$R *.FRMprocedure TForm1.DisplayHint(Sender: TObject);beginPanel1.Caption := Application.Hint;end;procedure TForm1.FormCreate(Sender: TObject);beginApplication.OnHint := DisplayHint;end;11.4 自定义部件的帮助安装Delphi有一个功能强大的帮助搜询引擎,叫做多层帮助,能为自定义的部件提供“上下文敏感”帮助。多层帮助允许把自定义部件的多个帮助文件安装成Delphi 的帮助序列,以提供给用户一种内层访问帮助文件的方式,用户有三种方法访问帮助文件:1. 设计状态选中部件,然后按F1;2. 在自定义部件的Object Inspector窗口中按F1;3. 在Delphi帮助系统选择搜询主题。Delphi 在提供这种帮助机制时, 不需要编写额外的代码。 有些文件是自定义部件帮助系统所必须的, 以下介绍安装的具体步骤。安装所需的文件STEREO.PAS自定义部件的源代码STEREO.RES自定义部件的资源文件STEREO.DCR工具调色板图标0STEREO.HRJ帮助工程文件STEREO.RTF帮助源文件STEREO.HLP自定义部件的帮助文件STEREO.KUF关键字文件安装步骤11.4.1 安装关键字文件1. 退出Delphi集成开发环境2. 备份delphibindelphi.hdx3. 运行HelpInst应用程序4. 打开delphibindelphi.hdx5. 选择keywords |Add菜单项并选择Sberee.buf6. 选择File|Source菜单项7. 退出HelpInst8. 因为WinHelp需要知道STEREO.HLP的位置所以要做以下其中之一:a. 把STEREO.Hlp复制到delphi:bin目录下;b. 在WinHELP.INI文件中加上stereo.hlp=usehelp;11.4.2 安装自定义部件1. 进入Delphi集成开发环境2. 选择Option|Install Components菜单项3. 选择Add4. 选择Browse5. 输入stereo6. 选择OK11.4.3 激活自定义部件帮助系统 1. TstereoButton和TStereeSpeaker部件从部件调色板上的Sample页拖至窗口;2. 选择TStereoButton部件并按F1,屏幕上出现关于TStereoButton的帮助信息;3. 在Object Inspector窗体口选择IsOn属性并按F1,屏幕显示IsOn属性;4. 在主菜单中选择Help|Topic菜单项,并搜询Stereo 主题, 屏幕将出现STEREO.HLP的帮助内容。跟我学做chm帮助文件从Windows 3.X到Windows 95,Windows使用的帮助文件一直都是hlp格式。在Windows 98以后,增加了一种基于HTML文件特征的chm帮助文件,Windows 98称之为Compiled HTML Help File。chm帮助文件是一个统一的窗口,左侧是目录、索引和搜索这三个功能项,通过常见的标签栏进行切换;右侧是Html文件的显示部分,改变了原来帮助文件目录窗口和主题窗口分离的情况;上部是工具栏。你可以用chm文件来制作软件说明书、产品介绍说明、学习教程、电子图书、个人资料管理等等。下面本文就以微软公司提供的HTML Help Workshop工具包,为你介绍如何制作chm帮助文件。下载与安装微软公司提供了制作chm帮助文件的HTML Help Workshop工具包,下载地址http:/library/tools/htmlhelp/wkshp/htmlhelp.EXE,目前的最新版为1.31英文版,文件大小3.34MB。直接运行下载后是一个自解压文件,按照提示即可完成安装。安装完成后,运行“开始/程序/HTML Help Workshop/HTML Help Workshop”后进入HTML Help Workshop主界面(图1)。如何使用用HTML Help Workshop制作chm文件很方便,下面就以“中华搜索宝CHINASSB”的软件说明为例,介绍制作的具体步骤。一、制作前的准备工作由于chm帮助文件是基于HTML文件特征的,所以前期编写HTML文件的准备工作很重要。HTML Help Workshop的角色就像是一个总管,以一个项目控制整个项目的各类型文件,然后将各类型的文件编译成独立的chm文件。它的每个主题就是一个HTML文件,它的结构有点类似平常我们所见到的目录树,但是它的主题包括目录及文件。主题文件可以用任何一个HTML编辑器进行编辑,也可用HTML Help Workshop编辑,唯一美中不足的是它的编辑器是纯文字模式,对于HTML文件而言不具备所见即所得的效果。如果你不会制作网页,没关系,你也可以通过Word 97或Word 2000,将Word格式的主题文件转换成HTML格式。二、创建项目文件第一步:点击HTML Help Workshop菜单栏中的“File/New”命令,这时出现“选择新建内容”的对话框,选中“Project”。第二步:,按“OK”按钮后,将“Convert WinHelp Project”这个选项留空,继续下一步。第三步:点击“Browse”按钮,设置放置项目文件的目录及项目文件名(图2),完成后,继续下一步。第四步:因为我们已经事先建好了html文件,此时请选择“HTML file”(图3),继续下一步。第五步:点一下“Add”按钮并加入已经编辑好的主题文件(也就是设置成首页面的HTML文件),如图4。点击“下一步”,最后点击“完成”按钮,新的项目即已新增完成。现在就可以进入HTML Help Workshop工作窗口(图5)。在窗口的上方是3个卷标,分别是“Project(项目)”、“Contents(目录)”、“Index(索引)”。在“Project”卷标的左侧是7个按钮,它们的功能名称自上而下分别是:“Change project options(改变项目选项)”、“Add/Remove topic files(添加/删除主题文件)”、“Add/Modify window definitions(添加/修改窗口定义)”、“HtmlHelp API information(HTML帮助API信息)”、“View HTML source(校验HTML源文件)”、“Save Project Contents and Index files(保存项目、目录和索引文件)”、“Save all file and Compile(保存全部文件并编译)”。第六步:点击“Project”编辑窗口下方的“Change Project Options”按钮后,会弹出一个“Options”对话框(图6)。在这个对话框的“General”卷标的“Title”中输入标题“中华搜索宝CHINASSB”,编译后这个标题将出现在chm文件窗口的标题栏中。在“File”卷标中选上“Automatically create contents file(.hhc) when compiling”。chm文件的“Search(搜索)”选项允许用户在所有主题文件中搜索字、词或短语,将它们的标题显示出来,而且用醒目的方式显示在主题中。在“Compiler”卷标中选上“Compiler fulltext search information”,即可支持全文检索功能。第七步:点击“Save project file and compile”按钮,虽然此时已经可以观看结果了,不过,我们要再多作一项设定让最后的成品再完整些。三、创建目录文件编辑目录文件是制作chm文件最关键的工作。目录文件应该包含一个chm文件所有目录(主题),而每个目录又包含条目标题(名称)和该条目的主题文件,要避免条目标题与对应的主题不一致的情况出现。等所有目录都添加好后目录就算完成了。第一步:点击HTML Help Workshop工作窗口的“Contents”卷标,这时系统弹出一个对话框,提示你“项目”还没有关联目录文件(.hhc),选择“Create a new contents file”,点击“OK”按钮后将创建一个新的目录文件。第二步:请指定一个新目录文件名和存放路径,点击“保存”后出现目录编辑窗口,目录编辑窗口的左侧有11个按钮。第三步:根据需要插入标题(类似资源管理器中的目录)或页面(类似资源管理器中某目录下的文件),按下“Insert a heading(插入标题)”或“Insert a page(插入页面)”按钮,都会弹出“Table of Contents Entry”对话框(图7),在“Entry title”输入框中输入条目的标题,并根据情况选定对应的主题文件,单击“Entry title”下的“Add”按钮,在弹出的对话框下面的“File or URL”输入框中输入文件名或URL地址并确定。第四步:如果在单击“Insert a page”按钮之前所选择的条目不包含别的条目,也不被别的条目所包含,那么会询问“Do you want to insert this entry at the beginningof the table of contents?”,选择了“是”会增加起始条目(一级条目),选择了“否”会增加一个子条目。标题可以分为多级,要按照制作的内容统一考虑。如果觉得不满意,可以用左侧的箭头进行调整,也可以选定该条目,单击鼠标右键,不但可以调整,还可以插入标题、主题或目录文件。四、创建索引文件索引文件(hhk)也是一个HTML文件,它包含若干个关键词,当用户打开chm文件后,单击索引标签并输入一个关键词后,chm文件将显示与这个关键词有关的主题的列表,使大家非常方便地找到相关主题。第一步:点击HTML Help Workshop工作窗口的“Index”卷标,这时系统弹出一个对话框,提示你“项目”还没有关联索引文件(.hhk),选择“Create a new contents file”,点击“OK”按钮后将创建一个新的索引文件。第二步:请指定一个新索引文件名和存放路径,点击“保存”后出现索引编辑窗口,索引编辑窗口的左侧有11个按钮。第三步:单击“Insert a keyWord”按钮,出现“Index Entry”对话框,在“General”选项的“KeyWord”输入框中输入关键词,再单击“Add”按钮添加与该关键词相关联的主题文件。如果想跳转到另一个关键词,在“Index Entry”对话框中按“Advance”选项,选中“Target is Another KeyWord”,再单击“General”选项的“KeyWord”输入框中输入关键词,再单击“Add”按钮添加与要跳转的关键词相关联的主题文件,单击“OK”按钮。最后单击“确定”按钮,并按“Save file”进行存盘。五、最后的设置工作第一步:选择“Project”卷标,点击“Change Project Options”按钮,在“File”卷标的“Content file”项目中,点击“Browse”指定为toc.hhc。在“Index file”项目中,点击“Browse”指定为index.hhc。第二步:重新点击“Save project file and compile”按钮进行存盘编译。第三步:最后点击主菜单“View/Compiled file”,通过“Browse”指定该chm文件的目录及文件名即可看到我们的作品了(图8)。的确也够简单的了,只要有完整的HTML源文件,激活Html Help Workshop创建一个新的项目文件,将第一个html(通常是default.htm或index.html)加进项目,存盘并编译就大功告成。同样的一组HTML文件,放在网站上是一页一页的网页,变成单一的chm后,则可用作软件辅助说明,而且已经内建了全文检索功能。上述介绍的只是制作chm帮助文件的基本步骤。但它的功能远非这些,如:可向HTML文件中插入HTML Help ActiveX控件、Java脚本、弹出式窗口等等。还可将已有的chm文件解压缩变回原来的HTML文件。在Windows中各种应用程序使用期间,我们可以通过按下F1键快速进入相关主题的帮助信息,从而获取帮助。在用户自己编写的Delphi应用程序里,对于chm格式的帮助文件,我们也可以编写自己的联机帮助。此功能主要是通过引用HHctrl.ocx文件的函数HtmlHelpA实现。在阅读下面文字之前,请先确保自己会用MicroSoft的帮助文件制作工具HelpWorkshop制作chm格式帮助,如果不会,请参阅网上王寒晖写的文章跟我学做chm帮助文件。 在Delphi中如何实现联机帮助?以下是用Delphi实现联机帮助的过程:1. 列出程序里需要用到的联机帮助主题,并分配主题号,以及对该主题进行解释的html文件;如:控件Button1的帮助主题是ID_Button1_Help,主题号是10,帮助文件是sample1.htm。对于需要联机帮助的所有控件或文字,按照Button1的方式依次列出帮助主题、主题号和帮助文件。2. 在chm帮助文件所在目录下新建两个文件,Library.h和Library.txt;打开Library.h进行编辑,按如下模式输入步骤1中列出的帮助主题,每行写一个帮助主题。如:#DEFINE ID_Button1_Help 10#DEFINE ID_Button2_Help 11;打开Library.txt进行编辑,按如下模式输入步骤1中列出的帮助主题弹出文字。如:.topic ID_Button1_Help这是Button1的联机帮助!.topic ID_Button2_Help这是Button2的联机帮助!3. 打开chm帮助文件的工程文件,进入Project(工程)页面,用鼠标左键单击左侧由上至下第四个按钮HtmlHelp API information(Html帮助API信息)。1) 在弹出的HtmlHelp API information窗口中选择Alias(别名)页面,用鼠标左键单击右侧由上至下第一个按钮Add(添加),在弹出的Alias对话框中第一个编辑框内输入ID_Button1_Help,第二个下拉列表框内选择sample.htm,点击OK按钮插入该Alias(别名),重复此过程直至步骤1中所有的主题均在此处列出,如下图所示。2) 在HtmlHelp API information窗口中选择Map(映射)页面,用鼠标左键单击右侧由上至下第一个按钮Header File(头文件),在弹出的Include File(包含文件)对话框中,单击Browse(浏览)按钮,在弹出的打开对话框中找到Library.h文件,单击打开返回Include File(包含文件)对话框,单击OK按钮返回Map(映射)页面,如下图所示。3) 在HtmlHelp API information窗口中选择Text Pop-ups(弹出文字)页面,用鼠标左键单击右侧由上至下第一个按钮Header File(头文件),在弹出的Include File(包含文件)对话框中按步骤2)中方式指定Library.h文件;用鼠标左键单击右侧由上至下第二个按钮Text File(文本文件),在弹出的Include File(包含文件)对话框中按步骤2)中方式指定Library.txt文件,单击OK按钮返回Text Pop-ups(弹出文字)页面,如下图所示。4. 在HtmlHelp API information(Html帮助API信息),点击确定按钮返回Project(工程)页面,选择FileCompile重新编译该帮助文件。到现在为止,我们已经准备好了一个可以实现联机帮助的chm文件了,下面我们就可以编写delphi程序实现联机帮助功能了,过程如下。1. 新建一个工程Project1,新建Unit,将该Unit保存为HtmlHelp_Declaration,打开HtmlHelp_Declaration,在此声明HtmlHelp函数及相关常量、类型。该文件内容如下所示:unit HTMLHELP_Declaration;interfaceusesWindows;constHH_HELP_CONTEXT = $0F;HH_CLOSE_ALL = $12;HH_INITIALIZE = $1C;HH_UNINITIALIZE = $1D;typeDWORD_PTR = DWORD;function HtmlHelp( hwndCaller:HWND; strFile:String; uCommand:UINT; dwData:DWORD_PTR ):HWND; /实现启动联机帮助的函数procedure CloseHtmlHelpSystem; /实现关闭帮助窗口的过程implementationusesSysUtils;constHHControlInstance:THandle=0;dwCookie :DWORD = 0;varHtmlHelpA:function ( hwndCaller:HWND; pszFile:PChar ; uCommand:UINT;dwData:DWORD_PTR ):HWND;stdcall; /引用HHCTRL.OCX中的启动帮助函数(* 函数实现 *)function HtmlHelp( hwndCaller:HWND; strFile:String; uCommand:UINT; dwData:DWORD_PTR ):HWND;(*函数的实现过程:如果是第一次启动联机帮助,则载入库HHCTRL.OCX,并将启动帮助函数的地址赋给HtmlHelpA,然后通过传递参数HH_INITIALIZE调用之来初始化联机帮助,最后通过调用该函数并传递适当的参数来实现联机帮助;如果不是第一次启动联机帮助,则直接调用该函数并传递适当的参数即可。*)varOcxFileName:String;p:PChar;beginif HHControlInstance=0 thenbeginOcx

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论