Avatar billede jette1 Nybegynder
12. februar 2001 - 10:45 Der er 7 kommentarer og
1 løsning

*.ini filer, placering

I VB hjælpen står der hvordan man kan gemme programmets indstillinger i Windows registry med noget der vist nok hed SaveSettings.
Jeg har imidlertid set programmer hvor ini-filen er placeret i dette programs mappe og ikke i Windows-biblioteket.
Hvordan gør man det? Og hvordan skriver man til en ini-fil?
Avatar billede tjacob Juniormester
12. februar 2001 - 11:18 #1
Du skriver/læser INI-filer med API-calls.
f.eks. GetProfileString henter en streng fra en INI-fil til læsning.
INI-filer giver større flexibilitet mht. til at gemme indstillinger mm., men du kan jo så risikere at brugeren sletter eller ændrer filen.
INI-filen kan for iøvrigt ligge hvorsomhelst på computeren, men det er mest almindeligt at lægge den i samme mappe -så kan du referere til den uden et path.
Det er dog sikrere at bruge registret, og her kan du jo bruge VBs egne funktioner som f.eks. SaveSettings, selvom jeg også her ville anbefale at benytte API calls, da de giver lidt flere muligheder.
Avatar billede jette1 Nybegynder
12. februar 2001 - 11:35 #2
Mange tak for dit svar :-)

Da jeg er newbie, er jeg ikke helt klar over hvad begrebet API-calls dækker over, men det er jo nok ikke noget man sådan lige kan forklare, så jeg må hjem og læse på lektien :-).

Men ville det være meget omstændeligt at give et lille kodningseksempel hvor en ini-fil gemmes med et par indstillinger i samme mappe som programmet?
Avatar billede joern Nybegynder
12. februar 2001 - 11:36 #3
Hej Jette.

Hvis du vælger ini-filen, kan du lægge den i c:\\windows og så regne med at brugeren har denne mappe.  Lægger du den samme sted som dit program, kan du ikke være sikker på at der peges på denne mappe, når du starter programmet fra startmenu eller genvej; kun hvis der er anført: \"start i\".

Ved åbning af ini-filen for læsning anføres så:

Open App.Path & \"\\minfil.ini\" For Input As #1
  Do while EOF(1) = False
    Line Input #1, data(a)
    a=a+1
  Loop
Close #1

Ligger filen i windows-mappen:  Open \"C:\\windows\\minfil.ini\" For Input As #1

Du bør gøre det muligt at redigere ini-filen fra dit program, selv om det også kan gøres fra en ascii-editor.
Der kan også automatisk skrives til ini-filen, f.eks. hvor på skærmen formen står når programmet afsluttes, således at  det åbner samme sted næste gang.

M.v.h.  Jørn
Avatar billede tjacob Juniormester
12. februar 2001 - 11:54 #4
Hej Jette

Joerns svar kan du sagtens bruge, hvis du ikke er tryg ved API calls. Men hvis du skal bruge mere avancerede funktioner, som f.eks. et program der har mange brugere (med brugernavne) og passwords, samt brugerindstillinger for selve programmet, bliver det hurtigt uoverskueligt at skulle redigere i hele filen. Her kommer API calls ind, da du med dem kun henter det afsnit f.eks. [Users]
du skal bruge fra INI-filen. API calls er dog et kapitel for sig selv, og kræver lidt studeren i MSDN. Her er et eksempel på API-kaldet GetProfileString:

Declare Function GetProfileString Lib \"Kernel32\" _
Alias \"GetProfileStringA\" _
(Byval sSection As String, _  ,Det afsnit du vil hente -[Users]
Byval sKey As String _  ,Den nøgle du vil ændre
Byval sDefault As String _    , Defaultnavn til nøglen
Byval sReturnString _    ,den streng du får ud
Byval lReturnSize As Long) As Long  , længden på strengen.

I en sub skal du hente funktionen til en variabel:

sub dit()
dim a

a = GetProfile.......

end sub

MVH Tjacob
Avatar billede jette1 Nybegynder
12. februar 2001 - 11:57 #5
Jeg siger tusind tak :-)
Avatar billede tjacob Juniormester
12. februar 2001 - 12:04 #6
Ups  Jeg har lavet en fejl!!!!:

GetProfileString gælder KUN for win.ini !!

Hvis du skal hente fra din egen ini :

GetPrivateProfileString

(Men som eksempel er den jo god nok)  :o)

Tjacob
Avatar billede jette1 Nybegynder
12. februar 2001 - 12:25 #7
Hej Tjacob

Det var lige nøjagtig noget i den stil jeg var ude efter. Jeg kunne heller ikke helt forstå Jørn\'s eksempel, da jeg vidste der var ét eller andet med sektioner, nøgler osv. Men jeg vidste ikke nok til at formulere spørgsmålet, så det var godt du lige kom mig til undsætning :-)

Jeg forstår det meste af dit eksempel, men jeg skal, som du også nævner, nok lige hjem og læse i MSDN. Nu ved jeg hvad jeg skal kigge efter, og det gør jo sagen noget nemmere :-)

Avatar billede joern Nybegynder
12. februar 2001 - 13:28 #8
Hej jette.

Hvis du alene benytter VB som frontend mod databaser á la Access, er du uvant med at åbne filer, du selv angiver placeringen af.  Den angivne kodestump skal stå i din form under \"load\" eller under \"activate\".

Alle linier i ini-filen læses ind i hver sin variabel:  data(index)

Du definerer at data(7) vedrører placering af formens top i twips og data (8) placeringen left.
  form1.top = data(7)
  form1.left = data(8)

Eller hvad som helst, der skal kunne ændres af brugeren.  Skal det ikke kunne ændres kan du jo bare skrive det ind i koden.

Jeg benytter i stor udstrækning ini-filer til at angive hvor brugeren placerer eksterne data som f.eks. billed- eller lydfiler.  http://www.jkfsoft.dk  De skal måske hentes fra en CD i drev L.
Hvis som jeg nævnte ovenfor ini-filen skal opbevare formens placering:

Du skal have gemt i en variabel (a) hvor mange linier der ialt blev indlæst fra ini-filen

Form_QueryUnload
  data(7) = form1.top
  data(8) = form1.left
  Open app.path & \"\\minfil.ini\" for output as #1
    for b = 0 to a
        print #1, data(b)
    next
  close #1

Håber ikke Tdaugaard finder fejl!

M.v.h.    Jørn 
M.v.h.  Jørn
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