anoniem Geplaatst: 4 maart 2005 Delen Geplaatst: 4 maart 2005 Voor mijn 'application launcher' progje haal ik icoontjes uit de executables of shortcuts die getoond moeten worden aan de gebruikers. Ik gebruik daarvoor deze functie: [code:1:b00d49eee8]Option Explicit Private Type TPictDesc cbSizeofStruct As Long PicType As Long hImage As Long xExt As Long yExt As Long End Type Private Type TGUID Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type Private Declare Function ExtractAssociatedIcon Lib _ "shell32.dll" Alias "ExtractAssociatedIconA" _ (ByVal hInst As Long, ByVal lpIconPath As String, _ lpiIcon As Long) As Long Private Declare Function OleCreatePictureIndirect Lib _ "olepro32.dll" (ByRef lpPictDesc As TPictDesc, _ ByRef RIID As TGUID, ByVal fPictureOwnsHandle As Long, _ ByRef IPic As IPicture) As Long 'Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long Public Function HaalIcon(ByVal sFile As String, Optional ByVal Index As Long = 0) As Picture Dim Pic As Picture Dim PicDes As TPictDesc Dim IID_IDispatch As TGUID Dim Handle As Long Handle = ExtractAssociatedIcon(App.hInstance, sFile, Index) If Handle = 0 Then Exit Function PicDes.cbSizeofStruct = Len(PicDes) PicDes.PicType = vbPicTypeIcon PicDes.hImage = Handle IID_IDispatch.Data1 = &H20400 IID_IDispatch.Data4(0) = &HC0 IID_IDispatch.Data4(7) = &H46 Call OleCreatePictureIndirect(PicDes, IID_IDispatch, True, Pic) Set HaalIcon = Pic End Function 'voorbeeld ... 'Set Image1.Picture = HaalIcon("C:\Shortcut.lnk") [/code:1:b00d49eee8] Wanneer ik deze functie niet gebruik in mijn prog, lijkt het stabieler dan wanneer ik hem wel gebruik. Ik krijg dan af en toe zo'n 'VB6 heeft fouten gegenereerd...' verhaal. ERRUG VERVELEND. Ziet iemand hier iets 'onstabiels' in? ROB Quote Link naar reactie
anoniem Geplaatst: 4 maart 2005 Auteur Delen Geplaatst: 4 maart 2005 Het is al weer even geleden dat ik in vb heb gewerkt, maar probeer eens om: [code:1:752715a215]Public Function HaalIcon(ByVal sFile As String, Optional ByVal Index As Long = 0) As Picture Dim Pic As Picture [/code:1:752715a215] Te veranderen in: [code:1:752715a215]Public Function HaalIcon(ByVal sFile As String, Optional ByVal Index As Long = 0) As IPicture Dim Pic As IPicture [/code:1:752715a215] Je werkt met COM dus ook de juiste return variabelen zijn daar voor nodig en als het goed is kent VB ook IPicture. Ik weet niet of het werkt maar give it a try :wink: Quote Link naar reactie
anoniem Geplaatst: 4 maart 2005 Auteur Delen Geplaatst: 4 maart 2005 ik heb het anders gedaan. ik gebruik nu de functie SHGetFileInfo(...) hiermee kan ik meteen de 'selected' icoontjes ophalen (alsof ze geselecteerd zijn). een en ander vond ik op http://www.aboutvb.de/khw/artikel/khwassocicon.htm het voorbeeld-project wat je kan downloaden is een vergelijking tussen deze functie en ExtractAssociatedIcon(...) (ja, die ik eerst wilde gaan gebruiken). Echter, deze knalde er dus ook uit! Nadat ik de ExtractAssociatedIcon functie had uitgeschakeld, geen probleem meer met dit projectje. Overigens, DarthV, geeft dit voorbeeld een stdPicture terug. Jouw voorstel van IPicture heb ik niet meer kunnen proberen omdat ik de code al helemaal had omgegooid. dus: [b:c20f14302f]ExtractAssociatedIcon[/b:c20f14302f] . . . . . . werkt niet goed (op mijn pc, win2000?) [u:c20f14302f]voordelen[/u:c20f14302f]: weinig code nodig + je krijgt altijd een icon terug (als file niet bestaat, krijg je standaard (ongeassocieerd) icon, je weet wel, wit blaadje met windows logo'tje). [u:c20f14302f]nadelen[/u:c20f14302f]: is dus onstabiel (bij mij) + geeft alleen 32x32 terug (was voor mij niet erg) + kan geen 'selected' of 'link-overlay' icon creeren. [b:c20f14302f]SHGetFileInfo[/b:c20f14302f] [u:c20f14302f]voordelen[/u:c20f14302f]: kan dus wel allerlei icon-types en -groottes teruggeven + stabieler(?) [u:c20f14302f]nadelen[/u:c20f14302f]: wanneer file niet bestaat, krijg je helemaal niets terug + iets meer code nodig (minder erg) Ik heb bij het testen van deze functies ook telkens een aantal ongeldige filenamen gebruikt. ROB Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen