Toon posts:

[VB6] Systeemiconen in listview weergeven

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met het volgende probleem ik wil namelijk graag een programma maken wat lijkt op Windows Verkenner. En ik heb daarvoor icoontjes nodig van deze computer, diverse soorten schijven, mappen etc. Ik wil deze icoontjes niet opslaan is een imagelist. Want als iemand anders het programma gebruikt op een anders computer met een andere versie van Windows kunnen de systeemiconen verschillen.
Voorbeeld: Iemand die Windows 98 gebruikt heeft een ander icoontje voor ‘Deze Computer’ dan iemand die Windows XP gebruikt.

Weet iemand hoe je icoontjes van Windows zelf kan gebruiken en deze weer kan geven in een listview. Te denken aan icoontjes uit het volgende bestand: C:\WINDOWS\system32\SHELL32.dll

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 26-08 07:51

mulder

ik spuug op het trottoir

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Van bovenstaande hyperlink werkt de code bij mij niet. Misschien weet iemand anders een andere code???

Alvast bedankt!

Verwijderd

pscode al gechecked?

Verwijderd

Topicstarter
Ik heb daar wel wat gevonden en dat is deze code. Zip bestandje

<>http://www.pscode.com/vb/scripts/ShowZip.asp?lngWId=1&lngCodeId=23809&strZipAccessCode=+_DL238096496<>

Deze <> horen niet bij de hyperlink maar tweakers geeft ander niet het hele adres weer. En de link werkt anders ook niet want hij denkt dat bij het plus teken het adres is op gehouden maar dat is niet zo.

Ik heb van alles geprobeerd om deze in de ListView weer te geven. Rechtstreeks lukte niet. Want dan kreeg ik de melding dat ik ik een imagelist moest opgeven en daar icoon uit moest halen. Ook wel te verwachten.

Maar een icoontje met aan de list weer geven lukt me ook niet heb van alles geprobeerd. Zoals:

ImageList1.ListImages.Add.Picture = ExtractIcon(App.hInstance, "C:\WINDOWS\system32\SHELL32.dll", 20)

Deze code werkt niet

ExtractIcon is een procedure die in dat bestandje van hier boven staat.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 26-08 07:51

mulder

ik spuug op het trottoir

Volgens mij moest je in VB6 met omweg... dwz eerst in een Picturebox en dan in een Imagelist.

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Heb je een idee hoe je een picture uit een picturebox in een imagelist zet? Als ik dat weet dan ben ik al heel ver!

Weet iemand de oplossing voor dit probleem? Laat het dan weten!!!

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 26-08 07:50

johnwoo

3S-GTE

Doe een DrawIconEx in je picturebox, en add vervolgens PictureBox.Image aan de imagelist. Oh, en je moet wel voor iedere DrawIconEx even je picturebox cls'en, anders kan je restjes van de vorige icon overhouden en dat staat niet zo netjes ;)
Het nadeel (waar ik tegenaan liep) is wel dat de image van die picturebox ook de achtergrond omvat, en je dus in je ListView (waar je het denk ik in wilt gaan zetten mbv de imagelist) als je selecteert, altijd het hele vierkantje selecteert. Geen transparency, dus zorg ervoor dat de achtergrondkleur van je picturebox gelijk is aan de achtergrondkleur van je ListView.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Verwijderd schreef op 22 December 2002 @ 20:02:
Van bovenstaande hyperlink werkt de code bij mij niet. Misschien weet iemand anders een andere code???

Alvast bedankt!

P&W is een forum waar we aandacht besteden aan het zelf ontwikkelen van software en evt. problemen die hierbij kunnen ontstaan.
Wij willen je dan ook graag helpen de problemen of resultaten hiervan te voorzien van kritiek, tips, weet-ik-het, maar wij zijn er niet om jouw code te maken, je werk te doen of jouw zoekwerk te doen.

Daarom het vriendelijke verzoek niet meer te vragen naar complete codes om uw probleem op te lossen :)
Succes

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Een Picture uit een PictureBox zet je op de volgende manier in een ImageList.

code:
1
ImageList.ListImages.Add , , PictureBox.Image

Verwijderd

Topicstarter
Oké ik heb nu deze code. Alleen krijg ik het nog niet voor elkaar om de picturebox in de imagelist te zetten. Misschien weet iemand wat ik fout doe?

' ========================= MODULE =========================

Public Declare Function DrawIcon Lib "user32.dll" ( _
ByVal hdc As Long, ByVal x As Long, _
ByVal y As Long, ByVal hIcon As Long) _
As Long

Public Declare Function DestroyIcon Lib "user32.dll" ( _
ByVal hIcon As Long) As Long

Public Declare Function ExtractIcon Lib "shell32.dll" _
Alias "ExtractIconA" (ByVal hInst As Long, _
ByVal lpszExeFileName As String, _
ByVal nIconIndex As Long) As Long


Public Declare Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo _
As Long)

Public Const KEYEVENTF_KEYUP = &H2
Public Const VK_SNAPSHOT = &H2C
Public Const VK_MENU = &H12

Public I As Integer
Public j As Integer

Public NumberOfIcon As Integer
Public FileName As String

Public IconNumber As Integer


Public Function ExtractIconAndShow(ByVal fileNameWithPath As String, IconNumber As Integer, Ctrl As Control)
Dim hIcon As Long
Dim retval As Long

hIcon = ExtractIcon(App.hInstance, fileNameWithPath, IconNumber)

If IconNumber = -1 Then
ExtractIconAndShow = hIcon
Exit Function
End If

If hIcon = 0 Then
ExtractIconAndShow = 1
Else
retval = DrawIcon(Ctrl.hdc, 0, 0, hIcon)
retval = DestroyIcon(hIcon)
ExtractIconAndShow = 0
End If
End Function


' ========================= FORM ===========================

Private Sub Command1_Click()
Picture1.Cls
ExtractIconAndShow "c:\WINDOWS\system32\SHELL32.dll", 45, Picture1
ImageList1.ListImages.Add 0, "test", Picture1.Picture
End Sub

Private Sub Command2_Click()
ListView1.ListItems.Add 1, , "test", 1
End Sub

' ========================= EINDE CODE ======================

Ik heb twee knoppen, een picturebox, een imagelist en een listview op mij form getekend. Als je op knop een drukt zoals je ziet word netjes het icoontje opgehaald. Maar hij kan deze regel niet uitvoeren:

ImageList1.ListImages.Add 0, "test", Picture1.Picture

De volgende fout geeft hij aan:
481 Invalid picture

Wat doe ik hier fout? Als hij het plaatje uit de picturebox netjes in de imagelist zet ben ik klaar! 8).

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Verander
code:
1
ImageList1.ListImages.Add 0, "test", Picture1.Picture

eens door
code:
1
ImageList1.ListImages.Add 0, "test", Picture1.Image

Verwijderd

Topicstarter
robjanssen schreef op 23 december 2002 @ 11:27:
Verander
code:
1
ImageList1.ListImages.Add 0, "test", Picture1.Picture

eens door
code:
1
ImageList1.ListImages.Add 0, "test", Picture1.Image
Als ik dit doe dan slaat hij alleen de achtergrond op en niet het plaatje. Hoe kan dit???

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 26-08 07:50

johnwoo

3S-GTE

De Picture property geeft alleen het plaatje (dat je met LoadPicture hebt geladen ofzo), ofwel het HBITMAP object dat op dat moment op de device context van de window is geselecteerd.

De Image property daarentegen geeft de daadwerkelijke inhoud van de DC, ofwel dat wat je ziet (inclusief alle blaat die je er zelf hebt opgetekend met DrawIcon/DrawLine/DrawText/whatever).

Vandaar dat je in dit geval Image wil gebruiken in je ImageList.Add call ipv Picture :)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Maar zoals de topic starter al antwoord wordt alleen de achtergrond getoond in de ListView en niet het plaatje uit de shell32.dll wat er opgetekend is met DrawIcon.

Hoe kan dit?

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 26-08 07:50

johnwoo

3S-GTE

Ik neem aan dat je de picturebox onzichtbaar hebt gemaakt? Maak hem even zichtbaar en kijk of het plaatje daar wel goed op wordt getekend. Zo nee, dan ligt het probleem bij je icon draw code. Zo ja, dan ligt het probleem bij je imagelist<->listview koppeling.

Ik zal zo even mijn code opzoeken die het icoon gebeuren afhandelt... Behalve voor .exe's cache ik de icons per extensie in de imagelist (met de extensies als keys).
Ik heb hier een verhaaltje en wat code online gezet: http://lunenburg.xs4all.nl/zooi/icon_zooi.txt

[ Voor 30% gewijzigd door johnwoo op 23-12-2002 15:19 ]

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Verwijderd

Topicstarter
Het object picturebox is bij mij gewoon zichtbaar. Ik maak pas iets ontzichtbaar als iets werkt. Het icoontje word goed geladen. Dus het ligt echt aan het overzetten van picturebox naar imagelist.
Ik ga zo ff de link hier boven checken misschien geeft die wat meer duidelijkheid.

Verwijderd

Topicstarter
Ook deze code werkt niet! En dat vind ik erg vreemd. Hij geeft ook alleen hier de achtergrondkleur weer als icoontje in de listview.
Switch ik ff tussen verschillende vensters verdwijnen die icoontje in de pictureboxen.
Ook hier laad hij netjes het icoontjes wel in de pictureboxen zoals het hoord.

Wat doe ik fout moet ik iets bij de eigenschappen instellen van de picturebox? Hoe kan ik opgeven dat een pciturebox maar 32 bij 32 pixels groot moet zijn. Ligt hier misschien de fout?

Of ligt het aan WinXP, ik weet niet meer waar het aan kan liggen :?

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 26-08 07:50

johnwoo

3S-GTE

Probeer het nog eens met de AutoRedraw property van de PictureBox op True :)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Verwijderd

Topicstarter
Het werkt!!! :*) :*) :*)

Het lag inderdaad aan autoredraw ik heb het op true gezet en het werkt beide codes. De code die ik plaatste werkt en de code die Johnwoo me gaf werkt ook.
Ik ga zo meteen gelijk de code herschrijven en in mijn programmma opnemen.

Ik ben heel blij :*)

Allemaal bedankt voor jullie hulp!

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Het icoontje wordt als het ware alleen getekend op de PictureBox, maar als je dan wisselt tussen verschillende venster is hij weer weg.
Het zit dus niet gekoppeld aan de PictureBox.
Errug vaag.

Verwijderd

Je moet hier 'ns naar kijken, hiermee kan je de zgn. systemimagelist ophalen ,
daarmee heb je dus altijd een imagelist beschikbaar met de iconen voor mapjes/netwerk omg.,/deze computer etc.

http://msdn.microsoft.com...nctions/shgetfileinfo.asp

En een imagelist kan je zo aan een tree/list view koppelen, dus hoef je ook niet moeilijk te doen met zelf tekenen etc.


Is alleen voor XP

[ Voor 21% gewijzigd door Verwijderd op 24-12-2002 04:19 ]


  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 19-12-2025

DarkSilence

W3designer.nl

Het enige nadeel van deze code is dat de kleine icoontjes een verkleining van de grote iconen zijn.

Kun je misschien ook de plaatjes transparant in de picturebox plaatsen?

Weet iemand hoe de orginele kleine icoontjes uit een programma haalt graag!!! Ik ben namelijk hier naar opzoek.

[ Voor 15% gewijzigd door DarkSilence op 04-01-2003 14:08 ]

W3designer.nl

Pagina: 1