⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 114870.htm

📁 在天极网上发布的各类delphi原码及技巧文档
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html xmlns="http://www.w3.org/TR/xhtml1/strict">   <head>      <title>天极网</title>      <meta http-equiv="Content-Type" content="text/html; charset=gb2312"></meta>      <meta http-equiv="Pragma" content="no-cache"></meta>      <meta http-equiv="expires" content="Mon,12 May 1998 00:36:05 GMT"></meta>      <link rel="stylesheet" href="/xslimages/css/cpcw.css"></link>   </head>   <style>.nava {  font-size: 9pt}.font1{font-size: 10.5pt}</style>   <body bgcolor="#FFFFFF" topmargin="2"><table width="760" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td width="20%" rowspan="3" valign="top" align="center"><table width="95%" border="1" cellspacing="0" cellpadding="0" height="60" bordercolorlight="#CCCCCC" bordercolordark="#FFFFFF"><tr valign="middle" align="center"><td><div align="center"><span class="nava">天极硬件,新闻及时<br>资料详尽,敬请关注<br><a href="/33554432/35651584/yingjian.htm">www.myhard.com</a></span></div></td></tr></table></td><td width="57%" valign="bottom" rowspan="3" align="center"><div align="center"><script language="JavaScript" src="http://ad.cpcw.com/js/school.js"></script></div></td><td width="20%" valign="top" rowspan="3" align="center"><table width="95%" border="1" cellspacing="0" cellpadding="0" height="60" bordercolorlight="#CCCCCC" bordercolordark="#FFFFFF"><tr valign="middle" align="center"><td><div align="center"><span class="nava">好又多电子商务<br>让您一点动心<br><a href="http://www.hoyodo.com">www.hoyodo.com</a></span></div></td></tr></table></td></tr><tr></tr><tr></tr></table><table width="760" border="0" cellspacing="0" cellpadding="0" height="70" align="center"><tr><td width="145" valign="bottom" rowspan="3"><img src="/xslimages/content/logo.gif" width="140" height="60"></img></td><td colspan="3" width="100%" height="33" align="center"><a href="/" target="_blank">首页</a>|    <a href="/33554432/36700160/news.htm" target="_blank">新闻中心</a>|     <a href="/33554432/50331648/business.htm" target="_blank">企业中心</a>|	 <a href="/33554432/41943040/caijing.htm" target="_blank">财经中心</a>|  	 <a href="/33554432/39845888/fashion.htm" target="_blank">时尚中心</a>| 	 <a href="/33554432/35651584/yingjian.htm" target="_blank">硬件中心</a>| 	 <a href="/33554432/34603008/school.htm" target="_blank">学习中心</a>| 	 <a href="/33554432/37748736/game.htm" target="_blank">游戏中心</a>| 	 <a href="/33554432/38797312/ziyuan.htm" target="_blank">资源中心</a>| 		 <a href="http://www.hoyodo.com/" target="_blank">社区</a>| 	 <a href="http://training.yesky.com/" target="_blank">网校</a></td></tr><tr><td colspan="3" width="78%" height="20" align="right"><b>中心栏目:<a href="http://www.mydown.com" target="_blank"><font color="#FF0000"><u>红辣椒软件下载</u></font></a></b><a href="http://soft.yesky.com" target="_blank">       软件之窗 </a><a href="http://desktop.yesky.com" target="_blank">天极桌面网 </a><a href="http://art.yesky.com" target="_blank">美工教室       </a><a href="http://itdreamer.yesky.com" target="_blank">程序方舟 </a><a href="http://homepage.yesky.com" target="_blank">网页陶吧       </a><a href="http://safe.yesky.com" target="_blank">安全之路</a><a href="http://soft.yesky.com" target="_blank"></a></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" width="760"><tbody><tr bgcolor="#333333"><td colspan="2" height="1"></td></tr><tr><td bgcolor="#ff9900" height="16" valign="bottom" width="72%"><font color="#000000"><b><font color="#ffffff">学 习 中 心</font></b></font></td><td bgcolor="#6699cc" height="16" width="28%"><div align="center"><font face="Arial, Helvetica, sans-serif"><b><font color="#ffffff">N         E T S C H O O L</font></b></font></div></td></tr><tr bgcolor="#333333"><td colspan="2" height="1"></td></tr></tbody></table><table align="center" border="0" cellpadding="0" cellspacing="0" width="760" bgcolor="#eeeeee"><td colspan="2" height="28"><div align="center"><a href="/33554432/34603008/34635776/34636800/34636832/schoolinverse1.htm" target="_blank"><font color="#000000">HTML</font></a><font color="#000000"> _</font><a href="/33554432/34603008/34635776/34636800/34636864/schoolinverse1.htm" target="_blank"><font color="#000000">JavaScript</font></a><font color="#000000"> _</font><a href="/33554432/34603008/34635776/34636800/34636928/schoolinverse1.htm" target="_blank"><font color="#000000">CSS</font></a><font color="#000000">               _              <a href="/33554432/34603008/34635776/34637824/34637952/schoolinverse1.htm" target="_blank"><font color="#000000">                  PHP                </font></a><font color="#000000">                 _              </font></font><a href="/33554432/34603008/34635776/34637824/34637888/schoolinverse1.htm" target="_blank"><font color="#000000">ASP</font></a><font color="#000000"> _</font><a href="http://www.yesky.com/33554432/34603008/34635776/34637824/34637920/schoolinverse1.htm" target="_blank"><font color="#000000">Perl</font></a><font color="#000000"> _</font><a href="/33554432/34603008/34635776/34638848/34638880/schoolinverse1.htm" target="_blank"><font color="#000000">Dreamweaver</font></a><font color="#000000"> _</font><a href="/33554432/34603008/34635776/34639872/34639904/schoolinverse1.htm" target="_blank"><font color="#000000">XML</font></a><font color="#000000"> _</font><a href="http://www.yesky.com/33554432/34603008/34734080/schoolinverse2.htm" target="_blank"><font color="#000000">病毒</font></a><font color="#000000"> _</font><a href="http://www.yesky.com/67108864/68157440/68419584/inverse2.htm" target="_blank"><font color="#000000">程序开发</font></a><font color="#000000"> _</font><a href="http://www.yesky.com/33554432/34603008/34799616/34800640/schoolinverse1.htm" target="_blank"><font color="#000000">Email</font></a><font color="#000000"> _</font><a href="http://www.yesky.com/33554432/34603008/34897920/34898944/schoolinverse1.htm" target="_blank"><font color="#000000">Windows 9x</font></a><font color="#000000"> _</font><a href="/33554432/34603008/34897920/34900992/schoolinverse1.htm" target="_blank"><font color="#000000">Linux</font></a><font color="#000000"> _</font><a href="/33554432/34603008/34963456/34966528/schoolinverse1.htm" target="_blank"><font color="#000000">WPS</font></a><font color="#000000"> _</font><a href="http://www.yesky.com/33554432/34603008/34963456/34964480/schoolinverse1.htm" target="_blank"><font color="#000000">Word</font></a></div></td></table><table width="760" border="0" cellspacing="0" cellpadding="0" height="30" align="center"><tr><td align="left" valign="bottom"><span class="nava"><span class="nava"><a href="/index.htm">首页</a>→              <a href="/33554432/34603008/school.htm">学习中心</a>→              <a href="/33554432/34603008/34668544/schoolinverse2-pro.htm">程序方舟</a>→              <a href="/33554432/34603008/34668544/34672640/schoolinverse2.htm">技巧经验</a>→              <a href="/33554432/34603008/34668544/34672640/34672672/schoolinverse1.htm">DELPHI技巧</a>→              </span></span></td><td width="2%"></td></tr></table><table width="760" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td colspan="3" valign="top" width="75%"><table width="98%" border="0" cellspacing="1" cellpadding="1" bgcolor="#000000"><tr bgcolor="#FFFFFF"><td width="100%" colspan="4" align="left"><table width="95%" align="center"><tr><td class="font1"><p align="center"><br><font size="3">利用COM技术实现外壳扩展的属性页</font><br><span class="nava"><font color="#CC9933">2000-09-18·						  hubdog·delhpi技术网</font></span></p><p>本文出自<a href="http://www.delphiuser.com" target="_blank">delphi技术网</a></p><p>  当用户在资源管理器中调用右键菜单时,会显示一个"属性"菜单项,点击属性菜单项会显示一个属性页,用户可以获得甚至修改文件信息。我们可以定制属性页通过实现属性页扩展。如下图所示,本文实现了一个显示wave(波形)文件的信息如声道数等信息的属性页扩展。</p><p>  属性页扩展通常是同某类文件相关联的来实现同之相关的操作和信息显示,另外可以同驱动器相关联,我们还可以用属性页扩展来替换控制面板程序的属性页。象其他外壳扩展程序一样,属性页扩展也是以动态连接库形式实现的进程内COM对象。它除了IUnknown接口外还要实现IShellExtInit和IShellPropSheetExt接口。</p><p>  建立同文件关联的属性页扩展</p><p>  首先,我们用命令File|New...,创建一个ActiveX Library,然后新建一个COM Object,实现的接口为IShellExtInit和IShellPropSheetExt。</p><p>  同文件建立关联需要注册属性页,要在注册表中同相应文件对应的表项下添加Shellex/PropertySheetHandlers子键,每增加一个页面就需要注册一个表项,最大可以添加的页面数是24,我们可以用一个扩展实现多个页面。这里我们通过从TComObjectFactory继承类实现的UpdateRegistry实现了注册。</p><p>  </p><p>  type</p><p>    TCXPropSheetFactory=class(TComObjectFactory)</p><p>   public</p><p>    procedure UpdateRegistry(Register: Boolean); override;</p><p>   end;</p><p>  procedure TCXPropSheetFactory.UpdateRegistry(Register: Boolean);var</p><p>    ClassID: string;</p><p>    Str,KeyName : string;begin</p><p>    inherited UpdateRegistry(Register);</p><p>  if Register then</p><p>  begin</p><p>    ClassID:=GUIDToString(Class_CXPropSheet);</p><p>    with TRegistry.Create do</p><p>    try</p><p>    RootKey:=HKEY_CLASSES_ROOT;</p><p>    OpenKey(’\.wav’,TRUE);</p><p>    KeyName := ReadString(’’);</p><p>   if Keyname = ’’ then</p><p>   begin</p><p>    WriteString(’’,’WaveFile’);</p><p>    OpenKey(’\.wav’,TRUE);</p><p>    KeyName := ReadString(’’);</p><p>   end;</p><p>    OpenKey(’\’+KeyName+’\shellex\PropertySheetHandlers\Wav’,TRUE);</p><p>    WriteString(’’,Classid);</p><p>    finally</p><p>    Free;</p><p>  end;</p><p>  if(Win32Platform=VER_PLATFORM_WIN32_NT)then</p><p>  begin</p><p>    with TRegistry.Create do</p><p>    try</p><p>    RootKey:=HKEY_LOCAL_MACHINE;</p><p>    OpenKey(’SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions’, True);</p><p>    OpenKey(’Approved’, True);</p><p>    WriteString(ClassID, ’Wave File Property Sheet’);</p><p>    finally</p><p>    Free;</p><p>    end;</p><p>   end;</p><p>  end</p><p>  else </p><p>  删除注册表项....................... end;初始化扩展是通过IShellExtInit实现的,当外壳调用IShellExtInit.Initialize时,它传递一个数据对象包含来文件对应的目录的PIDL标识符。Initialize方法需要从数据对象中提取文件名,并把文件名和PIDL标识符保存起来为了以后使用。</p><p>  </p><p>  function TCXPropSheet.SEIInitialize(pidlFolder: PItemIDList;</p><p>    lpdobj: IDataObject; hKeyProgID: HKEY): HResult;</p><p>  var</p><p>    StgMedium: TStgMedium;</p><p>    FormatEtc: TFormatEtc;</p><p>    szFile: array[0..MAX_PATH+1]of Char;</p><p>    filecount: integer;begin</p><p>    Result:=E_FAIL;</p><p>  if(lpdobj=nil)then </p><p>  begin</p><p>    Result:=E_INVALIDARG;</p><p>    messagebox(0, ’1’, ’错误’, mb_ok);</p><p>    Exit;</p><p>  end;</p><p>  with FormatEtc do </p><p>  begin</p><p>    cfFormat:=CF_HDROP;</p><p>    ptd:=nil;</p><p>    dwAspect:=DVASPECT_CONTENT;</p><p>    lindex:=-1;</p><p>    tymed:=TYMED_HGLOBAL;</p><p>  end;</p><p>  Result:=lpdobj.GetData(FormatEtc, StgMedium);</p><p>  if Failed(Result)then</p><p>  Exit;</p><p>  //如果只有一个文件被选中,获得文件名并保存。</p><p>  filecount:=DragQueryFile(stgmedium.hGlobal, $FFFFFFFF, nil, 0);</p><p>  if filecount=1 then </p><p>  begin</p><p>    Result:=NOERROR;</p><p>    DragQueryFile(stgmedium.hGlobal, 0, szFile, SizeOf(szFile));</p><p>    FFilename:=strpas(szFile);</p><p>  end;</p><p>  ReleaseStgMedium(StgMedium);end;添加页面的操作是通过IShellPropSheetExt接口来实现的。如果属性页是和文件相关联,外壳会调用IShellPropSheetExt.AddPages给属性页添加一个页面。如果属性页同控制面板程序相关联,外壳调用IShellPropSheetExt.ReplacePage来替换页面。</p><p>  IShellPropSheetExt.AddPages方法有两个参数,lpfnAddPage是一个指向AddPropSheetPageProc回调函数的指针,回调函数用来提供要添加的页面信息给外壳。lParam是一个用户自定义的值,这里我们用它来返回给回调函数对象。</p><p>  一般的IShellPropSheetExt.AddPages方法实现步骤是:</p><p>  给PROPSHEETPAGE结构设定正确的值,特别是:</p><p>  把扩展的对象引用记数变量付值给pcRefParent成员,这可以防止页面还在显示时,扩展对象被卸载。</p><p>  实现PropSheetPageProc回调函数来处理页面创建和销毁的情况。</p><p>  调用CreatePropertySheetPage函数来创建页面。</p><p>  调用lpfnAddPage指向的函数来来添加创建好的页面。</p><p>  function TCXPropSheet.AddPages(lpfnAddPage: TFNADDPROPSHEETPAGE;</p><p>  lParam: LPARAM): HResult;var</p><p>  PSP: TPropSheetPage;</p><p>  HPSP: HPropSheetPage;begin</p><p>  result:=E_FAIL;</p><p>  try</p><p>  psp.dwSize:=SizeOf(psp);</p><p>  psp.dwFlags:=PSP_USEREFPARENT or PSP_USETITLE or PSP_USECALLBACK;</p><p>  psp.hInstance:=hInstance;</p><p>  //这里我们使用了事先储存在wave.res中的对话框模板,模板是用delphi5自带的</p><p>  //resource workshop编辑的,使用delphi5\bin\brcc32.exe编译的。</p><p>  psp.pszTemplate:=MakeIntResource(100);</p><p>  //标题名 </p><p>  psp.pszTitle:=’波文件信息’;</p><p>  //设定回调函数</p><p>  psp.pfnDlgProc:=@DialogProc;</p><p>  psp.pfnCallBack:=@PropCallback;</p><p>  //设定对象引用记数变量 </p><p>  psp.pcRefParent:=@comserver.objectcount;</p><p>  //用lParam向回调函数传递对象</p><p>  psp.lParam:=integer(self);</p><p>  HPSP:=CreatePropertySheetPage(psp);</p><p>  if HPSP&#60;&#62;nil then begin</p><p>  if not lpfnAddPage(HPSP, lParam)then begin</p><p>  DestroyPropertySheetPage(HPSP);</p><p>  end else begin</p><p>  _addref;//增加引用记数,否则一脱离这个方法的作用域,delphi自动释放对象。</p><p>  result:=S_OK;</p><p>  end</p><p>  end</p><p>  except</p><p>  on 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -