Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: seba123neo en Febrero 15, 2010, 11:47:18 am
-
Hola tengo una pequeña duda al usa el metodo ImageListLoadIconFromResource en este control, como parametro
pide la seccion pero ya he probado un monton de variantes y no logro cargar un icono desde el recurso, y como el ejemplo no vino
con algun ejemplo de cargar desde un recurso, pense que no estaba funcionando este metodo, siempre el hIcon me devuelve 0.
¿ que puede ser ?
Saludos.
-
hola Seba lo que pasa es que tiene que estar compilado, porque intermanemte hace esto
hicon = LoadImage(App.hInstance, Section, IMAGE_ICON, mIconWidth, mIconHeight, LR_SHARED Or LR_LOADMAP3DCOLORS)
y bien LoadImage con App.hInstance funciona solo compilado.
prodria haver utilizado LoadResData + CreateIconFromResourceEx, pero bueno era mas simple la primera
y bueno suponiendo que tenes un icono en el recursos con el nombre ICON_0
ComboBoxEx1.ImageListLoadIconFromResource "ICON_0"
Saludos.
-
gracias por responder, si me imagine algo de que tenia que ser compilado...ahora trate de adaptarlo con CreateIconFromResourceEx ¿ te acordas que use esta api en la otra pregunta de los iconos que se descoloreaban ? bueno eso funcionaba perfecto, ahora trate de adaptarlo y me quedo asi:
Public Function ImageListLoadIconFromResource(ByVal Section As String) As Boolean
Const ICRESVER As Long = &H30000
Const LR_DEFAULTSIZE As Long = &H40
Dim bData() As Byte
Dim dwOffset As Long, dwSize As Long
Dim Index As Long
Index = 0
bData() = LoadResData(101, "Custom")
dwSize = VarPtr(bData(16& * Index + 14&))
dwOffset = VarPtr(bData(bData(16& * Index + 18&)))
Dim hicon As Long
'hicon = LoadImage(App.hInstance, Section, IMAGE_ICON, mIconWidth, mIconHeight, LR_SHARED Or LR_LOADMAP3DCOLORS)
hicon = CreateIconFromResourceEx(ByVal dwOffset, ByVal dwSize, 1, ICRESVER, 0&, 0&, LR_DEFAULTSIZE)
If hicon Then
ImageListLoadIconFromResource = Me.ImageListAddIcon(hicon)
DestroyIcon hicon
End If
End Function
las constantes ya se que queda feo ahi metidas en el sub..pero es para que se vea nomas despues las saco...
el tema que funciona perfecto en tiempo de ejecucion y me muestra la sombra..al compilarlo, tambien funciona perfecto y me saca la sobra y me toma la transparencia bien...pero hay algo que esta mal...si comparas el icono origal de 32x32 no lo toma tal cual..tiene unas pequeñas inperfecciones con respecto al original...¿ que sera ? algun flag que me estoy comiendo a la api ? ...todo esto es asi porque tengo un proyecto grande que tarda minutos en compilar y no puedo estar compilando y probando a cada rato...necesito verlo como queda en tiempo de ejecución...aunque me aparesca la sobra en tiempo de ejecucion eso no importa..total yo se que se sale al compilar..pero necesito verlo.
saludos.
-
Hola Seba no entendi mucho lo de la sombra, suponiendo que tomas en cuenta los temas de xp, para que no se vean las transparencias negras en los iconos.
en cuanto a la funcion yo la haria diferente, te cuento porque, digamos que no calcula cual es el icono mas adecuado a leer, y de hay que se pueda mostrar algo defectuso, ademas no se si ago algo mal yo pero no funciona cuando index es > 0.
yo usaria la funcion LoadIconFromStream (Es la que utilize en insertar imagenes PNG en un imagelist) esta calcula el icono más adecuado para las dimenciones del imagelist
La función quedaria asi:
Public Function ImageListLoadIconFromResource(ByVal ResIndex As Variant, ByVal ResSection As Variant, Optional VBglobal As IUnknown) As Boolean
Dim bvData() As Byte
Dim oVBglobal As VB.Global
Dim hIcon As Long
On Local Error GoTo Err_Handler
If oVBglobal Is Nothing Then
Set oVBglobal = VB.Global
ElseIf TypeOf oVBglobal Is VB.Global Then
Set oVBglobal = VBglobal
ElseIf VBglobal Is Nothing Then
Set oVBglobal = VB.Global
End If
bvData() = oVBglobal.LoadResData(ResIndex, ResSection)
hIcon = LoadIconFromStream(bvData, mIconWidth, mIconHeight)
If hIcon Then
ImageListLoadIconFromResource = Me.ImageListAddIcon(hIcon)
DestroyIcon hIcon
End If
Err_Handler:
End Function
por las dudas tene cuidado con la declaracion de CreateIconFromResourceEx fijate que esta declarada distinta.
Saludos.
-
Leandro gracias ;), ahora ya no muestra ese defecto, el icono lo muestra perfecto ;D...pero ahora encontre un problema que es del ejemplo original que capas no te diste cuenta , pero es que cada vez que moves el mouse sobre los items, los iconos se van como repintando uno arriba del otro (como pasaba con los widget ¿te acordas?) se ve que se va repintando la imagen cada vez que pasas el mouse,pero si moves la rueda del mouse desaparece y se actualiza y vuelve todo ok, pero queda feo porque se va acumulando una sobra negra en las imagenes, repito esto pasa en el ejemplo original.
saludos y gracias.
-
Hola seba no caia cua era el problema despues mi di cuenta que es porque el imagelist tiene que tener un backcolor
te doy un ejemplo fuera del usercontrol sino aplicando el codigo desde el formulario
Declaras estas dos apis
Private Declare Function ImageList_SetBkColor Lib "comctl32.dll" (ByVal himl As Long, ByVal clrBk As Long) As Long
Private Declare Function OleTranslateColor Lib "olepro32.dll" (ByVal OLE_COLOR As Long, ByVal hPalette As Long, pccolorref As Long) As Long
y luego de crear el imagelist (CreateImageList )
Dim lColor As Long
ComboBoxEx2.CreateImageList 32, 32
OleTranslateColor vbWindowBackground, 0, lColor
ImageList_SetBkColor ComboBoxEx2.hImageList, lColor
con eso se soluciona el problema.
Saludos.
-
mira vos, funciono perfecto, lo puse en el usercontrol (despues que crea el Imagelist) y andubo joya.... y de paso en tiempo de ejecucion me toma la transparencia y todo...gracias por el tiempo...nos vemos...
saludos.