Einzelnen Beitrag anzeigen

Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#16

AW: Ungültige Zeigeroperation

  Alt 8. Apr 2011, 15:52
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.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat