Declare Function WritePrivateProfileString Lib \"kernel32\" Alias \"WritePrivateProfileStringA\" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As Any, ByVal lpFileName As String) As Long Declare Function WritePrivateProfileSection Lib \"kernel32\" Alias \"WritePrivateProfileSectionA\" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long Declare Function GetPrivateProfileSection Lib \"kernel32\" Alias \"GetPrivateProfileSectionA\" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long 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
Property Get INI(sFile As String, sSection As String, sKey As String) As String Dim sValue As String sValue = String$(128, 32) Call GetPrivateProfileString(sSection, sKey, \"Failed\", sValue, Len(sValue), sFile) If Left(sValue, 6) <> \"Failed\" Then sValue = RTrim(sValue) sValue = Left(sValue, Len(sValue) - 1) INI = sValue End If End Property
Property Let INI(sFile As String, sSection As String, sKey As String, ByVal sValue As String) Call WritePrivateProfileString(sSection, sKey, sValue, sFile) End Property
Hej. Jeg synes at registreringsdatabasen er roden til megen forvirring i win9x\'s funktioner, så den holder jeg mig fuldstændig fra.
Eksemplet er revet ud f sit program, men det giver vel en ide. Vil du bruge det kan jeg også indsætte det område hvor man skriver til og gemmer i ini-filen.
If Dir(App.Path & \"\\jkfaerge.ini\") = \"\" Then X = MsgBox(\"Der er ingen initieringsfil, den oprettes nu med standardværdier.\", 64, \"Medd. fra programstart.\") Open App.Path & \"\\jkfaerge.ini\" For Output As #1 Print #1, netsti Print #1, \"Standardværdier indsat \" & Date Print #1, \"2\" \'antal uger for automatisk sletning Print #1, \"1\" \'hvis sejler færge 1 Print #1, \"1\" \'hvis sejler færge 2 Print #1, \"True\" \'hvilken fartplan der åbnes med Print #1, \"False\" \'hvilken fartplan der åbnes med Print #1, \"5\" \'grænse for farveskift ved få ledige pladser Print #1, \"10\" \'sekunder mellem test for autoopdateringer Print #1, \"False\" \'om programmørens knapper vises ved åbning Print #1, \"ini 11\" \'disponibel Print #1, \"ini 12\" \'disponibel Print #1, \"ini 13\" \'disponibel Close #1 txtini(1).Text = \"Standardværdier indsat \" & Date \'(1) txtini(2).Text = \"2\" \'(2) ini(2) = \"2\" sletuge = ugenr - 2 \'(2) chksejler(0).Value = 1 \'(3) chksejler(1).Value = 2 \'(4) fs = 5 \'(7) opd = 10 \'(8) ini(9) = \"0\" \'(9) Programmørens knapper \'Hundested vælges som afgangshavn med vintersejlplan \'(5) optstart(0).Value = True optplan(0).Value = True tidfil = \"A01.dat\" knplan1_Click \'her indlæses afgangstider
GoTo nyini: End If
n = 0 On Error GoTo inifejl Open App.Path & \"\\jkfaerge.ini\" For Input As #1 Do While EOF(1) = False Line Input #1, ini(n) n = n + 1 If n >= 21 Then Exit Do Loop Close #1
If Len(ini(0)) > 5 Then netsti = ini(0)
\'oprettelse af bookdat.tid og lokaltid Open netsti & \"bookdat.tid\" For Output As #5 Print #5, Now Close #5 Open App.Path & \"\\lokal.tid\" For Output As #5 Print #5, Now Close #5
nyini: \'Data indsættes i ramme for redigering af initierings-data txtini(0).Text = netsti txtini(1).Text = ini(1) txtini(2).Text = ini(2)
\'antal uger for autosletning If ugenr < 12 Then sletuge = \"0\" & ugenr - 2 Else sletuge = ugenr - 2 If IsNumeric(ini(2)) Then If ugenr - Val(ini(2)) < 10 Then sletuge = \"0\" & ugenr - Val(ini(2)) Else sletuge = ugenr - Val(ini(2)) End If End If labsletuge.Caption = sletuge
If IsNumeric(ini(3)) Then chksejler(0).Value = Val(ini(3)) If IsNumeric(ini(4)) Then chksejler(1).Value = Val(ini(4))
\'Forberedelse af indlæsning af sejlplanernes afgangstider \'-----------------------------------------------------------------
jørn > jeg fatter ikke en brik af det du skriver der :) funktionerne: ini() og nyini() går jeg udfra at du har deklæret et andet sted? Kan jeg ikke få de funktioner der læse og skriver?
Til andre der løber ind i samme problem, det her er alt hvad i skal bruge: Option Explicit
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
Jeg programmerer ikke normalt i VB. Jeg er PHP og Delphi tilhænger men desværre skulle vi have VB i Datalogi på mit gymnasie og der skulle vi så løse en opgave med ini-filer. Derfor kunne jeg ikke bare bruge registry.
hehe nej :) Men havde det været en program jeg skulle have brugt til noget fornuftigt så ville jeg have gjordt noget helt tredje, gemt data i en MySQL database og programmeret det i Delphi.
x=0 Open App.Path & \"\\program.ini\" for Input As #1 \'eller c:\\windows\\ hvis du vil have filen dér Do while EOF(1) = False Line Input #1, inidata(x) x=x+1 Loop Close #1
Så har du de forskellige værdier (hvad det nu er !) i array\'et inidata, derpå må du jo anvende dem. Det kunne være formens placering på skærmen, stier til datafiler, tællere, farver eller hvad ved jeg.
Et eller andet sted skal disse værdier jo kunne sættes og gemmes. Hvis du har en frame eller form med indekserede tekstfelter så f.eks.:
Open app.path & \"\\program.ini\" for output as #1 For x=0 to 17 print #1, tekst1(x).text Next x Close #1
Hvis der altså ER 17 værdier.
Den eksisterende ini-fil overskrives fuldstændig, så det er vigtigt at de omtalte tekstfelter alle ajourføres med de respektive ini-værdier ved programstart, også de der ikke ændres i sessionen. Gælder det f.eks. tællere, farveindstillinger, placering af forme etc. kan det automatiseres i lukke-funktionen at der skrives til ini-filen hver gang. For at kunne anvende tal-værdier som tal, må anvendes funktionen Val forinden: Form1.top = Val(inidata(7))
Nu hører du ikke mere fra mig, jeg står af spørgsmålet. M.v.h. Jørn
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.