Newsgroup: it.comp.lang.visual-basic
Titolo: Caricare file da VB

Ciao ragazzi,
vi prego di aiutarmi... Ho un form con delle label alle quali sono
associati dei nomi di file. Ho la necessita' che quando clicco su un
nome, il mio software mi vada a caricare il programma associato. Fin
qui nulla di difficile... ma devo implementare una funzione che mi
permetta di aggiungere (una volta compilato il form) delle label con
altri nomi e percorsi files e poterli anche cancellarli. Avevo pensato
di predisporre un numero n di label e un file ini strutturato nel
seguente modo:
1	Microsoft Excel		c:\programmi\msexcel\msexcel.exe
2	Microsoft Word		c:\programmi\msword\msword.exe
1 e 2 sono i numeri delle label in cui vanno i campi. I campi
Microsoft... devono essere le caption delle label e il terzo campo e'
il percorso del file da eseguire. Sapete come posso far caricare al
form il file ini e inserire nelle label i campi con i nomi e poi far
eseguire i rispettivi comandi? Vi prego di aiutarmi. Possibilmente
rispondete al mio e.mail: 
vin...@iol.it
Grazie sin da ora.

 
Io ti rispono, ma qui sul NG.
E' piu' facile farlo che spiegarlo.
Nel tuo form, crea una label chiamata lblProg ed imposta Index a 0.
l'INI lo scrivi cosi':
[Labels]
1=Microsoft Excel;c:\programmi\msexcel\msexcel.exe
2=Microsoft Word;c:\programmi\msword\msword.exe
(notare il punto e virgola di separazione)
nel for copia questo
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String,
ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As
String) As Long
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As
String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As
String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal
lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName
As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private Sub Form_Load()
    Call LoadIniFile(App.Path & "\MieInfo.ini")
End Sub
Sub LoadIniFile(PathFileIni$)
    Dim Cont%, Esito As Long
    Dim StrAppo$, Riga$
    StrAppo$ = Space$(512)
    For Cont% = 0 To 9999
 
        ' Leggo dall'ini file
        Esito = GetPrivateProfileString("Labels", Format$(Cont% + 1), "", StrAppo$, Len(StrAppo$), PathFileIni$)
        If Esito = 0 Then Exit For
        Riga$ = Left$(StrAppo$, Esito)
 
        ' Creo la nuova label
        If Cont% Then
            Load lblProg(Cont%)
            lblProg(Cont%).Visible = True
            lblProg(Cont%).Top = lblProg(Cont% - 1).Top + lblProg(Cont% - 1).Height
        End If
 
        ' Inizializzo il titolo della label
        lblProg(Cont%).Caption = SpezzaStringa(Riga$, ";")
        ' salvo nella proprieta' TAG della label, a quale file corrisponde.
        ' se le informazioni aumentano, va usato un vettore a parte
        lblProg(Cont%).Tag = Riga$
 
    Next Cont%
End Sub
' La mitica Spezza Stringa
Function SpezzaStringa(Sorgente$, Spezza$) As String
    Dim Pos%
 
    Pos% = InStr(Sorgente$, Spezza$)
    If Pos% Then
        SpezzaStringa = Left$(Sorgente$, Pos% - 1)
        Sorgente$ = Mid$(Sorgente$, Pos% + Len(Spezza$))
    Else
        SpezzaStringa = Sorgente$
        Sorgente$ = ""
    End If
End Function
Ed il gioco e' fatto.
-- 
Hi, Ciao
Ettore                 By -MES-
http://freeweb.aspide.it/freeweb/ilmes
Il sito comune di programmatori VB
http://members.xoom.com/it_lang_vb

E' piu' facile farlo che spiegarlo.
Ti ringrazio....... sei stato davvero molto gentile ad inviarmi subito
la risposta... solo che devo adattare il tuo codice nella versione a
16 bit. Sai quali API devo modificare?
Ciao e grazie ancora.
Vincenzo Accardi
Per rispondermi via e.mail togli +NOSPAM+ dal mio indirizzo.
To reply via e.mail remove +NOSPAM+ from my address.

 
Caspita, se lo dicevi subito che usavi VB3 mi risultava ancora piu' semplice....  :-))
Comunque, fondamentalmente, ti basta cambiare le dichiarazioni seguenti.
VERSIONE 32 BIT:
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String,
ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As
String) As Long
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As
String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
VERSIONE 16 BIT:
Declare Function WritePrivateProfileString Lib "Kernel" (ByVal lpAppName$, ByVal lpKeyName$, ByVal lpString$, ByVal
lpFileName$) As Integer
Declare Function GetPrivateProfileString Lib "Kernel" (ByVal lpAppName$, ByVal lpKeyName$, ByVal lpDefault$, ByVal
lpRetString$, ByVal nSize%, ByVal lpFileName$) As Integer


Comunque, fondamentalmente, ti basta cambiare le dichiarazioni seguenti.
Perfetto... il programma adesso funziona... pero' quando clicco sulle
label non carica il programma associato.



Va bene che con VB e' semplice costruire una applicazione, ma un pochino di
codice lo vuoi pur scrivere? :-)
Usa l'API ShellExecute()
NON chiedermi la dichiarazione perche' la trovi sul Visualizzatore API che
c'e' con VB.
NON chiedermi come si usa perche' e' veramente banale.
Comunque sul sito comune mi pare ci sia qualche cosa anche su ShellExecute.
Il sito comune di programmatori VB
http://members.xoom.com/it_lang_vb
--
Roal Zanazzi
z...@iol.it