Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Procedure zum befüllen von TComboBoxen
neuling321 - Sa 21.05.16 17:13
Titel: Procedure zum befüllen von TComboBoxen
Hallo
Ich möchte mittel dieser Procedure TComboBoxen befüllen.
Leider bekomme ich eine Fehlermeldung und weiss nicht genau warum.
Die Werte werden aus einer ini Datei geholt, das klappt soweit auch gut.
Es scheitert an den Namen der Comboboxen, die ich beim Aufruf der Procedure
mit übergebe.
Hier der Code:
Aufruf:
Delphi-Quelltext
1:
| fillcombo('combowertb', 'material', 'matwert'); |
Procdedure:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TForm1.fillcombo(ComboName, iniSection, iniKey : String); var I : integer; strIniKey : String; strIniKeyALL : TStringList;
begin strIniKeyALL:= tstringlist.Create;
ALLinOneIni := tinifile.Create('.\test.ini'); try; for I := 1 to 50 do begin strIniKey := ALLinOneIni.ReadString(iniSection, iniKey + inttostr(I),''); if strIniKey <> '' then begin strIniKeyALL.Add(strIniKey); end; end; finally ALLinOneIni.Free; end;
TComboBox(ComboName).Items.Assign(strIniKeyALL); <--- Hier muss der Fehler liegen
end; |
ini-Datei:
Delphi-Quelltext
1: 2: 3: 4: 5:
| [material] matname1=Eiche matwert1=1 matname2=Buche matwert2=2 |
Christian S. - Sa 21.05.16 17:43
Hallo,
Du kannst den String
Comboname nicht einfach in eine
TComboBox casten. Was Du brauchst, ist
FINDCOMPONENT.
Grüße
Christian
neuling321 - Sa 21.05.16 19:50
Danke schön, jetzt klappt es :-)
Nersgatt - Mo 23.05.16 08:55
Ich erlaube mir mal, Deine Procedure etwas umzuschreiben. Denn sie hat ein paar Probleme.
Vor alllem gibst Du strIniKeyAll nicht mehr frei, Du hast also ein Speicherleck.
Wenn Du den Aufruf etwas veränderst und nicht den Namen der Combobox übergibst, sondern eine Referenz auf die Combobox selber, würdest Du Dir auch FindComponent sparen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.fillcombo(AComboBox : TComboBox; iniSection, iniKey : String); var I : integer; strIniKey : String;
begin
ALLinOneIni := tinifile.Create('.\test.ini'); try for I := 1 to 50 do begin strIniKey := ALLinOneIni.ReadString(iniSection, iniKey + inttostr(I),''); if strIniKey <> '' then begin AComboBox.Items.Add(strIniKey); end; end; finally ALLinOneIni.Free; end;
end; |
Der Aufruf sähe dann so aus:
Delphi-Quelltext
1:
| fillcombo(combowertb, 'material', 'matwert'); |
So ist es etwas hübscher.
neuling321 - So 29.05.16 13:31
Hallo Jens
Ich bekomme nun bei AComboBox undeklarierter Bezeichner.
Habe ich da irgendwas vergessen?
Nersgatt - So 29.05.16 18:18
Hast Du auch den Teil im Interfaceteil angepasst?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!