
{******************************************************************************
                                TRegIniFile
 ******************************************************************************}

constructor TRegIniFile.Create(const FN: String);
begin
  inherited Create;
  fFileName := FN;
  if fFileName<>'' then
   fPath := fFileName + '\'
  else
   fPath := '';
end;

procedure TRegIniFile.DeleteKey(const Section, Ident: String);
begin
	if not OpenKey(fPath+Section,true) then Exit;
	try
	 DeleteValue(Ident);
	finally
	 CloseKey;
	end;
end;

procedure TRegIniFile.EraseSection(const Section: string);
begin
 inherited DeleteKey(fPath+Section);
end;

procedure TRegIniFile.ReadSection(const Section: string; Strings: TStrings);
begin
	if not OpenKey(fPath+Section,false) then Exit;
	try
	 GetValueNames(Strings);
	finally
	 CloseKey;
	end;
end;

procedure TRegIniFile.ReadSections(Strings: TStrings);
begin
	if not OpenKey(fFileName,false) then Exit;
	try
	 GetKeyNames(Strings);
	finally
	 CloseKey;
	end;
end;

procedure TRegIniFile.ReadSectionValues(const Section: string; Strings: TStrings);
var
 ValList : TStringList;
 V : String;
 i : Integer;
begin
	if not OpenKey(fPath+Section,false) then Exit;
	ValList := TStringList.Create;
	try
	 GetValueNames(ValList);
	 for i:=0 to ValList.Count-1 do
	 begin
	   V := inherited ReadString(ValList.Strings[i]);
	   Strings.Add(ValList.Strings[i] + '=' + V);
	 end;
	finally
	 ValList.Free;
	 CloseKey;
	end;
end;

procedure TRegIniFile.WriteBool(const Section, Ident: string; Value: Boolean);
begin
	if not OpenKey(fPath+Section,true) then Exit;
	try
	 inherited WriteBool(Ident,Value);
	finally
	 CloseKey;
	end;
end;

procedure TRegIniFile.WriteInteger(const Section, Ident: string; Value: LongInt);
begin
  if not OpenKey(fPath+Section,true) then Exit;
 try
  inherited WriteInteger(Ident,Value);
 finally
  CloseKey;
 end;
end;

procedure TRegIniFile.WriteString(const Section, Ident, Value: String);
begin
   if not OpenKey(fPath+Section,true) then Exit;
 try
   inherited WriteString(Ident,Value);
 finally
   CloseKey;
 end;
end;

function TRegIniFile.ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
begin
	Result := Default;
	if not OpenKey(fPath+Section,false) then Exit;
	try
    if ValueExists(Ident) then
	    Result := inherited ReadBool(Ident);
	finally
	  CloseKey;
	end;
end;

function TRegIniFile.ReadInteger(const Section, Ident: string; Default: LongInt): LongInt;
begin
  Result := Default;
  if not OpenKey(fPath+Section,false) then Exit;
  try
    if ValueExists(Ident) then
      Result := inherited ReadInteger(Ident);
  finally
    CloseKey;
  end;
end;

function TRegIniFile.ReadString(const Section, Ident, Default: String): String;
begin
  Result := Default;
  if not OpenKey(fPath+Section,false) then Exit;
  try
    if ValueExists(Ident) then
      Result := inherited ReadString(Ident);
  finally
    CloseKey;
  end;
end;
