listview和imagelist的用法。非常着急。

lj77916 2010-03-19 11:10:09
用一下程序,取的输入法的ico图标,并把图标显示在listview中。给窗体上加载了一个imagelist和listview控件。结果是取某一个文件ico时能够正常显示,如果循环取第二个时,就提示imagelist被另一个控件绑定时不能修改的错误。请大家帮忙给看看,应该如何修改。
Option Explicit

Private Type PictDesc
cbSizeofStruct As Long
PicType As Long
hImage As Long
xExt As Long
yExt As Long
End Type
Private Type Guid
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (lpPictDesc As PictDesc, riid As Guid, ByVal fPictureOwnsHandle As Long, ipic As IPicture) As Long

Private Function IconToPicture(ByVal hIcon As Long) As StdPicture
If hIcon = 0 Then Exit Function
Dim oNewPic As Picture
Dim tPicConv As PictDesc
Dim IGuid As Guid
With tPicConv
.cbSizeofStruct = Len(tPicConv)
.PicType = vbPicTypeIcon
.hImage = hIcon
End With
With IGuid
.Data1 = &H7BF80980
.Data2 = &HBF32
.Data3 = &H101A
.Data4(0) = &H8B
.Data4(1) = &HBB
.Data4(2) = &H0
.Data4(3) = &HAA
.Data4(4) = &H0
.Data4(5) = &H30
.Data4(6) = &HC
.Data4(7) = &HAB
End With
OleCreatePictureIndirect tPicConv, IGuid, True, oNewPic
Set IconToPicture = oNewPic
End Function

Private Function BitmapToPicture(ByVal hBmp As Long) As StdPicture
Dim oNewPic As Picture, tPicConv As PictDesc, IGuid As Guid
With tPicConv
.cbSizeofStruct = Len(tPicConv)
.PicType = vbPicTypeBitmap
.hImage = hBmp
End With
With IGuid
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With
OleCreatePictureIndirect tPicConv, IGuid, True, oNewPic
Set BitmapToPicture = oNewPic
End Function



Private Function getstrico(ImeNameStr As String)
Dim lIcon As Long, a As Long, sSourcePgm As String
Dim ret As Long

sSourcePgm = "c:\windows\system32\" & ImeNameStr '»»³ÌÄãµÄÎļþ·¾¶
Do
lIcon = ExtractIcon(App.hInstance, sSourcePgm, a)
If lIcon = 0 Then Exit Do
Call ImageList1.ListImages.Add(a + 1, , IconToPicture(lIcon))
a = a + 1
DestroyIcon lIcon
Loop
Set ListView1.Icons = ImageList1
If a = 0 Then
MsgBox "No Icons in this file!"
End If
Dim i As Long
For i = 0 To a - 1
ListView1.ListItems.Add Index:=i + 1, Text:="icon" + CStr(i + 1), Icon:=i + 1
Next
End Function

Private Sub Form_Load()
Dim i As Integer
Dim imename(11) As String
imename(0) = "gyhz.ime"
imename(1) = "sogoupy.ime"
imename(2) = "ALIPY0.5.1.30.IME"
imename(3) = "HWH_JX.IME"
For i = 0 To 3

getstrico (imename(i))
Next
End Sub
...全文
607 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhzhs007 2010-04-04
  • 打赏
  • 举报
回复
最近我也是遇到相同的问题,好像绑定以后就不能再修改了,很麻烦,现在也没别的方法
zhengoodman 2010-03-20
  • 打赏
  • 举报
回复
没时间帮你调代码了。说下想法吧。
--------------------------------
取某一个文件ico时能够正常显示,如果循环取第二个时,就提示imagelist被另一个控件绑定时不能修改的错误。
-------------------------------
如错误提示所说,“imagelist被另一个控件绑定时不能修改”
而你下面的代码,

For i = 0 To 3
getstrico (imename(i))
Next

每调用一次getstrico (imename(i))就要修改一次imagelist
因此,你要在把imagelist和listview绑定前,一次性给imagelist赋完值。

代码就不帮你写了。
lj77916 2010-03-19
  • 打赏
  • 举报
回复
问题出现在Call ImageList1.ListImages.Add(a + 1, , IconToPicture(lIcon))这句上,请大家帮忙
内容概要:本文提出了一种针对两级电力市场环境下省间交易商的最优购电模型,重点考虑了现货市场与中长期市场的联动机制及市场风险因素,旨在帮助交易商在复杂多变的电力市场环境中制定科学合理的购电策略。模型以Matlab为工具实现,通过构建包含市场电价波动、负荷需求不确定性等风险源的优化框架,运用先进的数学规划方法求解最小化购电成本或风险调整后成本的决策方案。文中系统阐述了模型的目标函数设计、约束条件设定、风险量化机制(如VaR、CVaR)以及求解算法流程,并通过实际算例验证了模型在提升购电经济性、增强风险抵御能力方面的有效性与实用性。; 适合人群:适用于具备一定电力系统基础知识、运筹学理论背景及Matlab编程能力的高校学生、科研人员以及电力市场运营、能源交易等领域的专业从业者。; 使用场景及目标:①用于全国大学生数学建模竞赛A题等相关赛事中电力市场类问题的研究与求解;②为省级及以上电力交易机构和售电公司在跨区购电决策中提供计及风险的量化分析工具,实现成本控制与风险规避的平衡;③作为高等院校电力市场、能源经济等课程的教学案例,深化对现代电力市场机制与风险管理方法的理解。; 阅读建议:读者在学习过程中应重点关注模型对风险的建模方式与优化算法的具体实现细节,建议结合所提供的Matlab代码进行调试与仿真,通过改变市场参数、风险偏好和约束条件等方式开展敏感性分析,以深入掌握模型的适应性与鲁棒性。

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