Avatar billede idm Nybegynder
20. august 2002 - 18:17 Der er 13 kommentarer og
3 løsninger

huske det man ændrede sidst, med en *.ini fil

Jeg har lavet et program i C++ Borland 5:

Når man laver en ændring foreksempelt sætter et flueben, skal den kunne huske det næste gang man åbner programmet, disse informationen vil jeg have gemt i en setting.ini fil, er der nogle der kan lave dette til mig, koden skal også sige hvad linje den skal kigge i, da der er flere settings der skal stå i setting.ini

Zoree
Avatar billede idm Nybegynder
20. august 2002 - 18:17 #1
der må også gerne være sådan at den kan gemme nogle et bruger navn! når man logger ind
Avatar billede jpk Nybegynder
21. august 2002 - 08:49 #2
Du kan bruge WritePrivateProfileString og GetPrivateProfileString, du skal så bare konvertere alle de variable du vil gemme, til strings.
Det kan dog være Borland C++ miljøet tilbyder funktioner der ta'r andre typer argumenter end string (fx int, long, bool osv.) læigesom MFC..?
Avatar billede idm Nybegynder
21. august 2002 - 10:17 #3
jeg er ikke helt med på hvad du mener, det skal være sådan at:
Hvís jeg sætter et flueben, og trykker på en knap bagefter, skal knappen skrive i setting.ini filen, at der er sat et flueben...
Avatar billede jpk Nybegynder
21. august 2002 - 10:31 #4
I funktionen der kaldes, når du trykker på knappen kan du gøre noget lign.:

if(Button->Checked)
  WritePrivateProfileString(L"MySettings", L"MyVar1", "Checked", "L"C:\\MySettingsFile.ini");
else
  WritePrivateProfileString(L"MySettings", L"MyVar1", "Unchecked", "L"C:\\MySettingsFile.ini");
Avatar billede idm Nybegynder
21. august 2002 - 11:04 #5
det er bedere... jeg vil lige prøve dit script når jeg er hjemme, kig på forummet efter klokken 16.20, så acceptere jeg hvis det virker
Avatar billede soepro Nybegynder
21. august 2002 - 11:21 #6
Du skal bruge <inifiles.hpp>:

//---------------------------------------------------------------------------
#include <vcl.h>
#include <inifiles.hpp>
#pragma hdrstop

#include "settings.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmSETTINGS *frmSETTINGS;
//---------------------------------------------------------------------------
__fastcall TfrmSETTINGS::TfrmSETTINGS(TComponent* Owner)
        : TForm(Owner)
{
  // Open the .INI file, and read settings.
  INIFile = new TIniFile("C:\\Mysettings.ini");

  Edit1->Text            = INIFile.ReadString("Settings", "UserID", "ukendt");
  RadioGroup1->ItemIndex = INIFile.ReadInteger("Settings", "Logontype", 1);
} // Constructor.

__fastcall TfrmSETTINGS::~TfrmSETTINGS(TComponent* Owner)
        : TForm(Owner)
{
  // Save settings and "kill" .INI file.
  INIFile.WriteString("Settings", "UserID", Edit1->Text);
  INIFile.WriteInteger("Settings", "Logontype", RagioGroup1->ItemIndex;

  delete INIFile;
  INIFile = NULL;
} // Destructor.
Avatar billede soepro Nybegynder
21. august 2002 - 11:23 #7
Hvis du ikke angiver path (altså "C:\\" eller "\\MitBibl") i New TIniFile() constructoren, bliver din .ini fil lagt under C:\Windows (eller hvor du nu har installeret dit Windows, under XP dog under det specielle User bibliotek, som jeg ikke kan huske hvad hedder.)
Avatar billede idm Nybegynder
23. august 2002 - 09:22 #8
hvis man har en Form1 med en CheckBox1 og en Button1, når man så sætter et hak i CheckBox1 og trykker på Button1 skal den gemme det i Setting,ini som ligger i sammen mappe som programmet...

Er dette ikke mugligt, det skal være sådan at jeg kan bestemme hvad linjeg den skriver det i, da der skal stå flere instillenger i Setting.ini filer

Er alt dette mugligt?
Avatar billede idm Nybegynder
23. august 2002 - 09:23 #9
det kan også godt være et andet fil type det gør ikke noget, bare den hedder Setting.*
Avatar billede jpk Nybegynder
23. august 2002 - 09:41 #10
Med WritePrivateProfileString og GetPrivateProfileString behøver du ikke bekymre dig om hvilken linie de forskellig variable står på, det håndterer funktonerne!
Avatar billede idm Nybegynder
23. august 2002 - 09:45 #11
den laver fejl når jeg sætter denne kode ind under knappen

if(Button->Checked)
  WritePrivateProfileString(L"MySettings", L"MyVar1", "Checked", "L"C:\\MySettingsFile.ini");
else
  WritePrivateProfileString(L"MySettings", L"MyVar1", "Unchecked", "L"C:\\MySettingsFile.ini");
Avatar billede jpk Nybegynder
23. august 2002 - 09:49 #12
Du skal ikke have " umiddelbart før L

if(Button->Checked)
  WritePrivateProfileString(L"MySettings", L"MyVar1", "Checked", L"C:\\MySettingsFile.ini");
else
  WritePrivateProfileString(L"MySettings", L"MyVar1", "Unchecked", L"C:\\MySettingsFile.ini");

Jeg har lavet en trykfejl, undskyld...
Avatar billede soepro Nybegynder
23. august 2002 - 10:30 #13
Yeps - Det er netop "afsnit" og "navn" på indstillingen der er de første to parametre til ReadString() og WriteString() funktionerne.

Ovenstående giver en .INI fil der ser sådan her ud:

[Settings]
UserID=SOEPRO
Logontype=2
Avatar billede soepro Nybegynder
23. august 2002 - 10:34 #14
jpk >> Er WritePrivateProfileString ikke nøjagtigt det samme son en .INI file ??? Du angiver da også både "afsnit" og "navn" på hver gemt indstilling, så hvad er forskellen ? Er WritePrivateProfileString MVC udgaven af TIniFile ?
Avatar billede jpk Nybegynder
23. august 2002 - 10:47 #15
soepro >> Nej, det er std Windows udgaven...

MFC har dog også en version der hedder det samme og har ligeledes en WriteProfileInt
Avatar billede idm Nybegynder
02. september 2002 - 09:32 #16
Jeg lukker nu dette indlæg, Da jeg ikke længere arbejder på dette. jeg giver jeg 25 point vær da i har hjulpet med at finde et svar der kunne bruges.
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