n00b, bestanden bewerken in delphi

Pagina: 1
Acties:

  • BM
  • Registratie: September 2001
  • Laatst online: 20:46

BM

Admin Softe Goederen
Topicstarter
Goedenavond allen :)

Ik ben zo'n beetje aan het beginnen met delphi, en nu wilde ik het volgende.
Ik heb een .ini bestand waarin wat instellingen bewaard worden van een programma(niet van mij :)).
Voorbeeldje:
code:
1
2
[speed]
speed = 345

Nu wilde ik een progje maken waarmee ik dit soort instellingen makkelijker kan veranderen.

Nu weet ik dus niet:
1) hoe ik een dialogje maak om een bestand te openen
2) hoe ik een regel uit dat bestand (waarin de instelling staat) in een string oid gezet krijg zodat ik kan bewerken
3) hoe ik daarna de string weer terug in het bestand kan krijgen

M'n hoop is voorlopig op jullie gevestigd
Veel vraagjes dat weet ik, maar voor een meer ervaren programmeur zullen ze een stuk makkelijker zijn dan voor mij

ps. ik heb de search gebruikt, vond alleen weinig bruikbaars

Xbox
Even the dark has a silver lining


Verwijderd

Nou das makkelijk met een inifile je kunt het volgende doen:

Maak een form met twee buttons en een TEdit. Zet onder button 1 de volgende code:
code:
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var
  IniFile : TIniFile;
begin
  IniFile := TIniFile.create('c:\options.ini');
  IniFile.WriteString('MijnTekstUit', 'Edit1',   Edit1.text);
end;

en onder button 2 de volgende code:
code:
1
2
3
4
5
6
7
procedure TForm1.Button2Click(Sender: TObject);
var
  IniFile : TIniFile;
begin
  IniFile := TIniFile.create('c:\options.ini');
  Edit1.TExt := IniFile.ReadString('MijnTekstUit', 'Edit1',   Edit1.text);
end;

En zet in je Uses het volgende erbij : IniFiles

En dan wijst de rest zichzelf nu kun je lezen en schrijven in je inifile.

succes verder

Verwijderd

relaxte functie! :P

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 23-07 15:18

Tim

Verder heeft delphi standaard een component om een open dialog aan te maken

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Voor instellingen opslaan/laden kun je ook het Register van Windows gebruiken, zie TRegister.

(is maar een tip)

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • BM
  • Registratie: September 2001
  • Laatst online: 20:46

BM

Admin Softe Goederen
Topicstarter
D32, dit kan ik zo'n beetje volgen, maar ik bedoel eigenlijk meer het volgende.
Ik ga in de ini opzoek naar
code:
1
2
[speed]
speed = 345

dan wil ik dat de waarde 345 in een labeltje op het scherm gezet word, met een andere labeltje voor de omschrijving (NIET speed) erbij. Daaronder staat een editveldje waarin ik een nieuwe waarde kan opgeven.

Btw, dat OpenDialog kan ik niet echt volgen, maar dat ligt denk ik aan mij. Ik tover zo'n ding tevoorschijn met OpenDialog1.Execute, maar wat er dan gebeurt als ik een bestand open :?

Xbox
Even the dark has a silver lining


Verwijderd

Je wilt uit jouw ini file lezen dan moet je dus de code
aanpassen.
code:
1
2
[speed]
speed = 345

En jij wilt dus de waarde van speed hebben dan wordt
de code als volgt
code:
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.Button1Click(Sender: TObject);
var
  IniFile : TIniFile;
  i : Integer;
begin
  i := 0;
  IniFile := TIniFile.create('c:\options.ini');
  i := IniFile.ReadInteger('Speed', 'Speed',  i);
  label1.caption := IntToStr(i);
  inifile.free;
end;

Uitleg ini file : IniFile.ReadInteger(Sectie, ID, Waarde);
1. Sectie is dus in jouw geval [speed]
2. ID is in jouw geval ook speed
3. Waarde is 345.

label1.caption is dus jouw label waar nu de waarde 345 in komt te staan. En omdat het nu om een getal gaat een ( Integer) moet dit even omgezet worden met de InToStr functie.

en wil je een ini file zelf kiezen dan moet je de volgende code nemen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Button1Click(Sender: TObject);
var
  IniFile : TIniFile;
  i : Integer;
begin
  i := 0;
  if OpenDialog1.Execute then
  begin
    IniFile := TIniFile.create(OpenDialog1.FileName);
    i := IniFile.ReadInteger('Speed', 'Speed',  i);
    label1.caption := IntToStr(i);
  end;
  inifile.free;
end;

Hopelijk kom je nu verder. En de rest staat verder zeker in de help kijk onder : Tinifile of Topendialog

