Avatar billede fqthjoe Nybegynder
08. oktober 2002 - 07:28 Der er 11 kommentarer og
2 løsninger

Gemme valg i runtime

Hej eksperter
Hvordan kan jeg gemme brugerens valg, f.eks. i en checkbox. Altså at programmet startes op med det valg (enten Checked eller unchecked) at brugeren sidst har valgt, da programmet kørte. Så de "indstillinger" brugeren laver i runtime gemmes og indlæses igen når prg. states forfra.
Et eksempel:
Private Sub Check1_Click()
If Check1.Value = 1 Then
List1.Visible = True
Else
List1.Visible = False
End If
End Sub
Hvis brugeren så hakker checkbox'en af, ja så skal checkbox'en hakkes af når prg. startes forfra.. Og så selvfølgelig omvendt.
Håber en kan/vil hjælpe ?
Avatar billede dk_akj Nybegynder
08. oktober 2002 - 07:39 #1
Det letteste er nok at gemme dem i en .ini fil

Her er et eksempel på hvordan du får adgang til en .ini fil.
http://www.vbaccelerator.com/codelib/inireg/inifile.htm

//akj
Avatar billede fqthjoe Nybegynder
08. oktober 2002 - 07:47 #2
Ok, ser spændende ud. Må vist lige læse det igennem.. Virker som en større omgang.. men tjekker det da lige ordentligt igennem.
Takker :-)
Avatar billede dk_akj Nybegynder
08. oktober 2002 - 07:54 #3
Hvis du hellere vil gemme i registry er dette nok hurtigere.

Opret en form med to cmd's og paste denne kode ind.


Private Sub Command1_Click()
ret = InputBox("Hvad vil du gemme ??", "Indtast et eller andet.")
SaveSetting "My_app", "My_section", "My_key", ret
End Sub



Private Sub Command2_Click()
MsgBox GetSetting("My_app", "My_section", "My_key", "tester")
End Sub
Avatar billede dk_akj Nybegynder
08. oktober 2002 - 07:57 #4
Den gemmer forresten under denne nøgle i registry:
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\My_app\

//akj
Avatar billede tubber Juniormester
08. oktober 2002 - 10:11 #5
Vil lige tilføje det er lige så hurtigt at lave det i en ini som i reg. altså rent kodemæssigt....

Om du skal vælge det ene eller det andet kommer an på hvor mange du har....er det 1-10 "poster" du skal ha lavet vil jeg lave det i en ini fil, men er det flere vil jeg bruge reg.
Er det ikke lige den hurtigste maskine det skal kører på vil jeg nok bruge en ini under alle omstændigheder. (Jeg kan ikke dokumentere hvorfor, jeg har hørt fra en programeringslære det skulle være det mest hensigtsmæssige)

Personligt vil jeg altid bruge en inifil, for jeg syntes der er mere styr på det på den måde....fjerner man sit program igen bliver der så efterladt noget i reg ?
Og reg må jo heller ikke blive for stor :O)

'Følgende ligges i et modul (basfil)
'Declaretion for writing to an .ini file

Public Declare Function WritePrivateProfileString _
Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationname As String, ByVal _
lpKeyName As Any, ByVal lsString As Any, _
ByVal lplFilename As String) As Long

'Declaretion for read from an .ini file

Public Declare Function GetPrivateProfileString Lib _
"kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationname As String, ByVal _
lpKeyName As String, ByVal lpDefault As _
String, ByVal lpReturnedString As String, _
ByVal nSize As Long, ByVal lpFileName As _
String) As Long

'variables for reading and writing .ini files
'They are dimensioned here becaus then the module
'can be freely moved to other programs

Global lngResult As Long
Global strFileName
Global strResult As String * 50

-------------------------------------------------------------------------

'Read option setup from .ini file

strFileName = App.Path & "\setup.ini"
lngResult = GetPrivateProfileString("Gruppe", _
"Type", strFileName, strResult, Len(strResult), _
strFileName)

'If value = 0 reports an error

