08. oktober 2002 - 07:28Der 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 ?
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
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
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
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 :-)
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
Nice nok.....der er sq da noget jeg kan bruge her....:D
Synes godt om
Ny brugerNybegynder
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.