AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wieso zeigt man mir nichts an?

Ein Thema von BorlanDelphiUser · begonnen am 8. Jun 2003 · letzter Beitrag vom 9. Jun 2003
Antwort Antwort
BorlanDelphiUser

Registriert seit: 10. Mär 2003
Ort: Waltersdorf
91 Beiträge
 
Delphi 5 Professional
 
#1

Wieso zeigt man mir nichts an?

  Alt 8. Jun 2003, 19:57
Hallo,
ich habe folgendes Problem, ich lasse eine for-schleife durchlaufen in der ein paar Funktionen (gegen Sleep ersetzt) ausgeführt werden und eine Prozessbar. Die Prozessbar funktionert einwandfrei aber die Labels werden erst nach dem Durchlauf angezeigt. Wer weis rat.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  Form1.ProgressBar1.Max:=10;

  Form1.Label3.Visible:=true;
  Form1.Label4.Caption:='0 / '+IntToStr(Form1.Listbox.Items.Count);
  Form1.Label4.Visible:=true;
  Form1.ProgressBar1.Visible:=true;

  for i := 0 to Form1.Listbox.Items.Count-1 do
  begin
    Form1.Label4.Caption:=IntToStr(i+1)+' / '+IntToStr(Form1.Listbox.Items.Count);
    Form1.ProgressBar1.StepIt;
    sleep(3000);
  end;
  Form1.Label3.Caption:='Fertig!'
end;
  Mit Zitat antworten Zitat
Benutzerbild von Specialwork
Specialwork

Registriert seit: 10. Jan 2003
Ort: Schwall
71 Beiträge
 
Delphi 8 Professional
 
#2
  Alt 8. Jun 2003, 20:45
Hallo BorlaDelphiUser,

Versuch es mal so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  Form1.ProgressBar1.Max:=10;
  Form1.Label3.Visible:=true;
  Form1.Label4.Caption:='0 / '+IntToStr(Form1.Listbox.Items.Count);
  Form1.Label4.Visible:=true;
  Form1.ProgressBar1.Visible:=true;

  for i := 0 to Form1.Listbox.Items.Count-1 do
  begin
    Form1.Label4.Caption:=IntToStr(i+1)+' / '+IntToStr(Form1.Listbox.Items.Count);
    Form1.ProgressBar1.StepIt;
    Application.ProcessMessages;
  end;
  Form1.Label3.Caption:='Fertig!
end;
Gruß, Tom
Thomas van Veen
Es gibt keine Probleme, nur Lösungen, auf die man nicht gleich kommt !
  Mit Zitat antworten Zitat
BorlanDelphiUser

Registriert seit: 10. Mär 2003
Ort: Waltersdorf
91 Beiträge
 
Delphi 5 Professional
 
#3
  Alt 8. Jun 2003, 20:50
SUPER es funktionert DANKE was bewirkt dieser Befehl "Application.ProcessMessages" ?
  Mit Zitat antworten Zitat
Benutzerbild von Specialwork
Specialwork

Registriert seit: 10. Jan 2003
Ort: Schwall
71 Beiträge
 
Delphi 8 Professional
 
#4
  Alt 8. Jun 2003, 23:57
Es verarbeitet Windowsbotschaften, die in der Warteschleife stehen.

Unter Anderem wuerden ohne Application.Processmessages gewisse Botschaften zum Neuzeichnen Deines Formulars erst nach der Schleife ausgeführt werden.

Gruß, Tom
Thomas van Veen
Es gibt keine Probleme, nur Lösungen, auf die man nicht gleich kommt !
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#5
  Alt 9. Jun 2003, 01:39
hi,

außerdem 'friert' sleep() das komplette programm ein, und macht nach dem sleep() erst mit dem verarbeiten der schleife weiter
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 9. Jun 2003, 03:10
Moin Chris,

nicht ganz. Sleep hält den Thread an in dem es aufgerufen wird. Bei einem Single Thread Programm hat das natürlich die von Dir beschriebene Auswirkung.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
BorlanDelphiUser

Registriert seit: 10. Mär 2003
Ort: Waltersdorf
91 Beiträge
 
Delphi 5 Professional
 
#7
  Alt 9. Jun 2003, 03:13
Das Sleep das komlette Programm anhält weis ich. Es hat aber auch mit den Funktionen nicht funktioniert. Und damit es nicht soviel Source wird hab ich die Funktionen gegen Sleep ersetzt.
  Mit Zitat antworten Zitat
praktiker

Registriert seit: 9. Jun 2003
Ort: Hesedorf
11 Beiträge
 
#8

Das ist es

  Alt 9. Jun 2003, 07:16
Setze vor Sleep die Anweisung
Application.processmessages;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9
  Alt 9. Jun 2003, 08:04
Nein. Er hat das sleep nur für uns reingemacht an die Stelle, wo er Funktionsaufrufe hat, damit wir das bnachvollziehen können - oder so.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:48 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