Avatar billede phpsessid Nybegynder
04. juni 2004 - 20:36 Der er 19 kommentarer og
1 løsning

skrive og læse fra ini fil

Kan man få et program lavet i Delphi til at kommunikere med en form for ini-fil som f.eks. med Apache's httpd.conf

Således at ændringer i programmet kan gemmes fra gang til gang...
Avatar billede arne_v Ekspert
04. juni 2004 - 20:39 #1
Du kan da gemme og hente hvad som helst i en fil ved at henholdsvis skrive
og læse linierne helt normalt.

Derudover mener jeg også at der er et API for gemme og hente i lige præcis
INI fil formatet.
Avatar billede dkn Nybegynder
04. juni 2004 - 20:45 #2
eksempel på at gemme noget:

procedure TForm1.FormCreate(Sender: TObject);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    Top    := Ini.ReadInteger( 'Form', 'Top', 100 );
    Left    := Ini.ReadInteger( 'Form', 'Left', 100 );
    Caption := Ini.ReadString( 'Form', 'Caption', 'New Form' );
    if Ini.ReadBool( 'Form', 'InitMax', false ) then
      WindowState = wsMaximized
    else

      WindowState = wsNormal;
  finally
    TIniFile.Free;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action TCloseAction)
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    Ini.WriteInteger( 'Form', 'Top', Top);
    Ini.WriteInteger( 'Form', 'Left', Left);
    Ini.WriteString( 'Form', 'Caption', Caption );
    Ini.WriteBool( 'Form', 'InitMax', WindowState = wsMaximized );

  finally
    TIniFile.Free;
  end;
end;
Avatar billede phpsessid Nybegynder
04. juni 2004 - 21:16 #3
Kan ikke helt gennemskue det...

Hvad gør den?
Avatar billede stone Forsker
04. juni 2004 - 21:38 #4
den skriver formens placering til en inifile, + gemmer inifilen med samme navn som navnet på dit program.

når du creater din form bliver iniflen indlæst og formen placeret samme sted som da programmet blev afsluttet.
Avatar billede phpsessid Nybegynder
04. juni 2004 - 23:55 #5
giver fejl ved:

var
  Ini: TIniFile;

[Error] Unit1.pas(26): Undeclared identifier: 'TIniFile'
[Error] Unit1.pas(28): Missing operator or semicolon
[Error] Unit1.pas(28): Incompatible types: 'TComponent' and 'String'
Avatar billede stone Forsker
05. juni 2004 - 00:24 #6
den her virker hos mig

husk...
uses IniFIles

procedure TForm1.FormCreate(Sender: TObject);
var
  Inifile: TIniFile;
begin
  Inifile := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    Top    := IniFile.ReadInteger( 'Form', 'Top', 100 );
    Left    := IniFile.ReadInteger( 'Form', 'Left', 100 );
    Caption := IniFile.ReadString( 'Form', 'Caption', 'New Form' );
    if IniFile.ReadBool( 'Form', 'InitMax', false ) then
      WindowState := wsMaximized
    else
    WindowState := wsNormal;
    Finally
    IniFile.Free;
end;
  end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  Inifile: TIniFile;
begin
  IniFile := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    IniFile.WriteInteger( 'Form', 'Top', Top);
    IniFile.WriteInteger( 'Form', 'Left', Left);
    IniFile.WriteString( 'Form', 'Caption', Caption );
    IniFile.WriteBool( 'Form', 'InitMax', WindowState = wsMaximized );
    Finally
    iniFile.Free;
  end;
end;
Avatar billede phpsessid Nybegynder
06. juni 2004 - 15:38 #7
Hvordan skriver man en kommando til at trykke på en knap ?

Button1Click ???
Avatar billede stone Forsker
06. juni 2004 - 16:15 #8
//gem indstillingerne

procedure TForm1.GemClick(Sender: TObject);
var
  Inifile: TIniFile;
begin
  IniFile := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    IniFile.WriteInteger( 'Form', 'Top', Top);
    IniFile.WriteInteger( 'Form', 'Left', Left);
    IniFile.WriteString( 'Form', 'Caption', Caption );
    IniFile.WriteBool( 'Form', 'InitMax', WindowState = wsMaximized );
    Finally
    iniFile.Free;
  end;
end;
Avatar billede phpsessid Nybegynder
06. juni 2004 - 16:37 #9
yes yes...

Men ikke en knap der gør dette, men nogenlunde omvendt...

...står der Button1=1 i filen, så skal der trykkes på knappen...
Avatar billede dkn Nybegynder
06. juni 2004 - 17:32 #10
mærkelig ide men okay...

if IniFile.ReadInteger( 'DinSection', 'Button1', 0) = 1 then
  button1.click;
Avatar billede phpsessid Nybegynder
06. juni 2004 - 18:01 #11
og kan man så yderligere forenkle det hvis det kun er tal der skal skiftes fra tid til anden?

f.eks.

if IniFile.ReadInteger( 'Channels', '01', 0) = 1 then Button1.click;
if IniFile.ReadInteger( 'Channels', '02', 0) = 1 then Button2.click;
if IniFile.ReadInteger( 'Channels', '03', 0) = 1 then Button3.click;
if IniFile.ReadInteger( 'Channels', '04', 0) = 1 then Button4.click;
if IniFile.ReadInteger( 'Channels', '05', 0) = 1 then Button5.click;

om det ikke kan erstattes af en form for "for" eller "while"?
Avatar billede phpsessid Nybegynder
06. juni 2004 - 18:09 #12
og hvordan sættes denne linie:

  IniFile := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );

til at gemme i et defineret filnavn f.eks. settings.ini
Avatar billede dkn Nybegynder
06. juni 2004 - 19:15 #13
IniFile := TIniFile.Create( extractfilepath(Application.ExeName) + 'settings.INI' ) );
Avatar billede dkn Nybegynder
06. juni 2004 - 19:16 #14
dog lige en ")" for meget
Avatar billede phpsessid Nybegynder
07. juni 2004 - 16:38 #15
Ikke Project1settings.INI, kun settings.INI
Avatar billede phpsessid Nybegynder
21. juni 2004 - 01:03 #16
Takker for hjælpen.... lukker...
Avatar billede arne_v Ekspert
21. juni 2004 - 07:32 #17
Var det ikke en ide at have givet stone og/eller dkn nogen points ????
Avatar billede phpsessid Nybegynder
21. juni 2004 - 16:40 #18
Der er gået 14 dage uden svar på mit seneste indlæg... og ingen af dem har smidt et "svar"...
Avatar billede stone Forsker
21. juni 2004 - 17:47 #19
det er nemmere at lave en kommentar, da man ikke er sikker på om du kan bruge besvarelsen, og så er du fri for at sidde og afvise alle svar.
Avatar billede phpsessid Nybegynder
21. juni 2004 - 18:03 #20
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