If lngResult = 0 Then
Call MsgBox("An error has occurred", _
vbExclamation)
Else
    If Trim(strResult) = 1 Then
        MsgBox ("Her skal handlingen for værdi 1 stå")
    ElseIf Trim(strResult) = 2 Then
        MsgBox ("Her skal handlingen for værdi 2 stå")
    End If
End If

---------------------------------------------------------------------------

'Write option to an ini file
    strFileName = App.Path & "\Setup.ini"
    lngResult = WritePrivateProfileString("Gruppe", _
    "Type", "Værdi", strFileName)

---------------------------------------------------------------------------

det vil se sådan her ud i ini filen:

[Gruppe]
Type=Værdi

under hver gruppe kan der være flere typer, så det er bare lave en ny write hvor du skriver noget andet en type, kan f.eks. være type2....

/Tubber
Avatar billede fqthjoe Nybegynder
08. oktober 2002 - 20:22 #6
Kan det evt. udybes lidt mere. Evt. med et eksempel baseret på mit eksempel i spørgsmålet.
Der kommer desværre fejl ved Global linierne.. ved ikke om det er mig der gør noget forkert..men måske du vil hjælpe videre. Er mest interesseret i ini-fil måden :-)
Takker indtil videre begge :-)
Avatar billede tubber Juniormester
08. oktober 2002 - 23:34 #7
du kan maile din kode til mig og jeg skal lave et eksempel på din kode :O)
Avatar billede dk_akj Nybegynder
09. oktober 2002 - 07:40 #8
Hvis du vil bruge ini-fil så check det eksempel der er på http://www.vbaccelerator.com/codelib/inireg/inifile.htm

eller direkte link:
http://www.vbaccelerator.com/codelib/inireg/cinidemo.zip

//akj
Avatar billede fqthjoe Nybegynder
09. oktober 2002 - 08:39 #9
Er sendt :-)
Avatar billede tubber Juniormester
09. oktober 2002 - 10:45 #10
For en god ordens skyld smidder jeg lige koden her (hvis jeg har fanget det rigitgt det med brugen af de checkboxe vil det være nemmere med radiobuttons til farverne)

--------------------------------------------------------------------------

'Kode i et basmodul
'Declaretion for writing to an .ini file

Public Declare Function WritePrivateProfileString _
Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationname As String, ByVal _
lpKeyName As Any, ByVal lsString As Any, _
ByVal lplFilename As String) As Long

'Declaretion for read from an .ini file

Public Declare Function GetPrivateProfileString Lib _
"kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationname As String, ByVal _
lpKeyName As String, ByVal lpDefault As _
String, ByVal lpReturnedString As String, _
ByVal nSize As Long, ByVal lpFileName As _
String) As Long

'variables for reading and writing .ini files
'They are dimensioned here becaus then the module
'can be freely moved to other programs

Global lngResult As Long
Global strFileName
Global strResult As String * 50

--------------------------------------------------------------------------

'Kode i formen
Private Sub Check1_Click()
If Check1.Value = 1 Then
List1.Visible = True
Else
List1.Visible = False
End If
End Sub
Private Sub Check2_Click()
If Check2.Value = 1 And Check2.Value = 0 Then
    Form1.BackColor = vbBlue
    Check1.BackColor = vbBlue
    Check2.BackColor = vbBlue
    Check3.BackColor = vbBlue
Else
    If Check3.Value = 1 And Check2.Value = 0 Then
        Form1.BackColor = vbRed
        Check1.BackColor = vbRed
        Check2.BackColor = vbRed
        Check3.BackColor = vbRed
    Else
        Form1.BackColor = vbGreen
        Check1.BackColor = vbGreen
        Check2.BackColor = vbGreen
        Check3.BackColor = vbGreen
    End If
End If
End Sub
Private Sub Check3_Click()
If Check3.Value = 1 Then
    Form1.BackColor = vbRed
    Check1.BackColor = vbRed
    Check2.BackColor = vbRed
    Check3.BackColor = vbRed
Else
    If Check2.Value = 1 Then
        Form1.BackColor = vbBlue
        Check1.BackColor = vbBlue
        Check2.BackColor = vbBlue
        Check3.BackColor = vbBlue
    Else
        Form1.BackColor = vbGreen
        Check1.BackColor = vbGreen
        Check2.BackColor = vbGreen
        Check3.BackColor = vbGreen
    End If
