2016-06-06 5 views
1

Ich habe eine INI-Datei, die den folgenden enthält:Lese mutiple Werte aus INI-Datei in TComboBox

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

In meinem app Ich habe eine TComboBox, die ich mit den Farben in der ini-Datei füllen möchte.

Weiß jemand, wie ich das machen würde?

Danke,

Antwort

5

Sie eine Liste von Namen in einem Abschnitt TIniFile.ReadSection() durch die Verwendung und dann durchlaufen, um die Werte zu bekommen bekommen:

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; 

Als Alternative, können Sie auch den Namen/Wert-Dump könnten Paare innerhalb der Sektion in einem einzigen TStringList und jeden Wert lesen Sie die String-Liste der integrierten Funktionen mit ...

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; 

auf einer Seite-note Ini-Dateien haben keine Leerzeichen auf beiden Seiten des = -Zeichen, es sei denn, Sie möchten diesen Bereich als Teil des tatsächlichen Namens oder Werts.

+0

'ComboBox1.Items' ist ein' TStrings', aber 'L' ein' TStrings' auch. Sie können 'L' wahrscheinlich' ComboBox1.Items' direkt zuweisen, ohne die Schleife. –

+0

@Rudy Die Schleife dient nicht nur zum Hinzufügen der Elemente, sondern auch zum Extrahieren der Werte. Ich hatte meine Antwort, um die Liste zuerst zuzuweisen, bis ich realisierte, dass die Liste tatsächlich die Namen enthält, nicht die Werte. –

+0

@JerryDodge: 'ReadSection()' extrahiert nur die Namen, daher müssen Sie 'ReadString()' separat aufrufen, um die Werte zu lesen. Wenn Sie 'ReadSectionValues ​​()' stattdessen verwenden, gibt es die Namen und Werte zur selben Zeit zurück, so dass Sie 'ReadString()' überhaupt nicht aufrufen müssen. Dann können Sie die 'TStrings' mit den Eigenschaften 'TStrings.Names []' und 'TStrings.ValueFromIndex []' nach Bedarf durchlaufen. –

1

versuchen dies, ohne die Datei zweimal zu lesen:

uses IniFiles;

procedure TForm1.Button1Click(Sender: TObject); 
var 
    lIni : TIniFile; 
    i: Integer; 
begin 
    lIni := TIniFile.Create('c:\MyFile.ini'); 
    try 
    lIni.ReadSectionValues('Colours', ComboBox1.Items); 
    for i := 0 to ComboBox1.Items.Count - 1 do 
     ComboBox1.Items[i] := ComboBox1.Items.ValueFromIndex[i]; 
    finally 
    FreeAndNil(lIni); 
    end; 
end; 
Verwandte Themen