Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 Salvataggio impostazioni form

Ciao a tutti,
mi domandavo se c'era qualcosa di meglio di un file ini, per salvarmi al
volo le impostazioni di una form (esempio checkbox selezionati, option,
ecc) alla chiusura e poi caricarli al riavvio della schermata.
Grazie a tutti

Andrea [Work] ha scritto:

Registry?
Un file XML?
lasciarlo nel file INI? :-)
ciao
stefano

 lasciarlo nel file INI? :-)
Un recordset che poi salvi sul disco?
ciao
stefano

Andrea ha scritto...

'SaveSetting appname, section, key, setting
SaveSetting "MiaApplicazione", "Opzioni", "CheckBox1", CheckBox.Value
-----------------------------------------------
'GetSetting(appname, section, key[, default])
CheckBox.Value = GetSetting("MiaApplicazione", "Opzioni", "CheckBox1", 0)
-----------------------------------------------
'GetAllSettings(appname, section)
Dim MySettings As Variant, i As Integer
MySettings = GetAllSettings("MiaApplicazione", "Opzioni")
For i = LBound(MySettings, 1) To UBound(MySettings, 1)
    Debug.Print MySettings(i, 0), MySettings(i, 1)
Next i
-----------------------------------------------
'DeleteSetting appname, section[, key]
DeleteSetting "MiaApplicazione", "Opzioni", "CheckBox1"
--
Ciao Fede
By Chicco Production
http://bcp.freetools.it

 lasciarlo nel file INI? :-)
Sisi, in questo modo si, volevo farmi qualcosa di automatizzato per non
scrivere troppo codice
Da richiamare tipo
SalvaStato Me, Text1
SalvaStato Me, Check1
CaricaStato Me, Check1
Qualcosa del genere:
'Globale in un modulo
Public Sub SalvaStato (Form as Forma, ctl as Control)
  Se textbox SalvaIni Form.Name, ctl.Name, ctl.text, PathFileIni
  Se checkbx SalvaIni Form.Name, ctl.Name, ctl.value, PathFileIni
end sub
E' che devo fare una funzione globale, e usabile in #nprogetti diversi (con
nome diverso), ma con controlli uguali.


Se non ti crea problemi usare un file binario potresti sfruttare la 
persistenza dell'oggetto PropertyBag.
Public Sub SaveAllFormSettings(frm As Form, ByVal FilePath As String)
Dim ctl As Control
Dim pb As New PropertyBag
Dim buffer() As Byte
    For Each ctl In frm.Controls
        Select Case LCase(TypeName(ctl))
        Case "textbox"
            pb.WriteProperty ctl.Name, ctl.Text
        Case "checkbox", "optionbutton"
            pb.WriteProperty ctl.Name, ctl.Value
        Case "listbox", "combobox"
            pb.WriteProperty ctl.Name, ctl.ListIndex
        '... altri casi a scelta
        End Select
    Next
    buffer = pb.Contents
    Dim f As Integer
    f = FreeFile
    Open FilePath For Binary As f
    Put #f, , buffer
    Close f
End Sub
Public Sub LoadAllFormSettings(frm As Form, ByVal FilePath As String)
Dim ctl As Control
Dim pb As New PropertyBag
Dim buffer() As Byte
    Dim f As Integer
    f = FreeFile
    Open FilePath For Binary As f
    ReDim buffer(LOF(f) - 1)
    Get #f, , buffer
    Close f
    pb.Contents = buffer
    For Each ctl In frm.Controls
        Select Case LCase(TypeName(ctl))
        Case "textbox"
            ctl.Text = pb.ReadProperty(ctl.Name)
        Case "checkbox", "optionbutton"
            ctl.Value = pb.ReadProperty(ctl.Name)
        Case "listbox", "combobox"
            ctl.ListIndex = pb.ReadProperty(ctl.Name)
        '... altri casi a scelta
        End Select
    Next
End Sub
Bye
Raf 

 nome diverso), ma con controlli uguali.
L'ho scritta cosě al volo, ma dovrebbe funzionare:
Private Sub SalvaConfig(Frm As Object)
    Dim Ctl As Control
    For Each Ctl In Frm.Controls
        If TypeOf Ctl Is Label Then
            SaveSetting App.Title, Frm.Name, Ctl.Name, Ctl.Caption
        ElseIf TypeOf Ctl Is TextBox Then
            SaveSetting App.Title, Frm.Name, Ctl.Name, Ctl.Text
        ElseIf TypeOf Ctl Is CheckBox Then
            SaveSetting App.Title, Frm.Name, Ctl.Name, Ctl.Value
        End If
    Next
End Sub
Private Sub CaricaConfig(Frm As Object)
    Dim Ctl As Control
    For Each Ctl In Frm.Controls
        If TypeOf Ctl Is Label Then
            Ctl.Caption = GetSetting(App.Title, Frm.Name, Ctl.Name)
        ElseIf TypeOf Ctl Is TextBox Then
            Ctl.Text = GetSetting(App.Title, Frm.Name, Ctl.Name)
        ElseIf TypeOf Ctl Is CheckBox Then
            Ctl.Value = GetSetting(App.Title, Frm.Name, Ctl.Name)
        End If
    Next
End Sub


 L'ho scritta cosě al volo, ma dovrebbe funzionare:
Si grazie, č solo che sostanzialmente mi sa che dovrň decidere per ogni
form cosa salvare e cosa no (o comunque a volte salverň tutte altre no).
Intanto me la sono segnata, poi la provo.
Tnx

 persistenza dell'oggetto PropertyBag.
Era questo che intendevo, ma ancora non ho capito a cosa serve il
PropertyBag, solo che se ho capito bene, è nato per l'uso con i controlli
utente o sbaglio?

 controlli utente o sbaglio?
Sě, il suo utilizzo principale č per gli usercontrols, ma nulla vieta di 
usarlo per altri scopi.
Ciao
Raf 

 usarlo per altri scopi.
Ok, grazie.
Per ora lascerň un attimo in sospeso il tutto, devo infatti portare avanti
un progetto su PPC.
Devo fare un sw che gestisca tipo 15/20 palmari wi-fi ed invii/riceva
stringhe di testo (es. "Domanda1", "Risposta 2")
L'idea iniziale era di usare dei file in rete su una cartella condivisa, ma
il palmare che ho sembra abbia qualche problema.
Tra l'altro avevo visto TCPClient e TCPListener, ma con sharp(bug)develop
mi sa che ci sono un po' di problemi (stesso progetto scritto sulla express
funziona, su #d no :\)
Come mi consigliate di muovermi?
Tnx