Hallo,
leider muss cih schon wieder eine Frage stellen.
Hier meine aktuelle Version:
0.9.26.2.Beta
FPC 2.2.2
Habe gerade eine kleine Anwendung fertig gestellt, die die Aufgabe hat einen Server mit einem Client via FTP abzugleichen. Solange ich nur in den Einstellungen oder in meiner Administration (csv File als Tabelle via TSDFDataset und TSDFDatasource) arbeite, kann ich mein Fenster verschieben, und es wird auch immer aktualisiert.
Wenn ich jedoch auf dem jeweiligen Server angemeldet bin, und überprüfe welche Dateien heruntergeladen werden sollen und welche nicht und die entsprechenden Dateien downloade, werden meine Fenster nicht mehr aktualisiert.
Ich habe zuerst versucht nur die sich ändernden Anzeigen (einige Labels) mit label.refresh neu anzeigen zu lassen, kein Effect. Dann habe ich versucht die Labels mit label.repaint neu anzeigen zu lassen, auch kein Effect.
Dann habe ich es mit der gesamten Form versucht, auch kein Effect, nein, dass stimmt so nicht ganz.
Jetzt bin ich in der Lage, mein Fenster zu verschieben, aber wenn ich das Fenster verschiebe, dann werden die Daten darauf nicht aktualisiert. Dafür habe ich ein 2. Fenster, dass genau an der Stelle liegt, wo es beim Start (vor dem verschieben) lag.
Das Venster, das ich verschoben habe aktualisiert nicht, dafür funktioniert hier das schließen des Programmes. Das Fenster, dass an dem alten Platz liegt, aktualisiert fleißig, aber hier kann ich keine Aktionen durchführen.
Hm, hab ich mir gedacht, mach ich ein neues Fester auf, dass nur zum anzeigen genutzt werden soll, lol, nun habe ich 4 Fenster auf dem Desktop.
Ich weiß wirklich nicht, woran das liegen kann.
Wenn mir hier jemand einen Tip geben könnte, währe dass schon sehr toll.
Mit freundlichem Gruß
Ralph
Fenster wird nicht richtig aktualisiert
-
- Beiträge: 145
- Registriert: So 22. Mär 2009, 07:48
- OS, Lazarus, FPC: WIN 11 (momentan )
- CPU-Target: 64 und 32Bit
- Wohnort: Hessen
- Kontaktdaten:
Fenster wird nicht richtig aktualisiert
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.
Re: Fenster wird nicht richtig aktualisiert
Welche Library benutz du denn für FTP?
Bekommst du Rückmeldungen (Fortschritt) vom Transfer?
Benutzt du separate Threads für den Download? Falls nicht, machst du Application.Processmessages bei den Rückmeldungen?
Bekommst du Rückmeldungen (Fortschritt) vom Transfer?
Benutzt du separate Threads für den Download? Falls nicht, machst du Application.Processmessages bei den Rückmeldungen?
-
- Beiträge: 145
- Registriert: So 22. Mär 2009, 07:48
- OS, Lazarus, FPC: WIN 11 (momentan )
- CPU-Target: 64 und 32Bit
- Wohnort: Hessen
- Kontaktdaten:
Re: Fenster wird nicht richtig aktualisiert
Ich benutze Synapse.
Ich habe Synapse folgendermaßen eingebunden:
Compiler Einstellungen fpr Projekt: --> andere Unit Dateien C:\Programme\lazarus\components\synapse\lib\
Mein Transfer sieht folgendermaßen aus:
Login --> Verzeichnis wechsel in das erforderliche Verzeichnis --> prüfen, ob die Datei local in gleicher Größe und mit gleichen Datum und Zeit vorhanden ist, wenn nicht, dann führe ich den Download durch und prüfe, ob ein Fehler aufgetaucht ist.
Danach kommt die nächste Aktion.
Getestet habe ich das nur mit wenigen Dateien 1000-2000. Hinterher werde ich damit ca 40.000 Dateien prüfen. Das Prüfen geht sehr schnell.
Das Kopieren dauert recht lange. Ist aber mit INET auch nicht schneller.
Einen Byte oder Bit fortschritt habe ich nicht gefunden.
Leider weis ich nicht, wie ich die threads aufteilen kann, das war der Grund ein 2. Fenster zu verwenden. ich bin halt doch blos ein Anfänger...
Habe gerade folgenden Link gefunden:
http://wiki.lazarus.freepascal.org/Mult ... n_Tutorial
Werde mich da mal etwas reinlesen. Ich denke, damit wid das Problem gelöst werden.
Hier ein Ausschnitt:
Mit freundlichem Gruß
Ralph
Ich habe Synapse folgendermaßen eingebunden:
Compiler Einstellungen fpr Projekt: --> andere Unit Dateien C:\Programme\lazarus\components\synapse\lib\
Mein Transfer sieht folgendermaßen aus:
Login --> Verzeichnis wechsel in das erforderliche Verzeichnis --> prüfen, ob die Datei local in gleicher Größe und mit gleichen Datum und Zeit vorhanden ist, wenn nicht, dann führe ich den Download durch und prüfe, ob ein Fehler aufgetaucht ist.
Danach kommt die nächste Aktion.
Getestet habe ich das nur mit wenigen Dateien 1000-2000. Hinterher werde ich damit ca 40.000 Dateien prüfen. Das Prüfen geht sehr schnell.
Das Kopieren dauert recht lange. Ist aber mit INET auch nicht schneller.
Einen Byte oder Bit fortschritt habe ich nicht gefunden.
Leider weis ich nicht, wie ich die threads aufteilen kann, das war der Grund ein 2. Fenster zu verwenden. ich bin halt doch blos ein Anfänger...
Habe gerade folgenden Link gefunden:
http://wiki.lazarus.freepascal.org/Mult ... n_Tutorial
Werde mich da mal etwas reinlesen. Ich denke, damit wid das Problem gelöst werden.
Hier ein Ausschnitt:
Code: Alles auswählen
aftp.List('',False);
aFTP.FtpList.Count;
for y:=0 to aFTP.FtpList.Count-1 do begin
if aFTP.FtpList.Items[y].Directory=False then begin
Progressbar1.Position:=Progressbar1.Position+1;
label1.Caption:= AnsiToUtf8(aFTP.FtpList.Items[y].FileName);
inc(nCount);
lcount1.Caption:=inttostr(nCount)+' Dateien geprüft';
if (aFTP.FtpList.Items[y].FileName <> '.') or (aFTP.FtpList.Items[y].FileName <> '..') then begin
if (FileExists(localdir+aftp.FtpList.Items[Y].FileName)=false) then begin
aftp.DirectFileName := localdir+aftp.FtpList.Items[Y].FileName;
aftp.DirectFile:=True;
Result := aftp.RetrieveFile(aftp.FtpList.Items[Y].FileName, False);
if Result = true then begin
cnewTime := FormatDateTime('DD.MM.YYYY HH:mm:ss', aftp.FtpList.Items[Y].FileTime);
newTime := StrToDateTime(cnewTime);
FileSetDate(localdir+aftp.FtpList.Items[Y].FileName , DateTimeToFileDate(newTime));
inc(nCountCopied);
Lcount3.Caption:=inttostr(nCountCopied)+' Dateien kopiert / ersetzt';
form1.Refresh;
form1.Repaint;
lcount1.Refresh;
lcount2.Refresh;
lcount3.Refresh;
Progressbar1.Refresh;
frminfo.lcount3.Caption:=inttostr(nCountCopied)+' Dateien kopiert / ersetzt';
frminfo.Refresh;
end else begin
showmessage(aFTP.FtpList.Items[y].FileName+' konnte nicht kopiert werden');
end;
end else begin
cDatumServer := FormatDateTime('DD.MM.YYYY HH:mm:ss', aftp.FtpList.Items[Y].FileTime);
t1:=aftp.FtpList.Items[Y].FileTime;
t2:=FileDateToDateTime(FileAge(localdir+aftp.FtpList.Items[Y].FileName)) ;
cDatumLocal := DateTimeToStr(FileDateToDateTime(FileAge(localdir+aftp.FtpList.Items[Y].FileName)));
if (t1<>t2) or
(FileSize(AnsiToUtf8(localdir+aftp.FtpList.Items[Y].FileName))<>aftp.FtpList.Items[Y].FileSize) then begin
aftp.DirectFileName := localdir+aftp.FtpList.Items[Y].FileName;
aftp.DirectFile:=True;
Result := aftp.RetrieveFile(aftp.FtpList.Items[Y].FileName, False);
if Result = true then begin
cnewTime := FormatDateTime('DD.MM.YYYY HH:mm:ss', aftp.FtpList.Items[Y].FileTime);
newTime := StrToDateTime(cnewTime);
FileSetDate(localdir+aftp.FtpList.Items[Y].FileName , DateTimeToFileDate(newTime));
inc(nCountCopied);
Lcount3.Caption:=inttostr(nCountCopied)+' Dateien kopiert / ersetzt';
form1.Refresh;
form1.Repaint;
end else begin
showmessage(aFTP.FtpList.Items[y].FileName+' konnte nicht kopiert werden');
end;
end;
end;
end;
end;
Mit freundlichem Gruß
Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.
Re: Fenster wird nicht richtig aktualisiert
Als erstes musst du mal ein Application.Processmessages einbauen. Dieses Refresh und Repaint Zeug braucht's nicht.
Bei längern downloads solltest du OnProgress Rückmeldung machen, Hearbeat ist auch ne Möglichkeit: http://synapse.ararat.cz/doku.php/public:howto
Threads wären noch besser, aber muss nicht unbedingt sein. Zwei Fenster sind jedenfalls noch nicht zwei Threads
Bei längern downloads solltest du OnProgress Rückmeldung machen, Hearbeat ist auch ne Möglichkeit: http://synapse.ararat.cz/doku.php/public:howto
Threads wären noch besser, aber muss nicht unbedingt sein. Zwei Fenster sind jedenfalls noch nicht zwei Threads
-
- Beiträge: 145
- Registriert: So 22. Mär 2009, 07:48
- OS, Lazarus, FPC: WIN 11 (momentan )
- CPU-Target: 64 und 32Bit
- Wohnort: Hessen
- Kontaktdaten:
Re: Fenster wird nicht richtig aktualisiert
Danke für die nette und schnelle Hilfe,
leider bin ich ab Morgen auf Dienstreise, aber vieleicht finde ich ja abends im Hotel die Möglichkeit mich darum zu kümmern.
Ich werde mir das mit den Mulithreads anschauen, und der Link für Synapse sieht auch sehr vielversprechend aus.
Mit freundlichem Gruß
Ralph
leider bin ich ab Morgen auf Dienstreise, aber vieleicht finde ich ja abends im Hotel die Möglichkeit mich darum zu kümmern.
Ich werde mir das mit den Mulithreads anschauen, und der Link für Synapse sieht auch sehr vielversprechend aus.
Mit freundlichem Gruß
Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.
-
- Beiträge: 145
- Registriert: So 22. Mär 2009, 07:48
- OS, Lazarus, FPC: WIN 11 (momentan )
- CPU-Target: 64 und 32Bit
- Wohnort: Hessen
- Kontaktdaten:
Re: Fenster wird nicht richtig aktualisiert
Danke Theo,
habe das Problem mit einem separatem Thread gelöst.
Mit freundlichem Gruß
Ralph
habe das Problem mit einem separatem Thread gelöst.
Mit freundlichem Gruß
Ralph