网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
利用COM技术实现外壳扩展的属性页
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式
   tymed:=TYMED_HGLOBAL;

  end;

  Result:=lpdobj.GetData(FormatEtc, StgMedium);

  if Failed(Result)then

  Exit;

  //如果只有一个文件被选中,获得文件名并保存。

  filecount:=DragQueryFile(stgmedium.hGlobal, $FFFFFFFF, nil, 0);

  if filecount=1 then

  begin

    Result:=NOERROR;

    DragQueryFile(stgmedium.hGlobal, 0, szFile, SizeOf(szFile));

    FFilename:=strpas(szFile);

  end;

  ReleaseStgMedium(StgMedium);end;添加页面的操作是通过IShellPropSheetExt接口来实现的。如果属性页是和文件相关联,外壳会调用IShellPropSheetExt.AddPages给属性页添加一个页面。如果属性页同控制面板程序相关联,外壳调用IShellPropSheetExt.ReplacePage来替换页面。

  IShellPropSheetExt.AddPages方法有两个参数,lpfnAddPage是一个指向AddPropSheetPageProc回调函数的指针,回调函数用来提供要添加的页面信息给外壳。lParam是一个用户自定义的值,这里我们用它来返回给回调函数对象。

  一般的IShellPropSheetExt.AddPages方法实现步骤是:

  给PROPSHEETPAGE结构设定正确的值,特别是:

  把扩展的对象引用记数变量付值给pcRefParent成员,这可以防止页面还在显示时,扩展对象被卸载。

  实现PropSheetPageProc回调函数来处理页面创建和销毁的情况。

  调用CreatePropertySheetPage函数来创建页面。

  调用lpfnAddPage指向的函数来来添加创建好的页面。

  function TCXPropSheet.AddPages(lpfnAddPage: TFNADDPROPSHEETPAGE;

  lParam: LPARAM): HResult;var

  PSP: TPropSheetPage;

  HPSP: HPropSheetPage;begin

  result:=E_FAIL;

  try

  psp.dwSize:=SizeOf(psp);

  psp.dwFlags:=PSP_USEREFPARENT or PSP_USETITLE or PSP_USECALLBACK;

  psp.hInstance:=hInstance;

  //这里我们使用了事先储存在wave.res中的对话框模板,模板是用delphi5自带的

  //resource workshop编辑的,使用delphi5\bin\brcc32.exe编译的。

  psp.pszTemplate:=MakeIntResource(100);

  //标题名

  psp.pszTitle:=’波文件信息’;

  //设定回调函数

  psp.pfnDlgProc:=@DialogProc;

  psp.pfnCallBack:=@PropCallback;

  //设定对象引用记数变量

  psp.pcRefParent:=@comserver.objectcount;

  //用lParam向回调函数传递对象

  psp.lParam:=integer(self);

  HPSP:=CreatePropertySheetPage(psp);

  if HPSP$#@60;$#@62;nil then begin

  if not lpfnAddPage(HPSP, lParam)then begin

  DestroyPropertySheetPage(HPSP);

  end else begin

  _addref;//增加引用记数,否则一脱离这个方法的作用域,delphi自动释放对象。

  result:=S_OK;

  end

  end

  except

  on e: exception do begin

  e.message:=’添加页面’+e.message;

  messagebox(0, pchar(e.message), ’错误’, mb_ok);

  end;

  end;end;

  function TCXPropSheet.ReplacePage(uPageID: UINT;

  lpfnReplaceWith: TFNADDPROPSHEETPAGE; lParam: LPARAM): HResult;begin

  Result:=E_NOTIMPL;//同文件关联时,外壳不调用ReplacePage,所以不用实现end;回调函数处理属性页的消息,主要要响应WM_INITDIALOG消息来初始化页面显示信息,响应WM_COMMAND消息来处理用户交互,响应WM_NOTIFY消息来处理页面切换或关闭后处理操作结果。

  

  function DialogProc(hwndDlg: HWnd; Msg: UINT; wParam: wParam;

  lParam: LPARAM): Bool; stdcall;

  var

    PageObj: TCXPropSheet;

    filename: string;

    displayName : string;

    SheetHWnd: HWnd;

  begin

    result:=f

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号