// ich weiß nicht seit wann, aber Array-Konstanten kann man nun auch ohne Längenangabe deklarieren
// und damit geht dann auch AddStrings.
const
//Const_Autors: array[0..2] of string = ['a', 'b', 'c'];
Const_Autors: TArray<
string> = ['
a', '
b', '
c'];
Const_Publishers:
array of array of string = [['
d', '
g'], ['
e', '
h'], ['
f', '
i']];
procedure TForm3.InitComboBox(Table_toInit: TABSTable);
var
TFAutor, TFPublisher, TFRegal, TFFach: TField;
SLAutor, SLPublisher, SLRegal, SLFach: TStringList;
i: Integer;
S:
string;
begin
TFAutor := Table_toInit.FieldByName(Table_Bibo2.Labels_DB[1]);
// nicht in jedem Schleifendurchlauf erneut das Field suchen
TFPublisher := Table_toInit.FieldByName(Table_Bibo2.Labels_DB[5]);
TFRegal := Table_toInit.FieldByName(Table_Bibo2.Labels_DB[10]);
TFFach := Table_toInit.FieldByName(Table_Bibo2.Labels_DB[11]);
SLAutor := TStringList.Create(dupIgnore, True, False);
SLPublisher := TStringList.Create(dupIgnore, True, False);
SLRegal := TStringList.Create(dupIgnore, True, False);
SLFach := TStringList.Create(dupIgnore, True, False);
Table_toInit.DisableControls;
// GUI vorübergehend abhängen/deaktiveren, damit die nicht "sinnlos" bei jedem First/Next mitarbeitet.
try
{
for S in Const_Autors do // Einzeln übergeben, oder wie Nachfolgend als Eins
SLAutor.Add(S);
}
SLAutor.AddStrings(Const_Autors);
{
// seit Delphi 2009?
var Pub: array of string; // der Unter-Typ von Const_Publishers[i] -> oben, VOR begin definiert
for Pub in Const_Publishers do
SLPublisher.Add(Pub[1]);
// seit Delphi 10.4 nutzbar (war angelbich schon heimlich in 10.3 drin)
for var Pub in Const_Publishers do
SLPublisher.Add(Pub[1]);
}
for i := low(Const_Publishers)
to high(Const_Publishers)
do
SLPublisher.Add(Const_Publishers[i][1]);
{
// DisableControls erst an der Schleife und nicht ins übergeordnete Try-Finally integriert
Table_toInit.DisableControls;
try
Table_toInit.First;
while not Table_toInit.Eof do begin
...
Table_toInit.Next;
end;
Table_toInit.First;
finally
Table_toInit.EnableControls;
end;
}
Table_toInit.First;
while not Table_toInit.Eof
do begin
S := TFAutor.AsString.Trim;
if S <> '
'
then
SLAutor.Add(S);
S := TFPublisher.AsString.Trim;
if S <> '
'
then
SLPublisher.Add(S);
S := TFRegal.AsString.Trim;
if S <> '
'
then
SLRegal.Add(S);
S := TFFach.AsString.Trim;
if S <> '
'
then
SLFach.Add(S);
Table_toInit.Next;
end;
Table_toInit.First;
{
// Wozu überhaupt das Trim?
// "falsche" Daten sind einfach "ungültig" ... gehört in den Daten behoben und nicht in der Anzeige
Table_toInit.First;
while not Table_toInit.Eof do begin
if not TFAutor.IsEmpty then SLAutor.Add (TFAutor.AsString);
if not TFPublisher.IsEmpty then SLPublisher.Add(TFPublisher.AsString);
if not TFRegal.IsEmpty then SLRegal.Add (TFRegal.AsString);
if not TFFach.IsEmpty then SLFach.Add (TFFach.AsString);
Table_toInit.Next;
end;
Table_toInit.First;
// Man könnte auch einfach "Alles" hinzufügen (ohne if-not-empty) und anschließend das '' wieder entfernen.
//if SLAutor.Find('', i) then SLAutor.Delete(i);
// und vorher in der Schleife bloß die SLAutor.Add(TFAutor.AsString); oder SLAutor.Add(TFAutor.AsString.Trim);
}
ComboBox_AddBook_Author.Items.Assign(SLAutor);
ComboBox_AddBook_Publisher.Items.Assign(SLPublisher);
ComboBox_AddBook_Regal.Items.Assign(SLRegal);
ComboBox_AddBook_Fach.Items.Assign(SLFach);
finally
SLAutor.Free;
SLPublisher.Free;
SLRegal.Free;
SLFach.Free;
Table_toInit.EnableControls;
end;
end;