«« Site Rescued »»

While the site is still going to move from its current host, a new site will now take its place. More Info.

The new site may have less content, but the core will now remain. And it will now play nicely with phones! Keep an eye on the DelphiDabbler Blog for news.

» Help

How to write a list of strings to the registry

   
Question
I want to save the contents of a string list to the registry and later read it back. How can I do this?

Save a list of strings to the registry. It will write each string as a key value with the key being the index of each string element and the value being the key.

procedure TDPRegistry.SaveStringListInRegistry(
  _RootKey: HKEY; _Localkey: String; Strings: TStrings
);
var
  TR: TRegIniFile;
  LStringIndex: Integer;
begin
  TR := TRegIniFile.Create('');
  try
    case _RootKey of // default is RootKey=HKEY_CURRENT_USER
      HKEY_CLASSES_ROOT,
      HKEY_CURRENT_USER,
      HKEY_LOCAL_MACHINE,
      HKEY_USERS,
      HKEY_PERFORMANCE_DATA,
      HKEY_CURRENT_CONFIG,
      HKEY_DYN_DATA: TR.RootKey := _RootKey;
    end;
    // make sure no entries for this section/ key
    TR.EraseSection(_Localkey);
    with TRegistry(TR) do
    begin
      if OpenKey(_Localkey, true) then
      begin
        try
          for LStringIndex := 0 to Strings.Count - 1 do
            WriteString (IntToStr(LStringIndex), Strings[LStringIndex]);
        finally
          CloseKey;
        end;
      end;
    end;
  finally
    TR.Free;
  end;
end;

{Get list of strings from registry}
procedure TDPRegistry.GetStringListFromRegistry(
  _RootKey: HKEY; _Localkey: String; Strings: TStrings
);
var
  TR: TRegIniFile;
  LStringIndex: Integer;
  RegKeyInfo: TRegKeyInfo;
begin
  Strings.Clear;  // start with no elements in string list
  TR := TRegIniFile.Create('');
  try
    case _RootKey of // default is  RootKey=HKEY_CURRENT_USER
      HKEY_CLASSES_ROOT,
      HKEY_CURRENT_USER,
      HKEY_LOCAL_MACHINE,
      HKEY_USERS,
      HKEY_PERFORMANCE_DATA,
      HKEY_CURRENT_CONFIG,
      HKEY_DYN_DATA: TR.RootKey := _RootKey;
    end;
    {TR.ReadSectionValues(_Localkey, Strings); doesn't work nicely because
    it returns strings as "1=Value", "2=Value"...}
    with TRegistry(TR) do
    begin
      if OpenKey(_Localkey, true) then
      begin
        try
          if (GetKeyInfo(RegKeyInfo)) then
          begin
            for LStringIndex := 0 to RegKeyInfo.NumValues - 1 do
              Strings.Add(ReadString(IntToStr(LStringIndex)));
          end;
        finally
          CloseKey;
        end;
      end;
    end;
  finally
    TR.Free;
  end;
end;
Original resource: The Delphi Pool
Author: Unknown
Added: 2009-08-24
Last updated: 2009-08-24

« Return to contents »