Search code examples
delphidelphi-xe8

Read mutiple values from ini file into TCombobox


I have an ini file which contains the following:

[Colours]
1 = Red
2 = Blue
3 = Green
4 = Yellow

In my app I have a TComboBox which I would like to populate with the colours in the ini file.

Does anyone know how I'd go about this?

Thanks,


Solution

  • You can get a list of names in a section by using TIniFile.ReadSection() and then iterate to get the values:

    procedure TForm1.LoadFile(const AFilename: String);
    var
      I: TIniFile;
      L: TStringList;
      X: Integer;
      N: String;
      V: String;
    begin
      I:= TIniFile.Create(AFilename);
      try
        L:= TStringList.Create;
        try
          ComboBox1.Items.Clear;
          I.ReadSection('Colours', L);
          for X := 0 to L.Count-1 do begin
            N:= L[X]; //The Name
            V:= I.ReadString('Colours', N, ''); //The Value
            ComboBox1.Items.Add(V);
          end;
        finally
          L.Free;
        end;
      finally
        I.Free;
      end;
    end;
    

    As an alternative, you could also dump the name/value pairs within the section into a single TStringList and read each value using the string list's built-in capabilities...

    procedure TForm1.LoadFile(const AFilename: String);
    var
      I: TIniFile;
      L: TStringList;
      X: Integer;
      N: String;
      V: String;
    begin
      I:= TIniFile.Create(AFilename);
      try
        L:= TStringList.Create;
        try
          ComboBox1.Items.Clear;
          I.ReadSectionValues('Colours', L);
          for X := 0 to L.Count-1 do begin
            N:= L.Names[X]; //The Name
            V:= L.Values[N]; //The Value
            ComboBox1.Items.Add(V);
          end;
        finally
          L.Free;
        end;
      finally
        I.Free;
      end;
    end;
    

    On a side-note, Ini files do not have spaces on either side of the = sign, unless of course you want that space as part of the actual name or value.