Вы должны использовать TIniFile.ReadSections
, чтобы получить список всех названий разделов, а затем вы можете просмотреть их и прочитать отдельные PROFILE_NAME
из каждого из этих разделов.(Я предпочитаю TMemIniFile
, так как TIniFile
основан на функциях WinAPI напрямую и иногда имеет проблемы с сетевыми дисками при попытке обновления с новыми значениями. TMemIniFile
также работает кроссплатформенно, когда вы получаете XE2
.)
Я создаю TMemIniFile
и TStringList
и освобождаю их, но если вы используете их несколько раз, вы, вероятно, захотите создать их в OnCreate
вашей формы и освободить их в FormClose
вместо;таким образом, у вас будет список имен разделов, которые соответствуют элементам в ComboBox
, когда вы захотите получить доступ к остальным элементам в событии OnClick
, чтобы заполнить остальную часть формы.
var
Sections: TStringList;
Ini: TMemIniFile;
s: string;
begin
Sections := TStringList.Create;
try
Ini := TMemIniFile.Create('YourIniFile.ini');
try
Ini.ReadSections(Sections);
for s in Sections do
ComboBox1.Items.Add(Ini.ReadString(s, `PROFILE_NAME`, `Empty`);
finally
Ini.Free;
end;
finally
Sections.Free;
end;
end;
Чтобы упростить привязку к элементам в ComboBox
, объявите новую целочисленную переменную (i
в моем фрагменте ниже) и измените цикл for
на это (убедитесь, что выне сортируйте Sections
- пусть ComboBox
обрабатывает сортировку!):
for i := 0 to Sections.Count - 1 do
begin
s := Ini.ReadString(Sections[i], 'PROFILE_NAME', 'Empty');
ComboBox1.Items.AddObject(s, TObject(i));
end;
Чтобы снова получить имя раздела, когда пользователь щелкает элемент списка:
procedure TForm1.ComboBox1Click(Sender: TObject);
var
i: Integer;
SectionName: string;
begin
// Get the Sections item index we stored above
i := Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]));
// Get the associated Sections section name
SectionName := Sections[i];
// Use the retrieved section name to get the rest of the values
ProfileNameEdit.Text := Ini.ReadString(SectionName, 'PROFILE_NAME', '');
ProfileDataEdit.Text := Ini.ReadString(SectionName, 'PROFILE_DATA', ''); // etc
end;