Ja zoals afterlife al zegt moet je ook nog even Inifile.free erbij zetten.

Verwijderd

Enne... Vergeet niet IniFile weer te free-en naderhand.

  • BM
  • Registratie: September 2001
  • Laatst online: 20:46

BM

Admin Softe Goederen
Topicstarter
Zal hier zometteen eens verder mee gaan proberen, ziet er iig goed uit.
Alvast bedankt, als ik vragen heb, ik weet nu de weg :D

Xbox
Even the dark has a silver lining


  • BM
  • Registratie: September 2001
  • Laatst online: 20:46

BM

Admin Softe Goederen
Topicstarter
hij wil niet wat ik wil.
als ik de code zo standaard gebruik geeft ie als waarde ALTIJD 0 aan (standaardwaarde).
verander ik een gedeelte van de code
code:
1
i := IniFile.ReadString

Zodat ie dus een string uitleest ipv een integer, dan houdt ie ook gewoon de standaardwaarde (leeg dus). Snap er geen bal van :?

Xbox
Even the dark has a silver lining


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
heb i wel als string gedeclareerd dan?

  • BM
  • Registratie: September 2001
  • Laatst online: 20:46

BM

Admin Softe Goederen
Topicstarter
ja, en als ik i als integer of real declareer (code vanzelfsprekend ook aanpassen) dan werkt het ook niet, dan houd ie gewoon z'n standaardwaarde, oftewel 0 bij een integer, ofwel '' bij een string

Xbox
Even the dark has a silver lining


Verwijderd

als je een string wilt uitlezen moet je van "i" ook een string maken als je het in een losse variable wil dus dan krijg je :
code:
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
var
  IniFile : TIniFile;
  i : String;
begin
  IniFile := TIniFile.create('c:\options.ini');
  i := IniFile.ReadString('Speed', 'Speed',  i);
  label1.caption := i;
  inifile.free;
end;

Check de help ook even daar staan ook samples in hoe je moet werken met inifiles.

  • BM
  • Registratie: September 2001
  • Laatst online: 20:46

BM

Admin Softe Goederen
Topicstarter
letterlijke code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var
  IniFile : TIniFile;
  i : integer;
begin
  i:=0;
  if OpenDialog1.Execute then
  begin
    IniFile := TIniFile.create(OpenDialog1.FileName);
    i := IniFile.ReadInteger('[ Joy ]', 'force_feedback_damping',i);
    label1.caption := IntToStr(i);
  end;
end;

heb toch zowaar het id dat er weinig fout is, toch werkt het niet

Xbox
Even the dark has a silver lining


Verwijderd

Op maandag 17 december 2001 21:48 schreef SpeedAddict het volgende:
letterlijke code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var
  IniFile : TIniFile;
  i : integer;
begin
  i:=0;
  if OpenDialog1.Execute then
  begin
    IniFile := TIniFile.create(OpenDialog1.FileName);
    i := IniFile.ReadInteger('[ Joy ]', 'force_feedback_damping',i);
    label1.caption := IntToStr(i);
  end;
end;

heb toch zowaar het id dat er weinig fout is, toch werkt het niet
Wat je fout doet is dat je de brackets erbij
zet [ Joy ]. Dat moet niet dit is de juiste code :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var
  IniFile : TIniFile;
  i : integer;
begin
  i:=0;
  if OpenDialog1.Execute then
  begin
    IniFile := TIniFile.create(OpenDialog1.FileName);
    i := IniFile.ReadInteger('Joy', 'force_feedback_damping',i);
    label1.caption := IntToStr(i);
  end;
end;

  • BM
  • Registratie: September 2001
  • Laatst online: 20:46

BM

Admin Softe Goederen
Topicstarter
Heb de volgens jou juiste code erin geplakt, maar ik blijft als waarde 0 houden, terwijl de waarde toch echt 3000 is, weird errug weird :?

Xbox
Even the dark has a silver lining


Verwijderd

Nou ik weet niet wat je fout doet maar ik heb een sample inmekaar gedraaid dan moet het echt lukken en als dat niet lukt zou ik ff de help goed lezen in delphi.

edit:

link heb ik verwijderd file is offline


Succes

  • BM
  • Registratie: September 2001
  • Laatst online: 20:46

BM

Admin Softe Goederen
Topicstarter
Projectje zoals jij het hebt werkt idd perfect, maar als ik wat dingen ga veranderen (Opendialog, andere waardes) dan krijg ik dus nog steeds geen uitkomst :(

Xbox
Even the dark has a silver lining


  • BM
  • Registratie: September 2001
  • Laatst online: 20:46

BM

Admin Softe Goederen
Topicstarter
niemand een oplossing?

Xbox
Even the dark has a silver lining

Pagina: 1