版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、对象链接和嵌入(Object Linking and Embeding)是一组服务功能,它提供了一种用源于不同应用程序的信息创建复合文档的强有力方法。 对象可以是几乎所有的信息类型,如文字、位图、矢量图形,甚至于声音注解和录像剪辑等。Windows附件组中的书写器是应用OLE的实例,使用单击“对象 | 插入”菜单项, 书写器弹出插入对话框,对话框中列出了多个OLE服务器程序,如公式编辑工具,绘图工具,报表生成工具。用户双击鼠标左键,可激活一个OLE服务器。在OLE服务器中可编辑OLE对象,当用户返回到书写器中时,在书写器文档中将出现OLE对象。Delphi支持OLE技术,Delphi1.0可以
2、创建OLE应用程序,Delphi2.0可创建OLE自动化服务器和控制器程序。本章通过例程介绍对象链接与嵌入的基本概念,Delphi创建OLE对象的方法,OLE自动化的概念以及如何开发OLE自动化服务器和控制器。8.1 OLE简介8.1.1 OLE1.0和OLE2.0 迄今为止,有两种版本的OLE:OLE1.0和OLE2.0。当用户在OLE1.0 服务器中激活OLE对象,服务器程序在前台打开自己的窗体,并获得焦点。OLE窗体失去焦点,存在于单独的窗体之中。OLE2.0服务器采用“本地”(in place)激活方式。本地激活意味着服务器菜单与应用程序菜单要进行融合,服务器的状态条更换应用程序状态条
3、,服务器的工具条更换应用程序工具条。OLE对象在应用程序窗体中进行编辑,但所有过程均由服务器处理。创建OLE对象的服务器决定了OLE的激活方式。如果一个OLE1.0的对象在OLE2.0 编译的应用程序中打开,它将采用OLE1.0的方式。8.1.2 链接与嵌入链接对象的数据保存在OLE服务器创建的文件中,嵌入对象的数据保存在OLE应用程序中。链接对象必须以文件形式保存,只有对OLE服务器已经创建好的OLE对象, 才能进行OLE链接,链接的OLE对象文件可被OLE应用程序或其它程序进行修改,OLE 服务器和其它OLE应用程序也可以访问和修改OLE对象。对象数据保存在某一处,但可以被多个应用程序访问
4、。Delphi应用程序可以得到OLE对象文件中的最新数据。当OLE 对象数据被应用程序修改时,这些变化将在所有包含该对象的其它应用程序中体现。嵌入对象保存在OLE应用程序中,其它应用程序不能访问该对象。只有在OLE应用程序中激活OLE对象才能对其进行编辑。嵌入的OLE对象不需要保存在文件中,所有数据都在应用程序中,这就确保了OLE数据不会被偶然地删除或修改。不足之处是应用程序的规模因为保存了OLE数据而增大了 。如果用户想保存对嵌入对象的修改,可以把OLE数据存入文件中,本章第3 节将详细讨论这个问题。 表8.1 使用链接或嵌入的原则。 何时使用链接何时使用嵌入想要对源对象进行修改及将对源对象
5、进行修改,并将这这些修改反映到其他与源对些修改反映在一个特定的应象链接的应用程序或文本中用程序或文本中源对象可能被多个OLE应 源对象不可能被一个OLE应用程序应用程序频繁修改用程序频繁修改源对象的文件不会被频繁移源对象的文件可能被频繁移动,且不会被删除 动,且不会被删除对象很大,一般通过网络或对象很小,或对象很大却无法电子邮件进行分配通过网络或电子邮件进行分配8.1.3 设计状态OLE对象的创建在Delphi中,可分别在设计状态或运行状态创建OLE对象,表8.2说明了两种状态创建对象的差别。表8.2 设计、运行状态OLE对象的创建设计状态OLE对象的创建 运行状态OLE对象的创建对象保存在运
6、行文件中,增加了所需 对象保存在一个文件中或只在运行时编译的程序的规模 才有,减小了编译程序的规模开发者需在设计时访问OLE服务器开发者不需要在设计时访问OLE服务器运行时OLE对象已经创建,减小了 运行时OLE对象已经创建,增加了运行运行时间 时间OLE对象在设计运行时间可行性编辑 OLE对象只能在运行时编辑应用程序的OLE对象数目在设计时已 应用程序可以在运行时创建新的OLE对经确立 象在设计状态,OLE服务器不能被本地激活,只能在自己的窗体内激活。但在运行状态,只要OLE服务器支持本地激活,就可以使用这种方式。8.1.4 OLE类、文件、项目OLE类决定创建OLE对象的服务器。有些应用程
7、序需要创建多种类型的OLE对象,例如应用程序同时链接或嵌入公式、图片等。OLE类也决定OLE对象所包含的数据类型,链接或嵌入对象均要定义OLE类。OLE文件是包含OLE对象数据的源文件。链接对象必须使用对象文件,因为链接对象在文件中保存。如果应用程序从已存在的源文件中创建嵌入对象,也要使用OLE文件。例如,如果链接到QuattiPro笔记本的OLE对象TUTOR.WBI存储在D:DFFICEQPW目录下,则OLE文件就是D:DFFICEQPWTUTOR.WBI。值得注意的是OLE文件只能为链接对象所定义,而对于嵌入对象,只需定义OLE类。OLE项目是代表链接或嵌入数据的OLE文件中的一部分。当
8、应用程序希望OLE对象包含比OLE文件小的数据块时,则必须使用OLE项目。例如,在QuattiPro笔记本中,OLE对象链接了GasCosts的B4 到B5 范围的网格,OLE项目是$GasCosts;$B$4.$B$5。8.2 设计状态OLE对象的创建Dephi可以在设计状态和运行状态中创建OLE对象。本节介绍设计状态OLE对象的创建。8.2.1 TOLEContainer部件要创建OLE对象,需在窗体中加入OLE包容器部件。 应用程序部件包含链接或嵌入的对象。用该部件可显示在OLE服务器编辑的数据。部件的ObjClass,ObjDoc,ObjItem 属性分别定义OLE类、文件、项目。要定
9、义OLE对象是否本地激活,使用InPlaceActive 属性。如果OLE对象可以本地激活,OLE服务器菜单将与OLE应用程序的菜单进行融合,GroupIndex属性的值将决定菜单融合情况。8.2.2 OLE对象创建的步骤:1.在窗体中增加OLE包容器部件;2.在Object inspector中单击ObjClass或ObjDoc属性的省略按钮,将出现插入对象对话框; 3.如果要插入的OLE 对象已存储在文件中,选择“Creat From File”,而后定义该对象的文件名和路径名。如果是链接对象,则选择链接检查框。 如果是嵌入对象,选择“Creat new”,并在对象类型列表框中选择OLE对
10、象;4.选择OK按钮;如果是创建新对象,OLE服务器将激活,则可对OLE对象进行编辑,完成编辑后关闭OLE服务器。典型的例子是单击服务器中的“File”或“File|Update”菜单。5.此时ObjClass属性中包含了相应的值,如果OLE对象从已存在的文件中创建或插入一个链接对象,ObjDoc属性包含了OLE文件。在设计对象状态时也可以粘贴OLE对象,其步骤如下:1.激活服务器应用程序,选择OLE包容器部件;2.在服务器中,将数据或对象拷贝到剪切板;3.进入Delphi集成开发环境,选择OLE包容器部件;4.在 Object inspector窗体中选择ObjItem属性的省略()按钮;5
11、.在列表中选择OLE对象;6.选择“Paste创建一个嵌入对象或选择Pastelink创建链接对象;7.选择OK。OLE包容器部件在此时初始化。如果粘贴一个嵌入对象,ObjClass属性将包含适当的值。如果粘贴一链接对象,ObjClass,ObjDoc,ObjItem属性将全部定义。OLE 应用程序部件包含代表OLE对象的图片。如果OLE服务器程序支持OLE对象的拖放功能,则在设计状态从服务器中拖动对象至应用程序,应用程序将创建链接对象,具体步骤:1.激活服务器,并Delphi集成开放环境中选择要链接的对象;2.按隹鼠标左键拖动OLE对象至设计状态的窗体;3.松开鼠键释放OLE对象。窗体将创建
12、OLE应用程序并进行初始化。8.3 OLE应用程序的开发Delphi可以在设计状态和运行状态创建OLE对象,上一节介绍的是在设计状态如何创建OLE对象,这一节将通过例程介绍如何在运行状态创建OLE对象、粘贴对象、拖动对象,以及OLE 对象的文件操作。我们开发的 OLE.dpr是一个OLE应用程序的实例8.3.1 OLE应用程序界面开发OLE.dpr采用了多文档界面,父窗体有菜单,工具条,状态条,子窗体有一个OLE包容器部件,下面分别加以介绍。8.3.1.1 OLE应用程序的菜单OLE应用程序的菜单与其它应用程序的主菜单大体一致,如果应用程序中有支持本地激活的OLE 2.0对象,则要进行菜单融合
13、。查阅OLE 服务器的资料可知道服务器是否支持本地激活。OLE应用程序菜单的GroupIndex属性决定融合菜单的位置,即融合菜单是更换主菜单,还是插入至应用程序的主菜单中。OLE服务器,将融合三组菜单:Edit,View,Help,每组菜单分配了唯一的组索引值。在OLE应用程序中任何索引值为1,3,5的菜单组在菜单融合时被OLE服务器中具有相应索引值的菜 单更换。在本例程中,编辑菜单项在菜单融合时被服务器的Edit替换。如图8.3。 要想保存应用程序中的菜单,分配有异于1,3,5的索引值。表8.3 融合后的菜单菜单 索引值功能描述来源(OLE激活时)文件 0 使用文件和退出程序 OLE应用程
14、序Edit 1 编辑OLE对象 OLE服务器对象 2 操作未激活的OLE对象 OLE应用程序View 3 修改OLE对象的观测方式 OLE服务器窗体 4 操纵窗体 OLE应用程序Help 5 访问服务器在线帮助 OLE服务器8.3.1.2 OLE工具条和状态条当OLE对象被本地激活时,OLE服务器将试图用自己的工具条和状态条替换OLE应用程序的。如果应用程序想要本地激活, 就应该在应用程序中编写相应的代码让服务器使用工具条和状态条。要做到这点,必须: 设置工具条和状态条 在应用程序中加入状态条通过修改面板部件的属性创建工具条和状态条。当OLE对象被本地激活时,面板或其他对齐控制将与OLE服务器
15、程序进行协调。 这意味OLE服务器可以替换OLE应用程序窗体中任何对齐控制,但锁定的控制不能被替换。例如, 如果面板的align属性是alTop,alleft,alBottom,alIngh时,控制未锁定,OLE服务器可以替换。要使应用程序的工具条、状态条不被替换,可将locked属性设置成真值。当OLE 对象被激活,OLE 服务器在状态条中显示有关信息时,OLE 应用程序部件的OnStatusLineEvent事件发生,一个文本字符会将从OLE服务器传至该事件句柄。 OnStatusLineEvent事件句柄的MSG参数接受文本字符。以下代码用以状态条接收OLE服务器的信息:procedur
16、e TOLEObjectForm.OleContainerStatusLineEvent(Sender: TObject;Msg: String);beginOLEFrameForm.StatusBarPanel.Caption := Msgend;8.3.2 插入OLE对象 运行状态时进行对象链接与插入也要用到插入对话框,Delphi中没有插入对话框部件,但可调用InsertOLEObjectDlg 函数来显示对话框。8.3.2.1 InsertOLEObjectDlg函数声明如下:function InsertOleObjectDlg(Form: TForm; HelpContext: T
17、HelpContext;var PInitInfo: Pointer): Boolean;其中参数Form是拥有插入对话框的窗体,一般将拥有OLE包容器部件的窗体名字传给Form.参数Helplontext为插入对象对话框定义在线帮助,如果应用程序没有在线帮助, HelpContext的值为零,对话框中将不出现帮助按钮。参数PInitInfo是一个无类型指针,该指针指向一个包含初始化OLE 部件信息的内部数据结构。InsertOLEObjectDlg修改这个指针以指向一个有效的数据结构,该结构包含了对话框列表中被选择的OLE 对象初始化信息。当该指针被使用后,应调用ReleaseOLEInit
18、Info过程释放初始化信息所占用的内存。当用户选择OK 按钮关闭插入对象对话框,InsertOLEObjectDlg 返回真值,并把 PInitInfo指向包含OLE对象的初始化信息的数据结构。8.3.2.2 初始化OLE包容器部件为了使OLE包容器部件包含OLE对象,必须对部件进行初始化。 初始化主要是定义部件的OLE类。如果定义了OLE文件和OLE项目,初始化完成后,OLE 应用程序部件将包含OLE对象。调用InsertOLEObjetDlg函数可在其参数PInitInfo获得关于OLE对象初始化的信息时,把它传递给OLE包容器部件的PInitInfo属性,OLE包容部件的ObjClass
19、,ObjDoc,ObjItem属性将被自动定义。初始化完成后,OLE对象被击活。OLE服务器将获得控制,用户可通过OLE服务器对OLE对象进行编辑。当程序冻结OLE对象,OLE包容器部件将包含一幅图像或位图代表OLE对象。定义OLE包容器部件的AutoActive属性可重新激活OLE对象,缺省情况下,双击OLE包容器部件可击活OLE对象。例程中初始OLE对象的代码如下: procedure TOLEObjectForm.InitializeOLEObject(Info: Pointer);beginOLEContainer.PInitInfo := Info;ReleaseOLEInitInf
20、o(Info)end;该过程先将初始化指针传给OLE包容器部件的PInitInfo属性,而后释放其内存空间。当用户单击例程中的“编辑 | 插入”菜单项,将弹出插入对象对话框,选择对象类型后, OLE对象被激活,该过程的代码如下: procedure TOLEObjectForm.InsertObject1Click(Sender: TObject);varInfo: Pointer;beginif InsertOLEObjectDlg(OLEFrameForm, 0, Info) thenInitializeOLEObject(Info);end;8.3.3 冻结OLE对象如果OLE对象是OL
21、E 1.0服务器创建,对象将在OLE服务器中被击活,焦点和控制移到OLE服务器中。要冻结一个由OLE 1.0创建的对象选择File | Exit菜单项。如果OLE 2.0服务器支持本地激活,激活OLE对象后OLE服务器将进行菜单融合,并转换工具条和状态条。要冻结对象,只需在应用程序窗体中异于OLE包容器部件的任何地方单击鼠标键即可。另一种冻结对象的方法是把OLE包容器部件的Active属性设置成假值。在例程中,“对象|冻结”菜单项实现冻结功能。代码如下: procedure TOLEObjectForm.Deactivate1Click(Sender: TObject);beginOLECon
22、tainer.Active := Falseend;8.3.4 粘贴OLE对象一些OLE服务器允许用户把OLE对象复制到剪贴板,如果一个OLE对象复制到剪贴板上,OLE应用程序可通过初始化OLE包容器部件来粘贴OLE对象。8.3.4.1 粘贴对话框 把OLE对象粘贴到OLE包容器部件,要使用粘贴对话框,Delphi 中没有粘贴对话框部件,但可用PasteSpecialDlg函数显示粘贴对话框。PasteSpecialDlg 函数声明如下: function PasteSpecialDlg(Form :TForm;Const First:arrang; HelpConcert: THelpCOn
23、text;var Forrmat : Word; var Hardle : THanlle var PInitInfo :Point ) : Boolean; PasteSpecialDlg参数定义如下:参数Form是拥有粘贴对话框的窗体,应把包含OLE包容器部件的窗体名字传递给Form。 参数Format是注册对象格式的数组,每组格式是BOLEFormat类型的数组成员。例如应用程序可注册两种对象格式。为嵌入对象注册FEmbedClipFmt ,为链接对象注册FlinkClipFmt。BOLEFormat 声明如下:BOLEFormat: RecordfmtID : Word;fmtName
24、 : array0.31 of char;fmtResultName : array0.31 of char;fmtMediun : BOleMedium;fmIsLInkble : Bool;end; fmtID是对象的剪贴板格式ID号,fmtID 可以是标准的剪贴板格式:CF_TEXT,CF_BIFMAP。使用OLE 对象时, 需注册新的剪贴板格式来处理OLE 对象。Windows的API中 的RegisterClipbordFormat函数注册格式。 fmtName表示是对象的名字,用以定义出现在粘贴对话框中列表框 内的对象名称。在例程中,把“S”匹配给fmtName,OLE服务器自动地
25、把格式化的名字代替“S”参数。例如,如果OLE服务器是画笔,在程序运行时“Paintbrush Picture Object”将代替“S”。fmtResultName,定义出现在粘贴对话框中结果检查框内的名字。在例程中, 把“S”传给了fmtResultName。OLE服务器自动地把格式结果名称代替“S”参数。例如,如果OLE服务器是画笔,程序运行时“Paintbrush Picture”将代替“S”。fmtMedium是BOLEMedium类型,是Windows决定对象格式的数据类型。例如,OLE 联接对象的格式是BOLE_MED_STREAM。OLE嵌入对象的格式是BOLE_MED_STO
26、RAGE。BOLEMedium函数可计算出需要的BOLEMedium类型。fmtIsLinkale决定对象格式是否可联连。联连对象的fmtIsLinkable为真值。嵌入对象的fmtIsLinkable为假值。参数HelpContext 为粘贴对话框定义在线帮助。如果应用程序没有在线帮助,HelpContext的值为零,对话框中将不出现帮助按钮。参数Form用以定义剪粘板上的格式,是由PasteSpecialDlg函数进行修改。因为使用粘贴对话框时,应用程序并不知道剪贴板的格式。因而用Format来处理剪贴板的数据。在本章例程中。 PasteSpecialDlg 函数把format 变量修改成
27、FEmbedClipFmt 或FLinkClipFmt格式,这两种格式是在主窗体的OnCreate事件中定义的。如果剪贴板上的数据不是OLE对象,Format将被修改成其它类型的格式,如CF_TEXT等。参数Landle定义剪贴板上的数据句柄。由PasteSpecialDlg函数进行修改。 当剪贴板的数据类型不是OLE对象时,需用Handle参数访问剪贴板数据。Handle是句柄类型。参数PInitInfo是一个指向OLE对象初始化结构的指针。前面在讲述初始化OLE应用程序部件时也用到了这种指针。PasteSpecialDlg函数将修改PInitInfo指针以使其指向一个有效的数据结构。该结构
28、包括了粘贴对话框中被选中的OLE对象的初始化信息。下面介绍粘贴对话框中的部件。 将剪贴板上的数据插入OLE应用程序,以实现对象嵌入,须选择Paste; 在OLE服务器资源文件与OLE应用程序之间建立联连,以实现对象联连,须选择: Paste Line; 要将闻连与嵌入的对象显示成图标,选择Display As Icon。若这个检查框被选中,改变图标(Chang Icon)按钮将显示通过这个按钮可改变OLE对象的缺省图标或标签。 如果数据不是注册的格式,Paste,Paste link选择键将变灰。 用户无法从剪贴板上粘贴数据。在本章例程中,剪贴板上的数据只能是FEmbedClipFmt(嵌入对
29、象) 和FlinkClipFmt(链接对象)。 用户在列表框中选择数据类型。有时数据被解释成多种类型。例如在包含OLE服务器功能的字处理器中把文本复制到剪贴板中。应用程序可以以文本和OLE对象两种方式粘贴对象。列表框中出现的选择项由OLE服务器决定。用户在粘贴对话框中选择OK按钮,PasteSpecialDlg返回真值,关于OLE 应用程序的初始化信息贮存在PInitInfo所指向的结构中。8.3.4.2 在剪贴板中使用OLE对象要把OLE对象粘贴到OLE应用程序中,必须用Windows的 RegisterClipboardFormat函数为链连对象、嵌入对象注册两种新的剪贴板格式。这些格式将
30、在BOLEFormat记录的fmtIdt域中被用到。本章例程中, 程序在OnCreate事件中注册OLE对象的剪贴板格式,以下代码是主窗体的OnCreate事件: procedure TOLEFrameForm.FormCreate(Sender: TObject);beginFEmbedClipFmt := RegisterClipboardFormat(Embedded Object);FLinkClipFmt := RegisterClipboardFormat(Link Source);Fmts0.fmtId := FEmbedClipFmt;Fmts0.fmtMedium := BO
31、LEMediumCalc(FEmbedClipFmt);Fmts0.fmtIsLinkable := False;StrPCopy(Fmts0.fmtName, %s);StrPCopy(Fmts0.fmtResultName, %s);Fmts1.fmtId := FLinkClipFmt;Fmts1.fmtMedium := BOLEMediumCalc(FLinkClipFmt);Fmts1.fmtIsLinkable := True;StrPCopy(Fmts1.fmtName, %s);StrPCopy(Fmts1.fmtResultName, %s);RegisterFormAsO
32、leDropTarget(Self, Fmts)end; 程序传给RegistClipBroardFormat函数一个描述格式的参数,它返回一个Word类型的值。该值能唯一的辨识新注册的格式。FEmbdeClipFmt,FlinkClipFmt 是TOLEFormat类的私有数据成员。 声明如下:TYPETOLEForaneForm = Class(TForm) privateFEmbedClipFmt: Word;FLinkClipFmt: Word;function CreateChild: TOLEObjectForm;publicFmts: array0.1 of BOleFormat
33、;end; 在注册剪贴板格式后, 还必须定义OLE 格式才能进行对象粘贴。 每种格式定义在BOLEFormat记录中。 程序中可能注册标准剪贴板格式并用这种格式进行粘贴。例如:注册文本作为粘贴格式,将BOLEFormat记录为fmtId域定义为CF_TEXT,fmt Medium 域定义为BOLE_MED_HGLOBOL。 BOLEMediumCalc 函数可以根据定义的剪贴板格式计算出fmtMedium值。在本章例程中,程序注册了两种格式,一种是链接OLE对象的格式,另一种是嵌入OLE对象的格式。BOLEFormat类型定义在BOLEDefs单元中,BOLEMediumCalc函数定义在To
34、Ctrl单元。因此主窗中的interface部分应加入这两个单元。interfaceuse,BOLEDefs,ToCtrl,在粘贴OLE对象前,应用程序必须知道在剪贴板中是否有OLE对象。PasteSpecialEnabled函数可判断粘贴对话框是否有效。如果剪贴板上有Fmts定义的任何一种格式,PasteSpecialEnable将返回真值, 粘贴对话框才能成功地调用。反之调用粘贴对话框将不发生任何事件。以下代码实现“编辑|粘贴”菜单项的功能:procedure TOLEObjectForm.PasteSpecial1Click(Sender: TObject);varClipFmt: Word;DataHand: THandle;Info: Point
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 易普力2025年三季报点评:矿服民爆协同发展2025Q3利润同比增长
- 2025年潍坊市检察机关公开招聘聘用制书记员9人备考题库及参考答案详解一套
- 2025甘肃兰州市公安局兰州新区分局招聘城镇公益性岗位人员5人考试核心题库及答案解析
- 2025年江西省机关事务管理局公开选调事业单位工作人员15人备考题库及一套答案详解
- 2025年湛江市公安局霞山分局关于第三次招聘警务辅助人员的备考题库及答案详解参考
- 2025江苏盐城市机关事务管理局直属事业单位选调工作人员1人考试核心试题及答案解析
- 2025年北京协和医院内分泌科于淼课题组合同制科研助理招聘备考题库有答案详解
- 2026中国金融出版社有限公司校园招聘4人笔试重点题库及答案解析
- 2025年贵阳铝镁设计研究院有限公司公开招聘26人备考题库参考答案详解
- 《GBT 19557.5-2017 植物品种特异性、一致性和稳定性测试指南 大白菜》专题研究报告
- 大一化学期末考试试题及答案
- 2025张家港市辅警考试试卷真题
- 部编版小学三年级语文寒假衔接讲义第4讲:句子复习 (学生版)
- 道路清扫保洁重点路段分析及解决措施
- 民主建国会会史课件
- 鹦鹉热护理措施
- 员工劳务合同书
- 人体形态学(山东联盟)智慧树知到期末考试答案章节答案2024年青岛滨海学院
- 《办公用房租赁合同》范本标准版可打印
- 人机环管安全管理措施
- 大庆一中、六十九中初四上学期期末质量检测物理试题
评论
0/150
提交评论