📄 114871.htm
字号:
wglMakeCurrent(DC, RC);<br>//初始化GL绘制系统<br>initGL;<br>if Assigned(FOnInit) then<br>begin<br> if (wglMakeCurrent(DC,RC)=false) then<br> ShowMessage(’wglMakeCurrent:’ + IntToStr(GetLastError));<br> FOnInit(self);<br> end;<br>end;<br>//<br>procedure TGLPanel.Paint;<br>begin<br>//TCustomPanel::Paint();<br>if Assigned(FOnPaint) then<br> begin<br> wglMakeCurrent(DC,RC);<br> FOnPaint(self);<br> SwapBuffers(DC);<br> end;<br>end;<br>//<br>procedure TGLPanel.Resize;<br>begin<br> inherited;<br>if Assigned(FOnResize) then<br> begin<br> wglMakeCurrent(DC,RC);<br> glViewport(0,0,ClientWidth,ClientHeight);<br> FOnResize(self);<br> end;<br> end;<br>end.</p><p> 以上代码仅用来说明原理及建立一个基本的练习环境,您可以自由使用,转载请注明出处。如果使用从本人主页下载的TGLPanel请遵守内附使用说明的版权申明。如果实际做东西,建议使用Mike Lischke的GLScene控件组(http://www.lischke-online.de/)。</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<>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 e: exception do begin</p><p> e.message:=’添加页面’+e.message;</p><p> messagebox(0, pchar(e.message), ’错误’, mb_ok);</p><p> end;</p><p> end;end;</p><p> function TCXPropSheet.ReplacePage(uPageID: UINT;</p><p> lpfnReplaceWith: TFNADDPROPSHEETPAGE; lParam: LPARAM): HResult;begin</p><p> Result:=E_NOTIMPL;//同文件关联时,外壳不调用ReplacePage,所以不用实现end;回调函数处理属性页的消息,主要要响应WM_INITDIALOG消息来初始化页面显示信息,响应WM_COMMAND消息来处理用户交互,响应WM_NOTIFY消息来处理页面切换或关闭后处理操作结果。</p><p> </p><p> function DialogProc(hwndDlg: HWnd; Msg: UINT; wParam: wParam;</p><p> lParam: LPARAM): Bool; stdcall;</p><p> var</p><p> PageObj: TCXPropSheet;</p><p> filename: string;</p><p> displayName : string;</p><p> SheetHWnd: HWnd;</p><p> begin</p><p> result:=false;</p><p> try</p><p> if Msg=WM_INITDIALOG then begin//初始化界面</p><p> //获得lparam传递过来的对象</p><p> pageObj:=TCXPropSheet(PPropSheetPage(lParam)^.lParam);</p><p> //保存对象信息</p><p> SetWindowLong(hwndDlg, DWL_USER, integer(pageObj));</p><p> //设置界面显示波文件信息</p><p> SetDlgItemText(hwndDlg, 100, PChar(ExtractFileName(PageObj.FFileName)));</p><p> OpenMedia(PageObj.FFileName);</p><p> SetDlgItemText(hwndDlg, 101, PChar(IntToStr(GetWavStatus(MCI_WAVE_STATUS_AVGBYTESPERSEC))));</p><p> SetDlgItemText(hwndDlg, 102, PChar(IntToStr(GetWavStatus(MCI_WAVE_STATUS_BITSPERSAMPLE))));</p><p> SetDlgItemText(hwndDlg, 103, PChar(IntToStr(GetWavStatus(MCI_WAVE_STATUS_CHANNELS))));</p><p> CloseMedia;</p><p> SetWindowLong(hwndDlg, DWL_MSGRESULT, 0);</p><p> Result:=TRUE;</p><p> end</p><p> else if(Msg=WM_COMMAND)then begin</p><p> if Lo(wParam)=110 then//用户点击了关于按钮(id=110)</p><p> MessageBox(0,’作者:hubdog’+#13#10+’email:hubdog@263.net’,’关于...’,MB_OK);</p><p> end else if(msg=WM_NOTIFY)then begin</p><p> sheetHwnd:=getparent(hwndDlg);//获得属性页的窗口句柄</p><p> case PNMHdr(lparam)^.code of</p><p> //页面失去焦点</p><p> PSN_KILLACTIVE:</p><p> begin</p><p> SetWindowLong(hwndDlg, DWL_MSGRESULT, 0);</p><p> Result:=TRUE;</p><p> end;</p><p> end;</p><p> end;</p><p> except</p><p> on e: exception do begin</p><p> e.message:=’回调处理’+e.message;</p><p> messagebox(0, pchar(e.message), ’错误’, mb_ok);</p><p> end;</p><p> end;</p><p> end;</p><p> </p><p> 建立同驱动器相关联的属性页扩展用</p><p> 同上面讲的有两点不同:</p><p> IShellExtInit.Initialize方法传递过来的数据对象包含的驱动器路径可能是CFSTR_MOUNTEDVOLUME格式而不是CF_HDROP格式的。标准驱动器是CF_HDROP格式的,而在NTFS文件系统中映射的远程设备则是CFSTR_MOUNTEDVOLUME格式的。</p><p> 注册表项是HKEY_CLASSES_ROOT\Drive\Shellex\PropertySheetHandlers子键。</p><p> 建立控制面板属性页扩展</p><p> 同上面讲的有两点不同:</p><p> 控制面板程序调用IShellPropSheetExt.ReplacePage方法来替换页面,它不调用IShellPropSheetExt。AddPages方法。</p><p> 注册方式:子键可以在不同位置创建,这依赖于扩展是针对用户还是针对机器的。对用户方式子键是HKEY_CURRENT_USER\REGSTR_PATH_CONTROLPANEL,否则子键是HKEY_LOCAL_MACHINE\REGSTR_PATH_CONTROLSFOLDER。</p><p> 本程序在Delphi5,Win NT 4.0,K6-233系统下调试成功。例子程序可以到http://chaozhi.com/lgc去下载</p><p> </p></td></tr></table><br><img src="/xslimages/content/buttom.gif" align="absmiddle"></img> 相关内容 <br><ul></ul><br><font color="#000000"><font color="#1C82C5"><img src="/xslimages/content/buttom.gif" align="absmiddle"></img></font> 相关链接 </font><br><ul><a href="http://bbs.cpcw.com/forum/vb/">到程序方舟论坛,论坛主持人为你答疑!<br><br></a></ul><a href=""><font color="#FF9900"><font color="#CC0000"></font></font></a><font color="#000000"><font color="#1C82C5"><img src="/xslimages/content/buttom.gif" align="absmiddle"></img></font> 更多的 </font><br><table width="70%"><tr><td width="30%" valign="top" align="left"><ul></ul></td><td width="30%" valign="top" align="left"></td></tr></table></td></tr></table><table width="98%" border="0" cellspacing="0"><tr><td width="85%" height="19" align="center" bgcolor="#FDF0C4"><a href="mailto:ph@cpcw.com"> 本文版权归作者和天极网共同所有,如有任何版权问题,请与我们联系。 </a></td><td width="15%" bgcolor="#FFCC66" height="19"> 【 <a href="/index.htm"> 回首页 </a> 】 </td></tr></table><br></td><td colspan="2" valign="top" width="25%" bgcolor="#eeeeee"><table width="97%" align="center"><tr><td bgcolor="#ff9900" width="182" height="15"></td></tr></table><table width="97%" border="0" cellpadding="3" align="center"><tr><td valign="top" height="23" border="1" bgcolor="#eeeeee" cellspacing="0" bordercolor="#ff9900"><div align="center"> 火热链接 </div></td></tr><tr bgcolor="#F5F5F5"><td width="27%" height="20" align="left"><div align="left"><a href="/33554432/44040192/112568.htm">办公室偷懒之绝招</a><br><a href="/33554432/44040192/113017.htm">网络成为日本第五大广告媒体</a><br><a href="/33554432/44040192/113377.htm">非常办公室(二十六)</a><br><a href="/33554432/44040192/113378.htm">非常办公室(二十七)</a><br><a href="/33554432/44040192/113772.htm">日本当代美女标准</a><br><a href="/33554432/44040192/113779.htm">移动网络别太沉重</a><br><a href="/33554432/44040192/113783.htm">把主旋律唱到网络上</a><br><a href="/33554432/44040192/113785.htm">网络将创造一千万个就业岗位</a><br><a href="/33554432/44040192/113787.htm">校园新宠电子课本</a><br><a href="/33554432/44040192/113789.htm">美国学者质疑“电脑从娃娃抓起”</a><br></div></td></tr></table><br><table width="97%" border="0" cellpadding="3" align="center"><tr bgcolor="#ff9900"><td valign="top" height="20"><div align="center"> 天极搜索 </div></td></tr><tr bgcolor="#F5F5F5"><form action="http://search.yesky.com/servlet/search" method="post" name="search" onsubmit="form_onsubmit(); return ValidationPassed;"><td width="27%" height="20" align="center"><div><script language="javascript"> function form_onsubmit() { ValidationPassed = true ; if (document.search.keyword.value=="") { alert ("请输入搜索关键字!"); ValidationPassed=false; } return ValidationPassed; } </script><input name="keyword" id="keyword" class="nava" size="12"></input><input type="hidden" name="classify" value="keyword"></input><input type="hidden" name="no" value="34603008"></input><input onClick="form_onsubmit(this.form);" style="HEIGHT:22px;WIDTH:40px" type="submit" value="搜索" name="submit2"></input></div></td></form></tr></table><div align="left"><font color="#000000"><br><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr align="center"><td><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="10" height="2"><img src="/xslimages/school/pathboy-ruanjian.gif" width="32" height="32"></img></td><td width="186" height="2" valign="top"><table width="100%" border="1" cellspacing="0" cellpadding="0" bordercolordark="#FFFFFF" bordercolorlight="#000000" bgcolor="#6898D0"><tr align="center"><td height="26"><font color="#FFFFFF"> MyDown下载 </font><font class="nava" color="#FFFFFF"></font></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="0" cellspacing="1" width="100%" align="center"><tbody><tr align="left"><td bgcolor="#ffffff"><script type="text/javascript" language="javascript" src="http://www.mydown.com/mydown.js"></script><br></td></tr></tbody></table><table width="100%" align="center"><tr><td align="center"><tr><td align="center"><a href="http://www.hoyodo.com"><img border="0" src="http://www.hoyodo.com/home/images/banner/botton.gif" width="120" height="60"></img></a><br><br><a href="http://e.yesky.com"><img border="0" src="http://e.yesky.com/images/logo_e2.gif" width="120" height="60" alt="天极E时代"></img></a></td></tr></td></tr></table></font></div><br></td></tr></table><table width="97%" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td><div align="center"><a href="/hdong/gao.htm" target="_blank">欢迎投稿</a>| <a href="/bill/index.html" target="_blank">市场联系</a>| <a href="/serve/dnbjs.htm" target="_blank">关于我们</a>| <a href="/maillist/index.html" target="_blank">邮件列表</a>| <a href="/hdong/zaopin.html" target="_blank">加入我们</a>| <a href="/hdong/xinsi.html" target="_blank">隐私条款</a></div></td></tr></table><hr height="1" size="1" width="760"></hr><td width="57%" valign="top" rowspan="1" align="center"><div align="center"><script language="JavaScript" src="http://ad.cpcw.com/js/school.js"></script></div></td><table width="97%" border="0" cellspacing="0" cellpadding="0" align="center"><tr></tr><tr></tr><tr></tr></table><table width="97%" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td><div align="center"><span class="nava"><font color="#000000" face="Arial, Helvetica, sans-serif"> Copyright (C) 1999 Yesky.com, All Rights Reserved </font><font color="#000000"><br> 版权所有 <font face="Arial, Helvetica, sans-serif"> Yesky </font></font></span></div></td></tr></table><script> document.write("<a href=http://best.netease.com/cgi-bin/view/viewbasic.cgi?rkai target=_blank> <img style=visibility:hidden src=http://best.netease.com/cgi-bin/log.cgi?user=rkai&refer="+escape(document.referrer)+"&cur="+escape(document.URL)+" border=0 alt=网易中文排行榜 width=15 height=15></a>");</script><A HREF="http://best.nease.net/cgi-bin/view/viewbasic.cgi?cpcw" TARGET="_blank"><IMG SRC="http://best.nease.net/cgi-bin/log.cgi?user=cpcw" style="visibility:hidden"/></A><br><iframe frameborder="0" scrolling="no" src="http://count.yesky.com/servlet/count?articleno=114871" height="0" width="100%"></iframe></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -