Onkohan jotain tapaa hakea jostain hakemistosta tiedostoja ja lisätä niitä vaikka johonkin formille iconeina, joita klikatessa se ohjelma käynnistyy?
Ei taida olla kovin helppo jos edes on mahdollista?
On mahdollista. Laita formille esim. Image-kontrolli, jonka Index-arvo on 0. Tämän jälkeen lue hakemiston tiedostot (Dir-funktiolla) ja luo kustakin tiedostosta oma kuvake sopivalle paikalle formille. Tiedoston nimen voit vaikkapa liittää kontrollin Tag-ominaisuuteen. Kuvakkeilla (Image-kontrollit) on sitten yhteinen Click-aliohjelma, joka käynnistää Tagissa mainitun tiedoston tai ohjelman WinApin ShellExecute-funktiolla. Ainoa juttu, mitä nyt heti en keksi, on tiedoston kuvakkeen selvittäminen.
Kätevintä on tietysti käyttää MS Common Controlleista löytyvää ListViewiä (tai joku muu List* systeemi jokatapauksessa) :)
ImageListhän se on
No ei kellään sattuisi olemaan mitään koodiesimerkkiä aiheesta? Minä löysin yhden ihan hienon explorerin... tjs (windowsin shellin) replacerin, jossa oli tämä tehty, mutta minä en löytänyt siellä koodissa mitään mitä olisi ymmärtänyt....
varmaan tätä täytyisi jotenkin käyttää hyväkseen
https://www.ohjelmointiputka.net/keskustelu/528-vb-kysymys
Eli olen yrittänyt nyt tehdä niin, että kun mulla on formilla frame objekti ja framesta löytyy image1 ja label1 ja form_load tapahtumasta löytyy tälläistä koodia
Dim tiedosto As String 'etsii juurihakemiston tekstitiedostot tiedosto = Dir("c:\*.exe") Do Until tiedosto = "" Debug.Print tiedosto tiedosto = Dir Loop
ja yritin saada toimimaan mohaxin neuvoma koodiesimerkki tuon kanssa, mutten saanut tosin mä en ole saanut sitä esimerkkiä muutenkaan toimimaan vaan laaksosen koodiesimerkki on ollut ainoa, joka toimii, mutta se ei ehkä sovellu ihan noin käyttööni.
Mitään hyvää tapaa eli pitäisi saada jokaisesta C-asemalla olevasta exe tiedostosta tehtyä oma kuvake formille.
Teinpä iltapuhteiksi ohjelman, joka lukee hakemiston ohjelmatiedostot ja näyttää ne siististi formilla. Kuvaketta painamalla ohjelma käynnistyy. Bonuksena ohjelma yrittää saada selville ohjelman todellisen kuvakkeen käymällä läpi resurssit 0 - 255. Usein se toimiikin muttei aina. Joku varmaan tietää paremman tavan kuin umpimähkään kokeileminen.
Formilla täytyy olla imgOhjelma-niminen kuva, jonka Index-arvo on 0.
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule 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 LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As Any) As Long Private Const IDI_APPLICATION = 32512& 'ohjelman oletuskuvake Private Const HAKEMISTO = "c:\testi\" 'hakemisto, josta ohjelmia etsitään Private Sub Form_Load() ScaleMode = 3 'pikseli on twippiä mukavampi yksikkö 'kätketään tyhjä kuva ja määritetään kuvakkeiden mitat imgOhjelma(0).Visible = False imgOhjelma(0).Move 0, 0, 32, 32 Dim tied As String, i As Integer Dim x As Integer, y As Integer Dim d As Long, ohj As Long, kuva As Long 'ruvetaan lukemaan hakemistoa tied = Dir(HAKEMISTO & "*.exe") 'ensimmäisen kuvakkeen piirtokohta x = 5 y = 5 'jatketaan niin kauan kuin tiedostoja riittää While tied <> "" 'luodaan uusi kuvake i = i + 1 Load imgOhjelma(i) 'siirretään kuvake oikeaan paikkaan imgOhjelma(i).Move x, y 'ladataan ohjelma kuvakkeen hakemista varten ohj = LoadLibrary(HAKEMISTO & tied) kuva = 0 'yritetään etsiä kuvake ohjelmasta If ohj Then For d = 0 To 255 kuva = LoadIcon(ohj, "#" & d) If kuva <> 0 Then Exit For Next End If 'jos kuvaketta ei löytynyt, käytetään oletuskuvaketta If kuva = 0 Then kuva = LoadIcon(0, IDI_APPLICATION) End If 'ohjelmaa ei enää tarvita d = FreeLibrary(ohj) 'laitetaan kuvake näkyville ja piirretään kuvake imgOhjelma(i).Visible = True d = DrawIcon(Me.hdc, x, y, kuva) 'ohjelman nimi Tagiin ja vihjelaatikkoon imgOhjelma(i).Tag = tied imgOhjelma(i).ToolTipText = tied 'lasketaan seuraavan kuvakkeen paikka x = x + 32 + 5 If x + 32 + 5 >= Me.ScaleWidth Then x = 5 y = y + 32 + 5 End If 'haetaan seuraava tiedosto hakemistosta tied = Dir Wend End Sub Private Sub imgOhjelma_Click(Index As Integer) 'avataan Tagin mukainen ohjelma Dim d As Long d = ShellExecute(Me.hwnd, vbNullString, HAKEMISTO & imgOhjelma(Index).Tag, vbNullString, vbNullString, vbNormalFocus) End Sub
Kiitos Antti L, tuo on mahtava enkä olisi kyllä itse koskaan tuota kehittänyt ja koodi on vielä mukavasti kommentoitu suomeksi :)
Kai tarkoitat tuolla imgOhjelma siis ihan vain image objektia vai onko se sitten picture objekti? Image objektissa ei näy mitään kuvia ja picture objektina kaikki toimii, mutta ohjelman kuvaketta ei näy vaan pelkkä harmaa boxi, mutta kummallakin tapaa kuitenkin ohjelmien käynnistys toimii jotenkuten paitsi, että image objektia käytettäessä vain yksi ohjelmista toimii ja loput valittaa "file not found"... tjs ja saa todellakin niitä kuvakkeita formilla etsiä, kun ei mitään tietoa muista ohjelmista kuin vain siitä yhdestä.
ps: Käytössäni on Visual Basic 5
Edit: väitin väärää ensin
Vaikuttaa aika kewliltä, mutta eipä tosiaan minullakaan näytä kuvia laatikoissa. Käynnistys tuntuis toimivan. VB6/Windows Server 2003
Kokeilkaapas laittaa formin AutoRedraw-ominaisuuden arvoksi True. Ja imgOhjelma on tosiaan Image.
Aihe on jo aika vanha, joten et voi enää vastata siihen.