Fenster wird nicht richtig aktualisiert

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Ralph59
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

Beitrag von Ralph59 »

Hallo,

leider muss cih schon wieder eine Frage stellen.

Hier meine aktuelle Version:
0.9.26.2.Beta
FPC 2.2.2

:wink: 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. :cry:
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.

:wink: Wenn mir hier jemand einen Tip geben könnte, währe dass schon sehr toll.

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Fenster wird nicht richtig aktualisiert

Beitrag von theo »

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?

Ralph59
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

Beitrag von Ralph59 »

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:

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.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Fenster wird nicht richtig aktualisiert

Beitrag von theo »

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 :wink:

Ralph59
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

Beitrag von Ralph59 »

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
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Ralph59
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

Beitrag von Ralph59 »

Danke Theo,

:wink: habe das Problem mit einem separatem Thread gelöst.

Mit freundlichem Gruß

Ralph

Antworten