Einzelnen Beitrag anzeigen

Headi

Registriert seit: 17. Nov 2005
Ort: Weinfelden
101 Beiträge
 
Delphi 2007 Professional
 
#6

Re: programm friert ein, progress bar, leerzeichen ignoriere

  Alt 25. Dez 2005, 20:10
so hab jetzt mal dein code ausprobiert, aber der funktioniert irgendwie nicht richtig.
Folgende Fehlermeldung:
Zitat:
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00574807 in Modul 'Project1.exe'. Lesen von Adresse 00000000' aufgetreten.
mein code sieht so aus vielleicht hab ich ja was falsch gemacht

Delphi-Quellcode:
procedure extractComments(const ListWithComments, ListWithoutComments : TStringList);
var i : Integer;
begin
  // nachschauen, dass keine Referenz = nil ist
  if assigned(ListWithComments) and assigned(ListWithoutComments) then
    begin
      // löschen der Liste in die alle Zeilen ohne Kommentar kommen
      ListWithoutComments.Clear;
      // schauen ob es mindestens eine Zeile gibt
      if ListWithComments.Count > 0 then
        begin
          // übertragen der Einträge, dabei aber jeden Kommentar löschen
          for i := 0 to ListWithComments.Count - 1 do
            begin
              // wenn Zeile einen Kommentar enthält
              // > 1 -> keine Zeile die nur ein Kommentar ist wird kopiert
              if Pos(';', ListWithComments.Strings[i]) > 1 then
                begin
                  // kopieren des Teils der nicht zum Kommentar gehört
                  ListWithoutComments.Add(copy(ListWithComments.Strings[i], 1, Pos(';', ListWithComments.Strings[i])));
                end // if Pos(';', ListWithComments.Strings[i]) > 1
              // sonst die Zeile unverändert kopieren
              else
                begin
                  ListWithoutComments.Add(ListWithComments.Strings[i]);
                end;
            end; // for i := 0 to ListWithComments.Count - 1
        end; // if ListWithComments.Count > 0
    end; // if assigned(ListWithComments) and assigned(ListWithoutComments)
end;

procedure TForm1.Button1Click(Sender: TObject); //sfv file öffnen
var SLwithcomments: TStringList;
begin

  if OpenDialog1.Execute then
   begin
    SLwithcomments := TStringList.Create;
    SL.LoadFromFile(OpenDialog1.FileName); //sfv daten in stringlist speichern
    extractComments(SLwithcomments, SL);
    SL.Delimiter :=' ';

    SLSub := TStringList.Create;
    StringGrid1.RowCount:=SL.Count+1; //stringgrid zeilen erstellen

    for I := 0 to SL.Count - 1 do
     begin
      SLSub.DelimitedText := SL[I];

      StringGrid1.Cells[0, (1+(I))]:=SlSub[0]; //dateiname in stringgrid einfügen
      StringGrid1.Cells[2, (1+(I))]:=SlSub[1]; //hash wert in stringgrid einfügen
      StringGrid1.Cells[1, (1+(I))]:='ready'; //status gleich ready
     end;
   end;
end;



Zitat von Sir Rufo:
Zitat:
Ja klar, du kannst einen Thread anlegen. Aber Nebenläufigkeit hat ein paar eigene Tücken. Ist nicht wirklich trivial da alles zu berücksichtigen. Du findest eine Menge Tutorials zu Threads und Delphi, aber hier dürfte es reichen, wenn du von Zeit zu Zeit etwas rechenzeit freigibst.
Iwo, das ist mit Jedi (TJvThread) eigentlich kein grosses Geheimnis. Man darf nur nicht aus dem Thread schreibend direkt auf die Komponenten zugreifen (z.B. ProgressBar, Label, etc.).
Die einfachste Variante ist die Aktualisierung mit einem Timer zu lösen. Die Werte aus dem Thread schreibt man sich in eine globale Variable (oder auch Liste oder wie auch immer) und gibt diese dann mit dem Timer aus.

Es ist einfacher als man denkt und hilft ungemein
Könntest du das vielleicht ein bisschen genäuer erklären??
Ich habe wirklich noch nie einen thread erstellt.
Vorallem habe ich ja nur einen Befehl in meinem code, der rest überniehmt dann die componente!!
Achja der Befehl lautet so: SZCRC32File(FileName); Achja hab mal noch die componente angehängt und mein code ohne exe

Danke schon mal

mfg headi
Angehängte Dateien
Dateityp: zip sfv_937.zip (15,0 KB, 5x aufgerufen)
Dateityp: zip crc_133.zip (10,1 KB, 6x aufgerufen)
Pascal
  Mit Zitat antworten Zitat