AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TThread: Wie eine Prodedure von Form1 in Thread bringen?
Thema durchsuchen
Ansicht
Themen-Optionen

TThread: Wie eine Prodedure von Form1 in Thread bringen?

Ein Thema von Helmi · begonnen am 14. Dez 2004 · letzter Beitrag vom 24. Mär 2005
 
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#1

TThread: Wie eine Prodedure von Form1 in Thread bringen?

  Alt 14. Dez 2004, 15:06
Hallo,

ich hab folgende Procedure, der in der Form1 liegt.

Diesen möchte ich nun in einen Thread bringen.

Nur wird in diese Procedure eine erzeugte Progressbar benutzt, Strings aus einer ListView gelesen, Dateien kopiert, etc.

Was muss ich beachten, wenn ich diese Procedure in einen Thread bringen will?

Code:
procedure TForm1.Updaten;
var
  Anzahl, i, DateiNr, Info_Code: Integer;
  QuellDatei, Speicherort, Bezeichnung, Datei_Name, SpeicherDatei: String;
  QuellDatei_vorhanden, QuellDatei_unbenutzt, Speicherort_vorhanden,
  Speicherort_Datum_gleich, Speicherort_Datum_aelter, Speicherort_ueberschreiben,
  Datei_kopieren: Boolean;
  PB_Rect: TRect;

begin
  //Variablen leeren
  Info_Code := 0;

  //Variablen beschreiben
  Speicherort_ueberschreiben := CheckBox_Speicherort_ueberschreiben.Checked;

  //Anzahl der ListView-Einträge
  Anzahl := ListView_Dateien.Items.Count;

  //erste Seite anzeigen
  PageControl.ActivePageIndex := 0;

  //Komponenten disablen
  EnDisableComponents(false);

  for i := 0 to Anzahl - 1 do
    with ListView_Dateien do
      begin
        //Wenn die Form beendet wird dann die Schleife unterbrechen
        If Form_schliessen then
          break;

        //Dateinummer angeben
        DateiNr := i + 1;

        //Quell-Datei, Speicherort und Bezeichnung aus ListView auslesen
        QuellDatei   := Items.Item[i].SubItems.Strings[0];
        Speicherort  := Items.Item[i].SubItems.Strings[1];
        Bezeichnung  := Items.Item[i].SubItems.Strings[2];

        //Speicherort mit einem Backslash enden lassen
        Speicherort          := IncludeTrailingPathDelimiter(Speicherort);

        //prüfen ob die Quell-Datei vorhanden ist
        QuellDatei_vorhanden := FileExists(QuellDatei);

        //prüfen ob die Quell-Datei nicht benutzt wird
        QuellDatei_unbenutzt := not IsFileInUse(QuellDatei);

        //prüfen ob der Speicherort vorhanden ist
        Speicherort_vorhanden := DirectoryExists(Speicherort);

        //Dateinamen für Speicherort auslesen
        Datei_Name           := ExtractFilename(QuellDatei);

        //Dateinamen an den Speicherort anhängen, sollte eine Bezeichnung vorhanden
        //sein, dann wird diese angehängt
        If Bezeichnung <> '' then
          SpeicherDatei  := Speicherort + Bezeichnung
        else
          SpeicherDatei  := Speicherort + Datei_Name;

        //Datum prüfen
        If QuellDatei_Vorhanden and FileExists(SpeicherDatei) then
          begin
            Speicherort_Datum_gleich := DateiDatum(QuellDatei) = DateiDatum(SpeicherDatei);
            Speicherort_Datum_aelter := FileAge(SpeicherDatei) > FileAge(QuellDatei);
          end
        else
         begin
            Speicherort_Datum_gleich := false;
            Speicherort_Datum_aelter := false;
          end;

        //prüfen ob der Speicherort überschrieben werder darf
        If Speicherort_ueberschreiben then
          Speicherort_Datum_aelter := false;

        //prüfen ob die Checkbox in der ListView angeklickt wurde
        Datei_kopieren   := Items.Item[i].Checked;

        If Datei_kopieren and QuellDatei_vorhanden and QuellDatei_unbenutzt and
        Speicherort_vorhanden and not Speicherort_Datum_gleich and
        not Speicherort_Datum_aelter then
          begin
            //ListView nach rechts scrollen
            SendMessage(Handle, WM_HSCROLL, SB_RIGHT, 0);

            //kurze Wartezeit
            sleep(500);

            //Progressbar in der jeweiligen Zeile in der Spalte fünf erzeugen
            PB_Rect := Items[i].DisplayRect(drBounds);

            with PB_Rect do
              begin
                Left   := Left + Columns[0].Width + Columns[1].Width +
                                  Columns[2].Width + Columns[3].Width;

                Right  := Left + Columns[4].Width - 1;
                Bottom := Bottom - 1;
              end;

            //ProgressBar beschreiben
            with PB_Status do
              begin
                BoundsRect := PB_Rect;
                Visible    := true;
                Position   := 0;
              end;

            //ProgressBar an die ListView übergeben
            Items[i].Data := PB_Status;

            try
              //
              Application.ProcessMessages;

              //Datei kopieren
              CopyFileWithProgressBar(QuellDatei, SpeicherDatei, PB_Status, true);

              //Code 1
              Info_Code := 1;

              //kurze Wartezeit
              sleep(1000);
            finally
              //Progressbar verstecken
              PB_Status.Visible := false;
            end;
          end
        else
          begin
            If not Datei_kopieren then
              //Code 6
              Info_Code := 6
            else
              If not QuellDatei_vorhanden and not Speicherort_vorhanden then
                //Code 4
                Info_Code := 4
              else
                If not QuellDatei_vorhanden and Speicherort_vorhanden then
                  //Code 3
                  Info_Code := 3
                else
                  If QuellDatei_vorhanden and not Speicherort_vorhanden then
                    //Code 2
                    Info_Code := 2
                  else
                    If Speicherort_Datum_gleich then
                      //Code 5
                      Info_Code := 5
                    else
                      If Speicherort_Datum_aelter then
                        //Code 7
                        Info_Code := 7
                      else
                        If not QuellDatei_unbenutzt then
                          //Code 8
                          Info_Code := 8;
          end;

        //
        ListViewInfos(ListView_Dateien, i, 3, Info_Code);

        try
          Application.ProcessMessages;
        except
          //Meldung anzeigen
          MessageDlg(Msg3, mtInformation, [mbOK], 0);
        end;
      end;

  //Komponenten enablen
  EnDisableComponents(true);
mfg
Helmi
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz