Also, so sieht mein Code für die Erstellung des Frames aus:
Delphi-Quellcode:
...
inc(FrameID);
DateiFrame := TFDatei.Create(PDateien);
DateiFrame.Parent := PDateien;
DateiFrame.LName.Caption := FileName;
if DateiGroesse < 1048576 then DateiFrame.LGroesse.Caption := RealToStr(DateiGroesse/1024) + ' KB';
if DateiGroesse > 1048576 then DateiFrame.LGroesse.Caption := RealToStr(DateiGroesse/1024/1024) + ' MB';
if DateiGroesse > 1073741824 then DateiFrame.LGroesse.Caption := RealToStr(DateiGroesse/1024/1024/1024) + ' GB';
DateiFrame.Name := 'Frame' + IntToStr(FrameID);
FrameNr := FrameID;
if FListe.Count <> 0 then DateiFrame.Top := (FListe.Count) * 65;
FListe.Add(DateiFrame);
DateiFrame.Show;
PDateien.Repaint;
DateiFrame.FStream := TFileStream.Create(target, fmCreate);
DateiFrame.TDatei.Enabled := true; //TDatei ist der Timer der für die Progressbar zuständig ist
Application.ProcessMessages;
try
IDS := TidStreamVCL.Create(DateiFrame.FStream);
try
with AContext.connection do
begin
try
SizeOfIncomingStream := Socket.ReadInteger;
Socket.ReadStream(IDS, SizeOfIncomingStream);
finally
Disconnect;
end;
end;
IDS.VCLStream.Position := 0;
finally
FreeAndNil(IDS);
end;
finally
for i := 0 to FListe.Count - 1 do
begin
DateiFrame := FListe[i];
if DateiFrame.Name = 'Frame' + IntToStr(FrameNr) then
begin
FreeAndNil(DateiFrame.FStream);
DateiFrame.TDatei.Enabled := false;
DateiFrame.Free;
Fliste.Delete(i);
end;
end;
...
So funktioniert es aber nicht.
Wenn ich aber statt
Delphi-Quellcode:
DateiFrame := TFDatei.Create(PDateien);
DateiFrame.Parent := PDateien;
DateiFrame := TFDatei1;
schreibe und den Frame schon zur Designzeit aufs Formular ziehe, dann gehts.
Die Datei wird auch ordnungsgemäß gespeichert und alles, nur bei der Progressbar tut sich nix.
Wo liegt denn hier der Fehler? Ich hoffe ihr könnt mir helfen, langsam weis ich nicht mehr weiter.