Autor Beitrag
[g4ndtimo]
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 30.10.02 11:28 
Hi,
ich habe ein kleines Problem.
Ich will ein Label über den Bildschirm laufen lassen.
Ich setze Label1.Top auf den unteren Bildschirmrand und mache dann folgendes:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  unten := 1024;
  oben := 1;
  i := unten;
  while i > oben do begin 
    dec(i);
    Label1.Top:=i;
    sleep(10);
  end;


Nur dummerweise dauert das dann einige Zeit und er zeigt das Label erst wieder, wenn die Schleife durchgelaufen ist. Also wenn es am oberen Punkt angekommen ist.

Jemand ne Idee, wie das besser gehen könnte ?

_________________
cu
[g4ndtimo]
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 30.10.02 11:36 
Ja, zwei Ideen hätte ich sogar:

1. Nimm einen Timer. Dadurch hat dein Programm die Chance, andere anfallende Nachrichten zu bearbeiten. Bei jedem Timer-Durchlauf setzt du die Variable "i" (in dem Fall sollte sie dann eine globale Variable sein) um Eins hoch, bis sie den Endpunkt erreicht hat. Hat sie das, deaktivierst du den Timer.

2. Versuch mit "Form1.Update" ein Update deines Formulars auszulösen. Ist aber bei der Timer-Lösung nicht notwendig.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 30.10.02 11:36 
Hallo,

der ist so mit dem Abarbeiten der Schleife beschäftigt, dass er nicht zum neuzeichnen des Fensters kommt. Du must Ihn also Luft dafür verschaffen.
Mit Application.ProcessMessages bringst du dein Programm dazu alle aufgelaufenden Windowsnachtichten (wie z.B. Neu Zeichnen) abzuarbeiten. Baue diese Also in deine Schleife ein:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  unten := 1024;
  oben := 1;
  i := unten;
  while i > oben do begin 
    dec(i);
    Label1.Top:=i;
    Application.ProcessMessages;
    sleep(10);
  end;


Gruß
Klabautermann
[g4ndtimo] Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 30.10.02 11:40 
Klasse,
Das mit dem ProcessMessages hat schon mal klasse funktioniert.
Jetzt muß ich nur noch das Flackern daraus kriegen, irgendwie kann ich mich da dumpf an meine frühen Pascal-Versuche erinnern, da musste man doch überprüfen, wo der grade mit dem Zeilenlauf ist. Geht das bei Delphi so einfach ?

[EDIT]
Hab's mit nem
ausblenden Quelltext
1:
DoubleBuffered := true;					

hinbekommen.
[/EDIT]

_________________
cu
[g4ndtimo]