Ich habe den Fehler gefunden, aber noch nicht die Lösung. Es liegt an meinem mehrdimensionalem Array.
Bei fmMain.OnCreate rufe ich eine Routine auf, die ein
CSV File einliest und in ein mehrdimensionales Array schreibt. Das sieht so aus:
Delphi-Quellcode:
function GetLanguages: Boolean;
var
Txt : String;
LstValues,
LstFile : TStringList;
i, cnt, j,
FillCnt : Integer;
begin
Result := false;
if not FileExists(ChangeFileExt(Application.ExeName, '.lng')) then
Exit;
TraceFile(DateTimeToStr(Now()) + ' - ' + TRACESYS + ': Sprachdatei wird eingelesen');
// LanguageFile einlesen
LstValues := TStringList.Create;
LstFile := TStringList.Create;
try
LstFile.Delimiter := ';';
LstValues.Delimiter := ';';
LstFile.Clear;
LstFile.LoadFromFile(ChangeFileExt(Application.ExeName, '.lng'));
Txt := LstFile.Strings[0];
GetValues(Txt, LstValues);
myLangList.CommaText := LstValues.CommaText;
myLangList.Delete(0);
SetLength(myLangValues, LstFile.Count, LstFile.Count); // Speicher für Spracharray reservieren: array of array of String
cnt := 0; // Zähler für den ValueIndex
for i := 1 to LstFile.Count - 1 do
begin
Txt := LstFile.Strings[i];
GetValues(Txt, LstValues);
while LstValues.Count > (myLangList.Count+1) do
LstValues.Delete(LstValues.Count - 1);
FillCnt := (myLangList.Count+1) - LstValues.Count;
for j := 0 to LstValues.Count - 1 do
begin
if LstValues.Strings[j] = '' then
myLangValues[cnt, j] := LstValues.Strings[0]
else myLangValues[cnt, j] := LstValues.Strings[j];
end;
if FillCnt > 0 then
begin
for j := LstValues.Count to myLangList.Count do
myLangValues[cnt, j] := LstValues.Strings[0];
end;
Inc(cnt);
end;
finally
LstFile.Free;
LstValues.Free;
end;
end;
Wenn ich diese Routine nicht verwende habe ich keine Probleme. Ich habe bereits behoben, dass falls eine Zeile nicht alle Werte wie die erste hat, dann fülle ich mit dem ersten Wert auf (das ist eine ID).
nichts desto trotz bekomme ich hierbei eine
exception.