Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ProgressBar ohne sleep aber mit delay (https://www.delphipraxis.net/70045-progressbar-ohne-sleep-aber-mit-delay.html)

Faceman 24. Mai 2006 08:32


ProgressBar ohne sleep aber mit delay
 
Hi.

Ich hab ein Problem und komme nicht weiter, bin auch noch Anfänger. Und zwar habe ich eine ProgressBar auf meiner Form, die nach 10 sekunden voll sein soll.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
  var i : Integer;
begin
  ProgressBar1.Min:=0;
  ProgressBar1.Max:=100;
  for i:=0 to 100 do
    begin
      ProgressBar1.Position:=i;
      Sleep(100);
    end;
end;
Das Problem ist nur hierbei, dass das Programm diese 10 sekunden lang lahm gelegt ist und man nichts machen kann. Ich habe irgendwo gelesen, dass man das mit delay machen kann, aber ich kenn mich da nicht mit aus. Schließlich will ich ja in den 10 sekunden noch das Programm bedienen bzw. etwas anklicken. Könnt ihr den Quelltext verbessern?

mbamler 24. Mai 2006 08:36

Re: ProgressBar ohne sleep aber mit delay
 
Zitat:

Zitat von Faceman
Hi.

Ich hab ein Problem und komme nicht weiter, bin auch noch Anfänger. Und zwar habe ich eine ProgressBar auf meiner Form, die nach 10 sekunden voll sein soll.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
  var i : Integer;
begin
  ProgressBar1.Min:=0;
  ProgressBar1.Max:=100;
  for i:=0 to 100 do
    begin
      ProgressBar1.Position:=i;
      Sleep(100);
    end;
end;
Das Problem ist nur hierbei, dass das Programm diese 10 sekunden lang lahm gelegt ist und man nichts machen kann. Ich habe irgendwo gelesen, dass man das mit delay machen kann, aber ich kenn mich da nicht mit aus. Schließlich will ich ja in den 10 sekunden noch das Programm bedienen bzw. etwas anklicken. Könnt ihr den Quelltext verbessern?


[delphi]procedure TForm1.FormCreate(Sender: TObject);
var i : Integer;
begin
ProgressBar1.Min:=0;
ProgressBar1.Max:=100;
for i:=0 to 100 do
begin
ProgressBar1.Position:=i;
Application.ProzessMessages;
Sleep(100);
end;
end;

Gruß
Matthias

Klaus01 24. Mai 2006 08:37

Re: ProgressBar ohne sleep aber mit delay
 
schau mal nach delay in der codelib, das macht das was Du willst.

Grüße
Klaus

mbamler 24. Mai 2006 08:41

Re: ProgressBar ohne sleep aber mit delay
 
Zitat:

Zitat von Faceman
Hi.

Ich hab ein Problem und komme nicht weiter, bin auch noch Anfänger. Und zwar habe ich eine ProgressBar auf meiner Form, die nach 10 sekunden voll sein soll.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
  var i : Integer;
begin
  ProgressBar1.Min:=0;
  ProgressBar1.Max:=100;
  for i:=0 to 100 do
    begin
      ProgressBar1.Position:=i;
      Sleep(100);
    end;
end;
Das Problem ist nur hierbei, dass das Programm diese 10 sekunden lang lahm gelegt ist und man nichts machen kann. Ich habe irgendwo gelesen, dass man das mit delay machen kann, aber ich kenn mich da nicht mit aus. Schließlich will ich ja in den 10 sekunden noch das Programm bedienen bzw. etwas anklicken. Könnt ihr den Quelltext verbessern?

Sorry ...
es muss natürlich so lauten

procedure TForm1.FormActivate(Sender: TObject);
var
i : Integer;
begin
ProgressBar1.Min:=0;
ProgressBar1.Max:=100;
for i:=0 to 100 do
begin
ProgressBar1.Position:=i;
Application.ProcessMessages;
Sleep(100);
end;
end;


Gruß
Matthias

Faceman 24. Mai 2006 08:43

Re: ProgressBar ohne sleep aber mit delay
 
Danke erstmal, werde es gleich ma ausprobieren, melde mich vielleicht später nochmal wenn es geklappt hat.

Faceman 24. Mai 2006 10:56

Re: ProgressBar ohne sleep aber mit delay
 
Ich hab schon ne andere Lösung gefunden, aber trotzdem tritt wieder einmal ein Problem auf, das ich ganz und gar nicht verstehen kann.
Hier mein Quelltext
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
timer3.Enabled:=true;
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
progressbar1.Position := progressbar1.Position + 1;
if progressbar1.position=97 then label16.caption:='3...';
if progressbar1.position=98 then label16.caption:='2...';
if progressbar1.position=99 then label16.caption:='1...';
  if progressbar1.Position = 100 then begin
    timer3.Enabled := false;
    close;
    end;
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
timer3.Enabled:=false;
end;

procedure TForm2.Timer4Timer(Sender: TObject);
begin
progressbar2.Position := progressbar2.Position + 1;
if progressbar2.position=97 then label16.caption:='3...';
if progressbar2.position=98 then label16.caption:='2...';
if progressbar2.position=99 then label16.caption:='1...';
  if progressbar2.Position = 100 then begin
    timer4.Enabled := false;
    close;
    end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
timer4.Enabled:=true;
end;
Ich habe 2 Formulare. Im ersten habe ich eine Progressbar1 und im zweiten Progressbar2, trotzdem zeigt er mir im zweiten Formular den gleichen Fortschritt wie in Formular1 an, obwohl ich ganz andere Timer und ProgressBars benutze. Und im ersten Formular schalte ich den timer3 durch enabled:=false aus. Warum habe ich denn immer noch den gleichen Fortschritt, ich versteh das einfach nicht. Liegt es vielleicht daran, dass das Formular1 die MAINFORM ist?

Faceman 24. Mai 2006 11:03

Re: ProgressBar ohne sleep aber mit delay
 
:?: Kann mir keiner dabei helfen?

freak4fun 24. Mai 2006 11:05

Re: ProgressBar ohne sleep aber mit delay
 
Auch wenn es nicht ganz zum Thema passt:

Delphi-Quellcode:
procedure TForm1.Timer3Timer(Sender: TObject);
begin
  with Progressbar1 do
    begin
      Position := Position + 1;
      Case Position of
        97 : Label16.caption := '3...';
        98 : Label16.caption := '2...';
        99 : Label16.caption := '1...';
        100: Timer3.Enabled := False;
      end;
    end;
  if not Timer3.Enabled then
    Close;
end;
[edit] :mrgreen:
Hab dann doch noch was zum Thema xD.

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
timer4.Enabled:=true;
end;
Wird beim starten des Programms ausgeführt. Du solltest das Timer4.Activate; im OnShow-Event des 2. Formulars machen. ;)

[/edit]

MfG
freak

Faceman 24. Mai 2006 12:09

ProgressBAr mit timer und zwei Formularen
 
Habt ihr nicht irgendeine Lösung für mein Problem? Ich hab nämlich keine Ahnng voran das liegen könnte. Bitte um Hilfe.

smudo 24. Mai 2006 12:37

Re: ProgressBar ohne sleep aber mit delay
 
Hallo,

die Lösung mit dem Timer von freak4fun ist doch ok.

Ansonsten könntest du natürlich noch mit Threads arbeiten. Aber das ist für dieses kleine Problemchen wohl überdimensioniert.

René

Faceman 24. Mai 2006 14:19

Re: ProgressBar ohne sleep aber mit delay
 
Das mit onshow versteh ich nicht ganz. Meinst du Form2.Onshow und dann den timer.enabled:=true; setzen oder gibt es auch timer.activate? wenn ich aber progressbar2.position:=0; setze dann kann ich doch nicht mehr progressbar2.position:=progressbar2.position +1; machen, weil delphi dann das (progressbar2.position:=0;) anerkennt und ausserdem würde dann nur ein balken vom fortschritt kommen, da ja progressbar2.position=0 ist und das so aussehen würde progressbar2.position:=0+1; oder sehe ich das falsch. wo sollte ich denn das progressbar2.position:=0; reinschreiben, beim timer oder formcreate?

freak4fun 24. Mai 2006 14:52

Re: ProgressBar ohne sleep aber mit delay
 
Zitat:

Zitat von Faceman
Das mit onshow versteh ich nicht ganz. Meinst du Form2.Onshow und dann den timer.enabled:=true; setzen oder gibt es auch timer.activate?

Beides. Das Form2.OnShow ist ähnlich dem Dorm2.OnCreate. Nur das es nicht ausgeführt wird, wenn das Formular erstellt wird, sondern erst wenn es angezeigt wird. Das Form2.OnShow wird jedes mal ausgeführt, wenn das Form2 angezeigt wird.
Timer.Activate und Timer.Enabled := True; machen das Gleiche. Beim Activate passiert glaub ich noch etwas mehr, aber das ist hier denke ich nebensächlich. ;)

Zitat:

Zitat von Faceman
wenn ich aber progressbar2.position:=0; setze dann kann ich doch nicht mehr progressbar2.position:=progressbar2.position +1; machen, weil delphi dann das ( progressbar2.position:=0; ) anerkennt und ausserdem würde dann nur ein balken vom fortschritt kommen, da ja progressbar2.position=0 ist und das so aussehen würde progressbar2.position:=0+1; oder sehe ich das falsch. wo sollte ich denn das progressbar2.position:=0; reinschreiben, beim timer oder formcreate?

Das das Progressbar2.Position := 0; nicht in den Tomer gehört ist richtig. Ich würde es allerdings zum Timer.Activate ins OnShow-Ereignis packen. ;)

Das OnShow-Ereignis bekommst du indem du das Form2 anklickst und im OI auf Ereignisse klickst. Da kannst du dann auf OnShow doppelklicken. ;)

Ich hoffe ich konnte dir helfen. Ich bin jetzt weg und hab erst in ein paar Tagen wieder Internet, also viel Erfolg.

MfG
freak :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz