--- ---

Here is an overloaded group of commands to read from or write to an INI file. The routines are overloaded based on the d parameter. s is the [GROUP], k is Left side (key), d is the default or new parameter and f is the filename to use.

    function GetIni(s,k: string; d: boolean; f: string=''): boolean; overload;
    var
      ini: TMemIniFile;
    begin
      Result := d;
      if f = '' then
      begin
        ini := TMemIniFile.Create(lowercase(ChangeFileExt(ParamStr(0),'.ini')));
      end
      else
      begin
        if not FileExists(f) then Exit;
        ini := TMemIniFile.Create(f);
      end;
      if ini.ReadString(s,k,'') = '' then
      begin
        ini.WriteBool(s,k,d);
        ini.UpdateFile;
      end;
      Result := ini.ReadBool(s,k,d);
      FreeAndNil(ini);
    end;

    function SetIni(s,k: string; d: boolean; f: string=''): boolean; overload;
    var
      ini: TMemIniFile;
    begin
      Result := d;
      if f = '' then
      begin
        ini := TMemIniFile.Create(lowercase(ChangeFileExt(ParamStr(0),'.ini')));
      end
      else
      begin
        if not FileExists(f) then Exit;
        ini := TMemIniFile.Create(f);
      end;
      ini.WriteBool(s,k,d);
      ini.UpdateFile;
      Result := ini.ReadBool(s,k,d);
      FreeAndNil(ini);
    end;

    function GetIni(s,k: string; d: integer; f: string=''): integer; overload;
    var
      ini: TMemIniFile;
    begin
      Result := d;
      if f = '' then
      begin
        ini := TMemIniFile.Create(lowercase(ChangeFileExt(ParamStr(0),'.ini')));
      end
      else
      begin
        if not FileExists(f) then Exit;
        ini := TMemIniFile.Create(f);
      end;
      if ini.ReadString(s,k,'') = '' then
      begin
        ini.WriteInteger(s,k,d);
        ini.UpdateFile;
      end;
      Result := ini.ReadInteger(s,k,d);
      FreeAndNil(ini);
    end;

    function SetIni(s,k: string; d:integer; f: string=''): integer; overload;
    var
      ini: TMemIniFile;
    begin
      Result := d;
      if f = '' then
      begin
        ini := TMemIniFile.Create(lowercase(ChangeFileExt(ParamStr(0),'.ini')));
      end
      else
      begin
        if not FileExists(f) then Exit;
        ini := TMemIniFile.Create(f);
      end;
      ini.WriteInteger(s,k,d);
      ini.UpdateFile;
      Result := ini.ReadInteger(s,k,d);
      FreeAndNil(ini);
    end;

    function GetIni(s,k: string; d: string; f: string=''): string; overload;
    var
      ini: TMemIniFile;
    begin
      Result := d;
      if f = '' then
      begin
        ini := TMemIniFile.Create(lowercase(ChangeFileExt(ParamStr(0),'.ini')));
      end
      else
      begin
        if not FileExists(f) then Exit;
        ini := TMemIniFile.Create(f);
      end;
      if ini.ReadString(s,k,'') = '' then
      begin
        ini.WriteString(s,k,d);
        ini.UpdateFile;
      end;
      Result := ini.ReadString(s,k,d);
      FreeAndNil(ini);
    end;

    function SetIni(s,k: string; d: string; f: string=''): string; overload;
    var
      ini: TMemIniFile;
    begin
      Result := d;
      if f = '' then
      begin
        ini := TMemIniFile.Create(lowercase(ChangeFileExt(ParamStr(0),'.ini')));
      end
      else
      begin
        if not FileExists(f) then Exit;
        ini := TMemIniFile.Create(f);
      end;
      ini.WriteString(s,k,d);
      ini.UpdateFile;
      Result := ini.ReadString(s,k,d);
      FreeAndNil(ini);
    end;