Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programm störung (https://www.delphipraxis.net/59929-programm-stoerung.html)

milanlu 30. Dez 2005 21:28


Programm störung
 
Hallo,
ich arbeite an einem Datei umbenennungs programm das programm lauft perfekt auser das beim umbenennen von mehr als 100 dateien sich nur noch der ProgressBar bewegt alles andere ist so zu sagen inactiv. man kann das fenster nicht bewegen, und es verbraucht 70 % von einem 3.2 GHz Prozessor mit HT. das kann nicht sein.
Ich bitte um hilfe.
Danke im Voraus

fkerber 30. Dez 2005 21:31

Re: Programm störung
 
Hi!

Und wie sollen wir helfen? Durch Raten?
{Bitte hier Spruch mit der Glaskugel in Reparatur einsetzen}

Du musst uns schon Code geben, falls er fehlerhaft ist (wovon ich dann mal ausgehe)
"Erholt" sich das Programm irgendwann wieder oder bleibt es so?


Ciao Frederic

Luckie 30. Dez 2005 21:33

Re: Programm störung
 
Lagere die Routine mit der Schleife zum Umbenennen in einen Thread aus.

Bernhard Geyer 30. Dez 2005 21:35

Re: Programm störung
 
Zitat:

Zitat von milanlu
ich arbeite an einem Datei umbenennungs programm das programm lauft perfekt auser das beim umbenennen von mehr als 100 dateien sich nur noch der ProgressBar bewegt alles andere ist so zu sagen inactiv. man kann das fenster nicht bewegen, und es verbraucht 70 % von einem 3.2 GHz Prozessor mit HT. das kann nicht sein.

Wieso nicht? Du wirst vermutlich evtl. noch einen Virenscanner haben der die umbenannten Dateien neu durchscannt. Außerdem wirst Du der GUI mittels Application.ProcessMessage keine Rechenzeit zum neuzeichnen geben, so daß auch dein Fenster nicht gezogen werden kann.

Zitat:

Zitat von fkerber
Und wie sollen wir helfen? Durch Raten?
{Bitte hier Spruch mit der Glaskugel in Reparatur einsetzen}

Ist gerade aus der Reparatur zurückgekommen. Mal schauen ob sie wieder funktioniert :-)

milanlu 30. Dez 2005 21:36

Re: Programm störung
 
hallo, es funktioniert wider gur wenn die funktion fertig ist.
Delphi-Quellcode:
var
  frmverschieben: Tfrmverschieben;
  lista: TListBox;
  eingabe, ausgabe: String;

implementation

uses Unit1, Unit2;


{$R *.dfm}
function proveri_pesmu(pesma: String): Boolean;
var
achars: set of char;
i, s, k, k1, anzahl: Integer;
begin
  achars := ['1','2','3','4','5','6','7','8','9','0','+','"','*','&','/','(',')','=','?','[',']','!','<','>','\','_'];
  anzahl := 0;
  Result := True;
  k := Length(pesma);
  k1 := k - 3;
  for s := 1 to k1 do
  begin
    if pesma[s] = '-' then
    begin
      anzahl := anzahl + 1;
    end;
  end;
  if anzahl <> 1 then
  begin
      Result := False;
      exit;
  end;
  for i := 1 to k1 do
  begin
    if ((pesma[i] in achars) or (pesma[1] = ' ')) then
    begin
      Result := False;
      exit;
    end
    else if ((pesma[i] = '-') and ((pesma[i-1] <> ' ') or (pesma[i+1] <> ' '))) then
    begin
      Result := False;
      exit;
    end;
end;
end;

procedure Tfrmverschieben.Button1Click(Sender: TObject);
var
pesma, pesma1, pesma2, pesma3, s, ordners, s1, fehler: String;
i, k: Integer;
begin
if frmverschieben.Showing then
begin
  if ((eingabe <> '') and (lista.Items.Count > 0) and (ausgabe <> '')) then
  begin
    prozess.Max := lista.items.Count;
    for i := 0 to lista.Items.Count-1 do
    begin
      pesma := lista.Items[i];
      ordners := ExtractFileDir(pesma);
      pesma1 := ExtractFileName(pesma);
      pesma3 := pesma1;
      if (proveri_pesmu(pesma1) = true) then
      begin
        pesma2 := LowerCase(pesma1);

        for k := 0 to Length(pesma2) do
        begin
            If ((k = 1) or (pesma2[k-1] = ' ')) then
            begin
              pesma2[k] := UpCase(pesma2[k]);
            end
            else
            begin
              pesma2[k] := pesma2[k];
            end;
        end;
        if (ordners[Length(ordners)] = '\') then
        begin
          s := '';
        end
        else
        begin
          s := '\';
        end;
        if (ausgabe[Length(ausgabe)] = '\') then
        begin
          s1 := '';
        end
        else
        begin
          s1 := '\';
        end;
        RenameFile(ordners + s + pesma3, ausgabe + s1 + pesma2);
      end
      else
      begin

        if (ordners[Length(ordners)] = '\') then
          begin
            s := '';
          end
        else
          begin
          s := '\';
          end;
        if (ausgabe[Length(ausgabe)] = '\') then
        begin
          s1 := '';
        end
        else
        begin
          s1 := '\';
        end;
        fehler := ausgabe + s1 + 'FEHLER\';
        ForceDirectories(fehler);
        RenameFile(ordners + s + pesma3, fehler + pesma3);
      end;
      pesma := '';
      pesma1 := '';
      pesma2 := '';
      prozess.Position := i;
      if i = lista.Items.Count-1 then
      begin
        Timer1.Destroy;
        frmverschieben.Close;
        if (MessageDlg('Alle Dateien sind kopiert!', mtInformation, [mbOK], 0) = mrOK) then
        begin
          prozess.Position := prozess.Min;
        end;
      end;
    end;

  end
else
  begin
    MessageDlg('Es sind keine Dateien zum Verschieben Vorhanden!', mtInformation, [mbOk], 0);
  end;
end;
end;

milanlu 30. Dez 2005 21:40

Re: Programm störung
 
das programm braucht so zu sagen eine pause zwichen zwei dateien. aber wie???

fkerber 30. Dez 2005 21:43

Re: Programm störung
 
Hi!

Also eine Pause zum Neuzeichnen?
Dann verwende Application.Processmessages.

Sinnvoller wäre ein Thread - siehe Luckies Posting.


Ciao Frederic

jim_raynor 30. Dez 2005 21:43

Re: Programm störung
 
Application.ProcessMessages könnte dir helfen. Allerdings muss man damit vorsichtig sein, und alle Button/Felder, in denen Aktionen ausgeführt werden, vorher deaktivieren und nach der Verarbeitung wieder aktivieren. Sonst kann der Benutzer immer wieder auf den Button 'Starten' klicken, auch wenn die Verarbeitung noch garnicht abgeschlossen ist.

milanlu 30. Dez 2005 21:45

Re: Programm störung
 
ich würde euch sehr dankbar sein wenn ihr mir das mahl erklären würdet. :wiejetzt: Application.ProcessMessages und Thread.
DANKE

fkerber 30. Dez 2005 21:47

Re: Programm störung
 
Hi!

Such mal hier im Forum und zu Threads gibts ein Tutorial auf Luckies HP.


Ciao Frederic


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz