Delphi Label ändert seine beschriftung nicht.

Nico25394

Lieutenant
Registriert
Juli 2009
Beiträge
562
Hallo,
erstmal bitte nicht lachen, ich habe noch nicht viel erfahrung mit programmieren.
Ich versuche ein kleines programm zu schreiben mit dem sich eine progressbar füllt, und paralell dazu der fortschritt als zahl über ein Panel ausgegeben wird.
die Progressbar läuft auch perfect aber das problem ist, dass das Panel welches den fortschritt anzeigen sollte, diesen erst nachdem das ganze zu ende gelaufen ist anzeigt. es ist als ob die while schleife für diesen befehl ignoriert wird.


ich hoffe ihr könnt helfen.

mfg Nico25394


hier mein Quellcode:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, StdCtrls;

type
TForm1 = class(TForm)
Progressbar1: TProgressBar;
Button2: TButton;
Label1: TLabel;
Label3: TLabel;
Panel1: TPanel;
procedure Button2Click(Sender: TObject);
private
i:integer;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
Progressbar1.Position:=0;
i:=0;
while Progressbar1.Position<100 do
begin
Progressbar1.Position:= Progressbar1.Position +20;
i:=i+200;
Panel1.caption:=inttostr(i);
end;
Form1.Color:=clred;
end;

end.
 
Zuletzt bearbeitet:
Hi,

setze doch zum Debuggen einfach mal einen Breakpoint an die Stelle, die vermeintlich übersprungen wird. Ich könnte mir aber vorstellen, dass die Änderungen an dem Label einfach nicht gezeichnet werden, evtl kommt da etwas nicht hinterher bei der GUI.

Probiere doch folgendes: Lass den Progressbar nicht rendern sondern benutze einfach Zahlen, die der Reihe nach (z.B. jede Sekunde) in das Label geschrieben werden. Wenn das klappt oder nicht klappt sehen wir weiter ;)

VG,
Mad
 
das mit den zahlen läuft ja an sich ganz normal das ist ja das komische...
 
Du gibts Windows in der Schleife keine Chance die Anzeige zu aktualisieren.
Ein "application.processmessages" am Ende der Schleife lässt Deine Applikation kurz pausieren und gibt Windows die Chance alle Windowsmessages abzuarbeiten.

also etwa so:
PHP:
begin
 Progressbar1.Position:=0;
 i:=0;
 while Progressbar1.Position<100 do
 begin
 Progressbar1.Position:= Progressbar1.Position +20;
 i:=i+200;
 Panel1.caption:=inttostr(i);
application.processmessages;
 end;
 Form1.Color:=clred;
 end;

Sonst noch mal nach "application.processmessages" googlen bzw. in der Online Hilfe nachschauen; dort wird es erklärt.

Glückwunsch zur Wahl von Delphi: Das ist immer noch (oder jetzt bei Embarcadero wieder) eine tolle Entwicklungsplattform.
 
danke für die antworten. das "application.processmessages" war die lösung ;)


mfg Nico25394
 
Hi,

och Jungs, nicht gleich alles verraten :) Hättet ihm doch Zeit geben können erstmal zu probieren...vielleicht wäre er selber drauf gekommen :)

Aber naja, jetzt ist's schon rum.

VG,
Mad
 
Zurück
Oben