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