End If
End Sub

Private Sub Command1_Click()
If Check1.Value = 0 Then
    'Writes new setting to .ini file
   
    strFileName = App.Path & "\Setup.ini"
    lngResult = WritePrivateProfileString("Setup", _
    "Listbox", "2", strFileName)

    If lngResult = 0 Then
    Call MsgBox("An error has occurred", _
    vbExclamation)
    End If

ElseIf Check1.Value = 1 Then
   
    'Writes new setting to .ini file
   
    strFileName = App.Path & "\Setup.ini"
    lngResult = WritePrivateProfileString("Setup", _
    "Listbox", "1", strFileName)

    'If value = 0 reports an error
   
    If lngResult = 0 Then
    Call MsgBox("An error has occurred", _
    vbExclamation)
    End If
End If

If Check2.Value = 0 And Check3.Value = 0 Then
    'Writes new setting to .ini file
   
    strFileName = App.Path & "\Setup.ini"
    lngResult = WritePrivateProfileString("Setup", _
    "Color", "3", strFileName)

    If lngResult = 0 Then
    Call MsgBox("An error has occurred", _
    vbExclamation)
    End If

ElseIf Check2.Value = 1 And Check3.Value = 0 Then
   
    'Writes new setting to .ini file
   
    strFileName = App.Path & "\Setup.ini"
    lngResult = WritePrivateProfileString("Setup", _
    "Color", "1", strFileName)

    'If value = 0 reports an error
   
    If lngResult = 0 Then
    Call MsgBox("An error has occurred", _
    vbExclamation)
    End If

ElseIf Check2.Value = 0 And Check3.Value = 1 Then
   
    'Writes new setting to .ini file
   
    strFileName = App.Path & "\Setup.ini"
    lngResult = WritePrivateProfileString("Setup", _
    "Color", "2", strFileName)

    'If value = 0 reports an error
   
    If lngResult = 0 Then
    Call MsgBox("An error has occurred", _
    vbExclamation)
    End If

ElseIf Check2.Value = 1 And Check3.Value = 1 Then
   
    'Writes new setting to .ini file
   
    strFileName = App.Path & "\Setup.ini"
    lngResult = WritePrivateProfileString("Setup", _
    "Color", "3", strFileName)

    'If value = 0 reports an error
   
    If lngResult = 0 Then
    Call MsgBox("An error has occurred", _
    vbExclamation)
    End If
End If
End Sub

Private Sub Form_Load()
strFileName = App.Path & "\setup.ini"
lngResult = GetPrivateProfileString("Setup", _
"Listbox", strFileName, strResult, Len(strResult), _
strFileName)

If Trim(strResult) = 1 Then
    List1.Visible = True
    Check1.Value = 1
Else: List1.Visible = False
End If

strFileName = App.Path & "\setup.ini"
lngResult = GetPrivateProfileString("Setup", _
"Color", strFileName, strResult, Len(strResult), _
strFileName)

If Trim(strResult) = 1 Then
    Form1.BackColor = vbBlue
    Check1.BackColor = vbBlue
    Check2.BackColor = vbBlue
    Check3.BackColor = vbBlue
    Check2.Value = 1
ElseIf Trim(strResult) = 2 Then
    Form1.BackColor = vbRed
    Check1.BackColor = vbRed
    Check2.BackColor = vbRed
    Check3.BackColor = vbRed
    Check3.Value = 1
ElseIf Trim(strResult) = 3 Then
    Form1.BackColor = vbGreen
    Check1.BackColor = vbGreen
    Check2.BackColor = vbGreen
    Check3.BackColor = vbGreen
End If
End Sub

--------------------------------------------------------------------------

/Tubber
Avatar billede fqthjoe Nybegynder
09. oktober 2002 - 10:59 #11
Takker alt virker :-)
Avatar billede fqthjoe Nybegynder
09. oktober 2002 - 10:59 #12
ups.. Tubber skulle have haft flere points. sorry
Avatar billede pissed_squirrel Nybegynder
27. marts 2003 - 23:21 #13
Nice nok.....der er sq da noget jeg kan bruge her....:D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester