delphi使用web桌面的问题
2010-07-23 10:58
267 查看
前一段时间遇到了一个需求,要求要能够在桌面上展示用户需求的图片并能够点击链接展开url链接,使用web桌面是最简单的办法,但是遇到问题,delphi的iactiveDesktop无论如何设置都不能展示,后来网上查了许久资料都没有找到结果,后来终于在一个不起眼的角落发现解决方法,据说是delphi的ShlObj.PAS中_tagCOMPONENT声明有误 = = ! 不敢独享,现与各位分享之,已在delphi2007编译通过:
需要注意的是用这段代码时别忘了把ShlObj.PAS中的声明改一下,这里有一个技巧,把ShlObj.PAS 考到工程目录再改,可以不影响原有的,然后编译就行了,据说是delphi的ShlObj.PAS声明有误,需要修改的地方如下
var fileName:string; ad : IActiveDesktop; di : TShComponent; hr : HRESULT; co : TComponentsOpt; cp : TCompPos; ItemName : WideString; ItemURL : WideString; ItemCount : Integer; I : Integer; begin //activeDesktop进行web桌面处理 ad := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;//创建 ZeroMemory(@co, SizeOf(co)); co.dwSize := SizeOf(co); hr := ad.GetDesktopItemOptions(co, 0);//取得当前activeDesktop状态 // if hr <> S_OK then // Memo1.Lines.Add(SysErrorMessage(HResultCode(hr))); if not co.fActiveDesktop or not co.fEnableComponents then//未启用状态则开启 begin co.dwSize := SizeOf(co); co.fEnableComponents := True; co.fActiveDesktop := True; hr := ad.SetDesktopItemOptions(co, 0); // if hr <> S_OK then // Memo1.Lines.Add(SysErrorMessage(HResultCode(hr))); // hr := ad.ApplyChanges(AD_APPLY_ALL); // if hr <> S_OK then // Memo1.Lines.Add(SysErrorMessage(HResultCode(hr))); end; ZeroMemory(@cp, SizeOf(cp)); cp.dwSize := SizeOf(cp);//设置web桌面大小 cp.dwWidth := 1024; //宽度,重要属性 cp.dwHeight := 768; //高度,重要属性 cp.fCanResize := True; //是否可重绘 ZeroMemory(@di, SizeOf(di)); di.dwSize := SizeOf(di); di.dwID := 0; //必须为0 di.fDirty := False; di.fChecked := True; di.fNoscroll := True; //是否允许滚动条 di.iComponentType := COMP_TYPE_WEBSITE;//类别 di.fChecked := True; di.cpPos := cp; //将设定好的大小传过来 ItemName := '桌面项'; //名称,该名称可以在桌面->自定义桌面->web中看到 ItemURL:='http://www.baidu.com'; //url链接,重要属性,可设置本地web文件 // ItemURL := 'D:/web/stock.htm'; Move(ItemName[1], di.wszFriendlyName, Length(ItemName)*SizeOf(WideChar)); Move(ItemURL[1], di.wszSource, Length(ItemURL)*SizeOf(WideChar)); hr := ad.AddDesktopItem(di, 0); hr := ad.ApplyChanges(AD_APPLY_ALL);//刷新 //下面这一段代码是获取当前生效的web桌面的 // hr := ad.GetDesktopItemCount(ItemCount,0); // for I := 0 to ItemCount - 1 do // begin // ZeroMemory(@di, SizeOf(di)); // di.dwSize := SizeOf(di); // hr := ad.GetDesktopItem(I, di, 0); // if hr <> S_OK then // begin // Memo1.Lines.Add(SysErrorMessage(HResultCode(hr))); // end // else // Memo1.Lines.Add(di.wszFriendlyName + '->' + di.wszSource); // end; end;
需要注意的是用这段代码时别忘了把ShlObj.PAS中的声明改一下,这里有一个技巧,把ShlObj.PAS 考到工程目录再改,可以不影响原有的,然后编译就行了,据说是delphi的ShlObj.PAS声明有误,需要修改的地方如下
_tagCOMPONENT = packed record dwSize: DWORD; // Size of this structure dwID: DWORD; // Reserved: Set it always to zero. iComponentType: Integer; // One of COMP_TYPE_* fChecked: BOOL; // Is this component enabled? fDirty: BOOL; // Had the component been modified and not yet saved to disk? fNoScroll: BOOL; // Is the component scrollable? cpPos: TCompPos; // Width, height etc., wszFriendlyName: array[0..MAX_PATH-1] of WideChar; // Friendly name of component. wszSource: array[0..2083] of WideChar; //URL of the component.主要就是这两个不同 wszSubscribedURL: array[0..2083] of WideChar; //Subscrined URL主要就是这两个不同 end;
相关文章推荐
- 记录Delphi XE Web Server使用cookie出现的问题
- 使用SetWindowPos API函数移动窗口后,还需修改Delphi的属性值,以备下次使用,否则就会出问题(不是API不起作用,而是使用了错误的坐标值)
- (转)【WebView】Android WebView专栏——基本使用及常见问题
- 使用 webpack 打包 font 字体的问题
- Android 3.X中WebView使用ZOOM崩溃的问题
- 使用WebView弹出不支持localStoragede对话框的问题
- 使用webpack-dev-server设置反向代理解决前端跨域问题
- 用python做自动化测试--web 自动化测试(1)-Selenium 3.x使用系列问题集
- Android使用Webview显示页面以及点击跳转startActivity问题
- 使用idea创建web项目后无法创建Java文件夹的问题的解决办法
- iOS每日一记之———————————————Gif使用新的SDwebimage无法播放的问题解决
- Asp.Net连接ACCESS数据库相对路径问题,web.config中如何使用相对路径及在类文件中调用这个相对路径
- eclipse创建maven工程没有src/main/resources文件夹和web.xml使用3.1的dtd时工程有错误的问题
- php使用NuSoap调用java/C# webservice乱码问题
- 转 [开发总结]WebView使用中遇到的一些问题&解决
- Asp.Net 2.0连接ACCESS数据库相对路径问题,web.config中如何使用相对路径
- SDWebImage使用SDWebImageRefreshCached后,图片没有刷新的问题讨论
- DELPHI开发Web程序常见问题
- 使用 Eclipse Ganymede 进行桌面、Web 和移动设备开发
- 滑动返回类库SwipeBackLayout的使用问题,解决返回黑屏,和看到桌面