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...
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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.
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;
Kan ikke helt gennemskue det... Hvad gør den?
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.
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'
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;
Hvordan skriver man en kommando til at trykke på en knap ? Button1Click ???
//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;
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...
06. juni 2004 - 17:32
#10
mærkelig ide men okay... if IniFile.ReadInteger( 'DinSection', 'Button1', 0) = 1 then button1.click;
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"?
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
06. juni 2004 - 19:15
#13
IniFile := TIniFile.Create( extractfilepath(Application.ExeName) + 'settings.INI' ) );
06. juni 2004 - 19:16
#14
dog lige en ")" for meget
07. juni 2004 - 16:38
#15
Ikke Project1settings.INI, kun settings.INI
21. juni 2004 - 01:03
#16
Takker for hjælpen.... lukker...
21. juni 2004 - 07:32
#17
Var det ikke en ide at have givet stone og/eller dkn nogen points ????
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"...
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.
21. juni 2004 - 18:03
#20
Kurser inden for grundlæggende programmering