




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WebBrowser组件和MSHTML 在Delphi中的使用由于项目需要,近来研究了一下WebBrowser组件和MSHTML 在Delphi中的使用,整理了一下这段时间研究的结果,写下来一是方便大家查阅,二也可以加深我自己的记忆.希望能对大家有所帮助 ,同时,如果有更好的处理方式或者我没有提到的问题,请大家也告诉我哦, 咱们一块进步 .,其中一部分是我从网络中搜集的资料,谢谢那些兄弟们 MSHTML把HTML页面中的元素封装成了IHTMLInputElement、 IHTMLInputButtonElement、IHTMLInputTextElement、IHTMLTextAreaElement、IHTMLTitleElement、IHTMLFormElement等等组件接口。在程序中可以通过MSHTML提供的IHTMLDocument2接口得到整个Document对象,IHTMLElementCollection接口得到所有页面元素的集合,通过该接口的Item方法可以得到具体的某个组件,然后设置和读取该组件的属性值。下面是一些常用功能的事例代码.1 打开某个页面:web.Navigate(ExtractFilePath(Application.ExeName) + Template/login.html);2 取出页面中某个HtmlElement的Value属性值:function GetValueByElementName(web: TWebBrowser; elementName: string; index: integer): string;beginresult := (web.Document as IHTMLDocument2).body.all asIHTMLElementCollection).item(elementName, index) as IHTMLInputElement).valueend;3 给HtmlElement设置Value属性procedure SetValueTextAreaName(web: TWebBrowser; elementName, value: string;index: integer);begin(web.Document as IHTMLDocument2).body.all asIHTMLElementCollection).item(elementName, index) as IHTMLTextAreaElement).value := value;end;4 判断页面执行结果是否成功因为Web应用中如果出错的一般是采用错误页面的方式呈现给最终用户,所以我们也无法抓到Http错误,只能通过在webBeforeNavigate2事件中将URL参数记录到全局变量中, 然后在webDocumentComplete事件中根据URL参数和全局变量中的URL参数来判断执行结果是否正确.当然,这样需要将页面地址编码到代码中,降低了灵活性,但是这也是我能想到的唯一的方法,如果大家有什么好的方法,请告诉我哦.5 屏蔽鼠标右键和某些快捷键本功能需要在webBrowser的窗口中加入ApplicationEvents组件,设置它的OnMessage事件代码如下即可.procedure TwebAdapterForm.ApplicationEvents1Message(var Msg: tagMSG;var Handled: Boolean);const_KeyPressMask = $80000000;begin/禁用右键with Msg dobeginif not IsChild(web.Handle, hWnd) then Exit;Handled := (message = WM_RBUTTONDOWN) or (message = WM_RBUTTONUP) or (message = WM_CONTEXTMENU);end;/禁止Ctrl + N/禁止Ctrl + F/禁止Ctrl + Aif Msg.message = WM_KEYDOWN thenbeginif (Msg.lParam and _KeyPressMask) = 0) and(GetKeyState(VK_Control) 0) and (Msg.wParam = Ord(N)or (Msg.wParam = Ord(F) or (Msg.wParam = Ord(A) thenbeginHandled := True;end;end;end;6 在页面关闭的时候,同时关掉包含页面的VCL Form.(仅限 InternetExplorer 6.0)本功能需要卸载掉Delphi自带的 WebBrowser组件,安装ActionX组件(Microsoft Internet Controls V1.1),而且以后的程序只能运行在安装有Internet Explorer 6.0 的环境下.具体方法如下:在WebBrowser组件的OnWindowClosing事件中,输入self.close; 代码即可.如果需要阻止窗口的关闭, 设置CanClose参数的值为Flase.7 如何将页面中超链接新开的页面窗口包到指定的VCL窗口中.procedure TForm1.webNewWindow2(Sender: TObject; var ppDisp: IDispatch;var Cancel: WordBool);varform : TForm1;beginform := TForm1.Create(nil);ppDisp := form.web.DefaultDispatch;form.Show;end;8 在WebBrowser加载html页面完成后,在页面顶端插入HTML代码, 下面两种方式斗可以. 1. - procedure TForm1.Button1Click(Sender: TObject); var Range: IHTMLTxtRange; begin Range := (WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange; Range.collapse(False); Range.pasteHTML(Hello!); end; 2. - procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); var WebDoc: HTMLDocument; WebBody: HTMLBody; begin WebDoc := WebBrowser1.Document as HTMLDocument; WebBody := WebDoc.body as HTMLBody; WebBody.insertAdjacentHTML(BeforeEnd, Hello World!); end; 9 将页面中显示的内容全部选中,然后粘贴到Word文档中. WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT);/全选网页 WebBrowser1.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT); /复制网页 WordDocu.Range.Paste; /word文档粘贴 WebBrowser1.ExecWB(OLECMDID_UNDO, OLECMDEXECOPT_DODEFAULT); /取消全选 注:WebBrowser的Document属性值和WordDocument的Document属性值必须都不为nil. 10 如何解决网页不响应回车事件 public Public declarations procedure MsgHandle(var Msg :TMsg; var Handled :Boolean); end; var Form1: TForm1; FOleInPlaceActiveObject :IOleInPlaceActiveObject; implementation $R *.DFM procedure TForm1.MsgHandle(var Msg :TMsg; var Handled :Boolean); var iOIPAO :IOleInPlaceActiveObject; Dispatch :IDispatch; begin if WebBrowser1 =nil then begin Handled :=False; Exit; end; Handled :=(IsDialogMessage(WebBrowser1.Handle, Msg) =True); if (Handled) and (not WebBrowser1.Busy) then begin if FOleInPlaceActiveObject =nil then begin Dispatch :=WebBrowser1.Application; if Dispatch nil then begin Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO); if iOIPAO nil then FOleInPlaceActiveObject :=iOIPAO; end; end; end; if FOleInPlaceActiveObject nil then if (Msg.message =WM_KEYDOWN) or (Msg.Message =WM_KEYUP) and (Msg.wParam =VK_BACK) or (Msg.wParam =VK_LEFT) or (Msg.wParam =VK_RIGHT) then else FOleInPlaceActiveObject.TranslateAccelerator(Msg); end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage :=MsgHandle; end; procedure TForm1.FormDestroy(Sender: TObject); begin FOleInPlaceActiveObject :=nil; end; 11 如何在WebBrowser中调用当前页面中的javascript函数SayHello() WebBrowser1.OleObject. Document.parentWindow.execScript(SayHello(), javascript); /or (WebBrowser1.Document as IHTMLDocument2 ).parentWindow.execScript(SayHello(), javascript) /or webrowser1.document.script.SayHello();delphi中Webbrowser的使用技巧1.获取网页中变量的值 例如:htm中 var currIDS=123 程序中可以这样调用 id := Form1.WebBrowser1.OleObject.Document.script.currIDS 备注:变量可以是javascript定义的,也可以是vbscript定义的,如果Webbrowser1中找不到该变量,调用会触发一个异常事件,即变量currIDS不存在。2.执行网页中的函数 tmpf := currID = getNextID(currID)+#13#10; Form1.WebBrowser1.OleObject.Document.parentWindow.execScript(tmpf,JavaScript); 调用函数的方法就是execScript接口,同样,如果函数不存在,或者运行错误也会触发脚本错误异常3.设置网页背景 背景图片 WebBrowser1.OleObject.Document.body.background := /bg.gif; 背景颜色 WebBrowser1.OleObject.Document.body.bgcolor := #eeeeee4.调用网页中已知对象 src := WebBrowser1.OleObject.Document.getElementByID(img1).src 该方法其实就是javascript中的 getElementByID 5.获取页面中所有的frame 使用DHTML。 frames:=wb.OleObject.document.frames; for i:=0 to frames.length do memo1.lines.Add(framesi.document.body.innerHTML);6.BorderStyle=bsNone后Webbrowser会被重新初始化 这是一个让人很意外的一个问题,Delphi在窗口控件的控制方面做得非常好,很少出现这种BUG 根据分析,出现这个现象有很多情况 改变FormStyle也会出现 ; 如果 webbrowser.parent 由panel1 改到panel2.也会导致webbrowser重新初始化。7.直接向Webbrowser中写入html代码,不需要Navigate到实际存在的文件 var StrStream:TStringStream; SetNoteStr: string; begin SetNoteStr :=点点博客 ; SetNoteStr :=SetNoteStr+点击左边按钮可查看对应图片; StrStream:=TStringStream.Create(SetNoteStr); WebBrowser1.Navigate(about:blank); try StrStream.Position:=0; ( WebBrowser1.Document as IPersistStreamInit).Load(TStreamadapter.Create(StrStream); finally StrStream.Free; end;8.前进,后退,刷新 self.WebBrowser1.GoBack self.WebBrowser1.GoForward self.WebBrowser1.Refresh9.捕捉NewWindow2事件,即新开窗口事件 procedure TForm1.WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool);var NewWindow: TForm2;begin /exit; NewWindow:= TForm2.Create(nil); NewWindow.Show; ppDisp:= NewWindow.Webbrowser1.DefaultDispatch;end; 值得一题的是该方法不能获得新开窗口的URL,退一步的方法只能是等到在新的Webbrowser中触发BeforeNavigate2事件判断了10.网页中存在iframe时判断页面是否下载结束 procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);begin if WebBrowser1.Application = pDisp then showmessage(页面已全部下载完毕)end; 备注:每个iframe下载完毕都会触发DocumentComplete事件,所以一个页面在真正下载完毕前可能被触发多次 Delphi中使用WebBrowser控件中载入的页面的script使用如下语句即可:webrowser1.OleObject.document.script.doSomething(parameter);在网上看到还可以如下使用,不过我没用过。uses MSHTML; /use IHTMLDocument2 procedure TForm1.BitBtn1Click(Sender: TObject); begin WebBrowser1.OleObject. Document.parentWindow.execScript(SayHello(), javascript); /or (WebBrowser1.Document as IHTMLDocument2 ).parentWindow.execScript(SayHello(), javascript) end; 用WebBrowser实现HTML界面的应用 HTML的界面有以下特点:图文混排,格式灵活,可以包含Flash、声音和视频等,实现图文声像的多媒体界面,而且易于建立和维护。另外,HTML的显示环境一般机器上都具备,通常不需要安装额外的软件。当然,HTML界面也有它欠缺的方面,即:界面控制能力有限,代码调试不便-虽然DHTML提供了比较强的编程特性,但是比起Delphi的传统的开发语言和工具来,对界面的控制能力,尤其是和数据交互时的控制能力还是稍逊一筹。了解了这些特点,我们就可以在实际应用开发中,适时地选择HTML技术。下面举个例子:一种仪器的管理程序,需要显示该仪器的操作方法文档,包含文字和图片,并要求可以隐藏或显示文档,并能安要求打印。这个应用中,图文显示、隐藏/显示部分文档、图文打印等需求,都是HTML界面所擅长的,用传统的表单控件实现几乎无法想像。用什么实现HTML的界面用Delphi实现HTML界面的应用主要有两种选择:WebBrowser Control或MSHTML。为了弄清两者如何选择,我们先来看看Internet Exporer 4.0及其后续版本的体系结构:IE浏览器是建立在SHDOCVW.DLL组件之上的,而SHDOCVW.DLL则建立在MSHTML.DLL组件之上,底层则包括脚本引擎等。SHDOCVW.DLL提供了对活动文档(Active Document)的支持-例如Word等文档可以在IE中显示,并提供导航、in-place*连接、收藏夹、浏览历史和分级内容选择(PICS: Platform for Internet Content Selection)等功能。SHDOCVW.DLL组件虽然也提供了很多接口可以单独使用,但是通常所指的SHDOCVW.DLL就是WebBrowser Control。MSHTML.DLL是实行HTML解析和表现的组件。它通过DHTML对象模型提供对HTML文档的访问。它实现了活动文档服务器接口,可以通过COM接口调用。不难看出,WebBrowser在比较高的层次上,提供了更为丰富的功能,因此一般通常编程都采用WebBrower控件。MSHTML只有在需要解析HTML这样的特殊应用中,才推荐使用。微软的MSDN网站上提供了一个使用MSHTML的例子:WalkAll Sample Source Page。(*注:In-place链接,是指点击HTML连接时,在相同的WebBrowser实例中显示连接的HTML文档。如果仅使用MSHTML.DLL,点击链接将导致在新的浏览器实例中打开链接的文档。)如何访问HTML页面的内容首先,在Delphi 7.0组件面板的Internet页上,把TWebBrowser组件放到表单上,并手动把MSHTML加入到Uses列表中。通过执行以下语句装载HTML文档到WebBrowser中进行显示:WebBrowser1.Navigate(GetCurrentDir + index.htm);隐藏/显示HTML元件代码示例:var Doc : IHTMLDocument2; element: IHTMLElement; begin Doc := IHTMLDocument2(WebBrowser1.Document); if nil Doc then begin element := Doc.all.item(T1, 0) as IHTMLElement; if nil element then begin if = element.style.display then element.style.display := none else element.style.display := ; end; end; end;设置/取值代码示例:var Doc : IHTMLDocument2; inputText : IHTMLInputTextElement; begin Doc := IHTMLDocument2(WebBrowser1.Document); if nil Doc then begin /如果T1不是IHTMLInputTextElement类型将出错 inputText := Doc.all.item(T1, 0) as IHTMLInputTextElement; inputText.value := Edit1.Text; Edit2.Text := inputText.value; end; end;提示:关于哪些HTML元件(标记)应该采用什么MSHTML接口进行访问,请参考MSDN Library中的Web Development Programming and Reusing the Browser MSHTML Reference Interfaces and Scripting Objects。如何调用JavaScript函数(兼谈消息提示框)知道了访问HTML内容的方法,就可以通过间接方式调用HTML页面上包含的JavaScript代码。具体实现方式是:在HTML中插入等不可见元件,利用它的click事件调用响应的JavaScript函数,然后再Delphi中调用该元件的click过程。下面我们就用Delphi调用JavaScript的alert函数来实现消息提示框。首先在HTML中加入:Delphi中的调用代码如下:procedure TForm1.Alert(const Msg : string); var Doc : IHTMLDocument2; Element : IHTMLElement; begin Doc := IHTMLDocument2(WebBrowser1.Document); Assert(nil Doc);/一定要先加载HTML Element := Doc.all.item(ShowMessage, 0) as IHTMLElement; if nil Element then begin Element.innerText := Msg; Element.click; end; end;我发现在Delphi中用Browser显示HTML,如果你的表单是作为EXE运行,然后嵌入到了别的表单的组件上显示的,例如,Form1.Parent := Form2.Panel1,即Form1显示在Form2中Panel1所占据的位置,当你用ShowMessage显示提示信息时,HTML的内容依然可以被操作,这显然不太好。使用JavaScript中的alert函数则可避免这种现象。如何禁止右键菜单(如何禁止用户查看源代码)默认情况下,在显示HTML的WebBrowser上点击鼠标右键,会显示一个弹出菜单,和IE中看到的一样。通过这个菜单用户可以查看HTML的源代码。因此有时候我们需要屏蔽该菜单。和该菜单相关的接口是IEDocHostUIHandler。已经用人对它进行了封装,详见ieConst.pas 和 IEDocHostUIHandler.pas。使用方法如下:var Form1: TForm1; FDocHostUIHandler: TDocHostUIHandler; . implementation . procedure TForm1.FormCreate(Sender: TObject); begin FDocHostUIHandler := TDocHostUIHandler.Create; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FDocHostUIHandler.Free; end; procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; pDisp: IDispatch; var URL: OleVariant); var hr: HResult; CustDoc: ICustomDoc; begin hr := WebBrowser1.Document.QueryInterface(ICustomDoc, CustDoc); if hr = S_OK then CustDoc.SetUIHandler(FDocHostUIHandler); end;有时你可能还需要定制自己的右键菜单,这是还是要借助于IEDocHostUIHandler,具体实现方法可以看看MSDN Library。如何响应HTML的事件(如何在HTML中调用Delphi的代码)HTML事件的响应方式有两种:一种是JavaScript,一种是在Delphi中响应。一些简单的功能可以在JavaScript中实现,这样易于修改。但是从功能、安全性等方面考虑,通常还是要在Delphi中实现。例如当用户点击HTML上的一个按钮时,需要访问数据库,这是就得用Delphi了。在Delphi中响应HTML事件,实际上就是响应ActiveX事件的问题,这通过事件槽(Event Sink)来实现,有些繁琐。还好前人已经为我们作了很多工作。利用Experts Exchange网站的Cynna封装的TDHTMLEvent类(该源码请看本文的附件),实现就简单多了。实现代码如下:var Form1: TForm1; EventSink: TDHTMLEvent; . implementation . procedure TForm1.FormCreate(Sender: TObject); begin EventSink:= TDHTMLEvent.Create; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin EventSink.Free; end; procedure TForm1.DemoEventSink(Sender: TObject); begin ShowMessage(成功从HTML中调用Delphi的过程。); end; procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); var Doc : IHTMLDocument2; Element : IHTMLElement; begin Doc := IHTMLDocument2(WebBrowser1.Document); if nil Doc then begin /找到HTML元件 Element := Doc.all.item(B3, 0) as IHTMLElement; /使HTML元件的click事件和DemoEventSink过程关连 Element.onclick := EventSink.HookEventHandler(DemoEventSink); end; end;点击HTML页面中ID为B3的按钮,就会调用DemoEventSink过程。如何能在HTML控件上输入回车含有多行文本输入框(textarea )或提交(submit)按钮的HTML表单在TWebBrowser中显示时,对回车键不响应。另外,Delphi表单上按钮的快捷字母键也无法在HTML表单上输入,因为一输入就触发相应按钮的单击事件。解决代码如下:unitUnit1; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,OleCtrls,SHDocVw_TLB,ActiveX,StdCtrls; type TForm1=class(TForm) WebBrowser1:TWebBrowser; Button1:TButton; Button2:TButton; procedureFormDestroy(Sender:TObject); procedureFormCreate(Sender:TObject); procedureButton1Click(Sender:TObject); procedureButton2Click(Sender:TObject); private Privatedeclarations FOleInPlaceActiveObject:IOleInPlaceActiveObject; procedureMsgHandler(varMsg:TMsg;varHandled:Boolean); public Publicdeclarations end; var Form1:TForm1; implementation $R*.dfm procedureTForm1.FormDestroy(Sender:TObject); begin FOleInPlaceActiveObject:=nil; end; procedureTForm1.FormCreate(Sender:TObject); begin Application.OnMessage:=MsgHandler; end; procedureTForm1.MsgHandler(varMsg:TMsg;varHandled:Boolean); const DialogKeys:setofByte=VK_LEFT,VK_RIGHT,VK_BACK,VK_UP,VK_DOWN, $30.$39,$41.42,$44.$55,$57,$59.$5A; var iOIPAO:IOleInPlaceActiveObject; Dispatch:IDispatch; begin exitifwedontgetbackawebbrowserobject if(WebBrowser1=nil)then begin Handled:=System.False; Exit; end; Handled:=(IsDialogMessage(WebBrowser1.Handle,Msg)=System.True); if(Handled)and(notWebBrowser1.Busy)then begin ifFOleInPlaceActiveObject=nilthen begin Dispatch:=WebBrowser1.Application; ifDispatchnilthen begin Dispatch.QueryInterface(IOleInPlaceActiveObject,iOIPAO); ifiOIPAOnilthen FOleInPlaceActiveObject:=iOIPAO; end; end; ifFOleInPlaceActiveObjectnilthen if(Msg.message=WM_KEYDOWN)or(Msg.message=WM_KEYUP)and (Msg.wParaminDialogKeys)then /nothing-donotpassontheDialogKeys else FOleInPlaceActiveObject.TranslateAccelerator(Msg); end; end; initialization OleInitialize(nil); finalization OleUninitialize; 本段代码出自SwissDelphiCenter.ch,作者未知。主要要引用ActiveX。Delphi 7中SHDocVw_TLB改为SHDocVw。如何实现HTML的打印和预览HTML的打印和预览向来是个难题,但自从IE5.5推出后,情况大有改观。你可以利用其“打印模板”功能,实现自己的预览窗口和控制打印。“打印模板”的使用方法请参考MSDN Library中的Web Development Programming and Reusing the Browser Print Templates目录下的文章。从微软的网站上还可以下载到一个不错的例子,示例如何一步步由浅入深地使用Print Template (下载:打印模板示例)。你会发现,要自己实现一个功能完善的打印模板也并非易事。IE浏览器本身带的打印模板做得还不错,能否在它的基础上加上自己的定制功能呢?答案是肯定的,至少从技术上看是这样(不考虑版权问题)。下面就介绍这偷懒的招。用Visual Studio打开x:Program FilesInternet ExplorerMUI0804SHDOCLC.DLL,会看到其资源目录。其中HTML/PREVIEW.DLG就是IE所带的打印模板了。把它export(导出)出来,把文件扩展名改成HTM,打开看看,是不是特刺激?PREVIEW.DLG用到了几个图片文件,在2110目录下,别忘了导出。(注:我的环境是Windows XP Professional英文版+SP1a,IE是6.0sp1。)IE默认的模版中,页眉页脚均只支持纯文字。下面以定制HTML页眉为例,看看如何定制自己的打印模板。思路是:用自己的页眉内容换掉原有的内容,并修改其页眉高度和页边距使之和新的页眉相对应。第一步,定义页眉。在要使用此模版预览打印的HTML文件中加入一个id为Header的div标记,括起HTML页眉内容,并制定以英寸为单位的页眉的高度和宽度,其中宽度应该和模版相符。例: .(HTML页眉内容) 第二步,声明变量。在模版前面变量声明部分加上两个变量声明: var g_htmlHeader = ;/用于保存页眉内容 var g_nHeaerHeight = 0;/页眉的高度第三步,取得页眉。在函数OnLoadBody()中的“Printer.footer = dialogArguments._IE_FooterString”语句之后加入这段代码:oPageHeader = dialogArguments._IE_BrowseDocument.all.item(Header, 0);if (null != oPageHeader) g_htmlHeader = oPageHeader.innerHTML; g_nHeaerHeight = oPageHeader.style.posHeight;第四步,指定页边距和页眉高度。在上面的代码下面紧接着加入:/指定页边距。其中40可以自己改,单位是百分之一英寸。Printer.marginTop = 40 + (g_nHeaerHeight * 100);Printer.marginBottom = 40;Printer.marginLeft = 40;Printer.marginRight = 40;在函数EnsureDocuments()中,/*注释掉以下代码if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咨询服务协议书样本
- 解析卷-北师大版8年级数学上册期中试题及参考答案详解(B卷)
- 2025版电子信息设备融资租赁委托合同样本
- 2025年度国内高端柴油批发与物流配送合作合同
- 2025版城镇化改造土方工程劳务分包合同范本
- 2025版住宅小区改造工程委托施工合同
- 2025版企业间融资租赁借款合同汇编
- 2025年度智能停车场设备安装与租赁合同样本
- 2025年度城市公共交通系统采购框架合同
- 2025年度典当借款与艺术品市场风险管理服务协议
- 心理-认识过程课件
- 静脉治疗护理质量评价标准
- 水电清包工合同(3篇)
- 连铸坯质量控制与缺陷控制课件
- 《ACT就这么简单》课件
- 农机行政处罚流程图
- 沥青混合料低温弯曲试验2002363
- 盘阀结构和原理课件
- 《普通逻辑》全册课后练习题参考答案(含原题)
- 环境、环境问题与环境科学
- 新版(七步法案例)PFMEA
评论
0/150
提交评论