用 PictureVal 直接在 Image 控件上显示系统默认文件类型的图标

原创 2014年03月30日 11:37:59

表单上加一个 Image 和 CommandButton 控件,按钮的 Click 中贴下面代码:

If Version(5) < 900 or Val(GetWordNum(Version(4), 4, '.')) < 5815
    MessageBox('版本太低,至少要 vfp9sp2(5815)。', '')
    Return
EndIf

Local cFile, nSize, cSFI, nBuf, nWidth, nHeight, nSize, cPicVal
Local hIcon, hTk, hBmp, pMem, hStream

* ------------------------------------------------------------------------------
* -- 提取某类或某个文件的默认图标(在 Windows 文件夹中显示的图标)
m.cFile = InputBox('指定要提取图标的文件扩展名或留空待选定某个确定的文件:')
m.nSize = 0        && 0/1 - 大/小图标
* ------------------------------------------------------------------------------
Do case
Case Empty(m.cFile)
    m.cFile = GetFile()
Case Empty(JustExt(m.cFile))
    m.cFile = ForceExt('sample', m.cFile)
EndCase
If Empty(m.cFile)
    Return
EndIf

Declare Long SHGetFileInfo in shell32 String, Long, String @, Long, Long
Declare Long GdiplusStartup in GDIPlus Long @, String @, Long @
Declare Long GdiplusShutdown in GDIPlus Long
Declare Long GdipCreateBitmapFromHICON in GDIPlus Long, Long @
Declare Long GdipGetImageHeight in GDIPlus Long, Long @
Declare Long GdipGetImageWidth in GDIPlus Long, Long @
Declare Long GdipSaveImageToStream In GDIPlus Long, Long, String, Long
Declare Long GdipDisposeImage In GDIPlus Long
Declare Long GlobalAlloc in win32api Long, Long
Declare Long GlobalFree in win32api Long
Declare Long CreateStreamOnHGlobal in ole32 Long, Long, Long @
Declare Long ReleaseStgMedium in ole32  String

m.cSFI = Replicate(Chr(0), 4*3 + 260 + 80)
SHGetFileInfo(m.cFile, 0, @ m.cSFI, Len(m.cSFI), 0x100+0x10+m.nSize)
m.hIcon = CToBin(Left(m.cSFI,4),'4rs')

m.hTk = 0
m.nBuf = 0h01 + Replicate(Chr(0),15)
GdiplusStartup(@ m.hTk, @m.nBuf, 0)
m.hBmp = 0
GdipCreateBitmapFromHICON(m.hIcon, @ m.hBmp)
m.nWidth = 0
m.nHeight = 0
GdipGetImageWidth(m.hBmp, @ m.nWidth)
GdipGetImageHeight(m.hBmp, @ m.nHeight)
    
m.nSize = m.nWidth * m.nHeight * 4 + 64
m.pMem = GlobalAlloc(0x40, m.nSize)
m.hStream = 0
CreateStreamOnHGlobal(m.pMem, 0, @ m.hStream)
GdipSaveImageToStream(m.hBmp, m.hStream, 0h06F47C55041AD3119A730000F81EF32E, 0)
m.cPicVal = Sys(2600, m.pMem, m.nSize)

ReleaseStgMedium(BinToC(4,'rs')+BinToC(m.hStream,'rs')+BinToC(0,'rs'))
GlobalFree(m.pMem)

GdipDisposeImage(m.hBmp)
GdiplusShutdown(m.hTk)

* -----------------------------------------------------
Thisform.Image1.PictureVal = m.cPicVal
* -----------------------------------------------------


easyui更换结构树的默认图标

在不久前的一个项目中接触到easyui,由于对此框架并不是太了解,所以当项目中需要更换结构树中图标时觉得非常不容易,在网上也查了很多资料也没有一个很有效的解决方法,经过自己一步步对这个框架的深入了解,...
  • u012255097
  • u012255097
  • 2016年09月06日 14:53
  • 11338

mdf文件开始方式改变之后怎么样才能恢复原来的图标

自己动手改下注册表就行 文件打开关联被改了但是在这里面却不能选择系统默认的打开方式 改下注册表就能恢复默认了 开始--运行--regedit 打开注册表 找到键HKEY_CURRENT_USER\SO...
  • softuse
  • softuse
  • 2015年09月14日 13:45
  • 247

简单的WebService编写与调用

综述:编写一个WebService接口,功能是接收两个int参数返回和。用网页调用其方法。 1 用VS2008新建一个解决方案,添加ASP.NET Web应用程序。 在程序下添加Web服务文件“W...
  • sam_jet
  • sam_jet
  • 2013年12月26日 15:49
  • 589

如何在没有IIS的环境中运行Web程序和Web Service

关键是Asp.net Development Server .这个服务,跟IIS类似,可以说是IIS的简化版,虽然不如IIS完善和成熟但是用于提供一般的IIS服务已经足够了,只要拷贝几个关键的文件,在...
  • dongdingbaihe
  • dongdingbaihe
  • 2009年01月14日 18:00
  • 2042

postgresql 导入sql文件

cmd 下postgresql 导入sql数据文件> psql -h localhost  -d databaseName -U username-f  filename...
  • hhh80
  • hhh80
  • 2011年01月18日 19:15
  • 13905

更改安装包中的图标

怎样更改MSI安装包中的图标呢?用orca打开MSI文件,在MSI文件的Icon表中,第一条记录为安装包在“添加/删除”列表中显示的图标,下面为其它快捷方式的图标。导入新图标,保存MSI文件就OK了。...
  • hudou_k
  • hudou_k
  • 2007年04月19日 16:28
  • 913

上传控件图片直接在页面显示

1、页面元素:                                                                        ...
  • u011403672
  • u011403672
  • 2016年01月08日 15:25
  • 602

Win7更改文件类型图标

Win7更改文件类型图标   使用过win7的人,肯定都知道win7没有一个现成的提供你更改文件图标的工具。比如.*.rmvb、*.doc,我们并不想使用其原先的默认图标;或者是某个软件因为下载的...
  • zzzili
  • zzzili
  • 2012年12月06日 15:29
  • 2746

postgresql导入sql脚本

首先进入到postgresql的bin安装目录下 比如D:\software\postgresql\bin 把xx.sql文件放到这个目录下 打开cmd命令窗口 ...
  • baidu_18607183
  • baidu_18607183
  • 2015年07月29日 17:09
  • 3112

通过代码实现EXE文件图标的替换

最近,好多人问我如何通过写个小程序,动态替换可执行文件的图标。这个问题看起来虽小,但却涉及到很多问题。网上也只能找到一些零零散散的资料,却没有详细的指导性文档。所以我决定把这个问题写下来,以方便大家查...
  • chenlycly
  • chenlycly
  • 2015年05月01日 11:44
  • 5194
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用 PictureVal 直接在 Image 控件上显示系统默认文件类型的图标
举报原因:
原因补充:

(最多只允许输入30个字)