![]() |
Delphi-Version: 5
Pause während Schleifendurchlauf
Guten Tag,
habe eine klitzekleine Frage bezüglich meines Programmes. Und zwar habe ich das Sieb des Eratosthenes programmiert. Der Algorithmus funktioniert auch soweit. Jetzt versuche ich das Prinzip optisch darzustellen. Hierbei möchte ich, dass der alle vielfachen einer gefundenen primzahl streicht. Habe dynamisch 100 Panels erzeugt. Die Zahlen bis 100 sind in einem Array gespeichert. Jedes mal wenn keine Primzahl beim schleifendurchlauf gefunden worden ist wird der wert im Array auf true gesetzt. Jetzt soll dieses Panel was true gesetzt worden ist rot gefärbt werden und nach einer bestimmten zeit dann ganz verschwinden.(visible := false;) und das ganze geht von vorne los, bis alle nicht Primzahlen makiert bzw unsichtbar gesetzt worden sind. Habe das jetzt so probiert aber wenn ich auf den Button drücke passiert einfach nichts. Wenn ich nur Farben oder Visible := false setze funktioniert es, aber es geht mir zu schnell. Ich möchte, das man es der Reihe nach sieht wie die nicht Primzahlen "gelöscht" werden. Hier mal mein Code:
Delphi-Quellcode:
Ich hoffe, das es so verständlich genug erklärt ist und mir jemand helfen kann :)
procedure TForm1.Button1Click(Sender: TObject);
var j,l,o:integer; begin j := 2; // while Schleife solange durchlaufen bis die Quadratzahl des Indexes // größer ist als die eingegebene Zahl while j*j <= 100 Do begin // prüfen ob der Arraywert bei j false ist, wenn ja handelt es sich um eine Primzahl if( gestrichen[j] = false) then begin // alle mehrfachen von j auf true setzen und damit als Primzahl ausschliessen l:=j*j; while l <= 100 do begin gestrichen[l]:=true; if gestrichen[l] = true then begin TPanel(FindComponent('number'+inttostr(l))).Color := clRed; sleep(1000); TPanel(FindComponent('number'+inttostr(l))).Visible := false; end; l:=l+j; end; end; j:= j+1; end; end; Habe wahrscheinlich grade wieder nur ein Brett vor dem Kopf. Besten Dank Christian |
AW: Pause während Schleifendurchlauf
Dein Suchwort heisst sleep
|
AW: Pause während Schleifendurchlauf
Besser Delay aus der Code-Lib. Sleep legt den ganzen Thread lahm, so dass gar nichts mehr passiert, auch kein neu zeichnen der Oberfläche.
|
AW: Pause während Schleifendurchlauf
Zitat:
Delphi-Quellcode:
das hatte ich ja schon mit drin. Problem ist aber das dann einfach gar nichts mehr passiert und ich über den Taskmanager das projekt beenden muss. Nur ich weiß nicht warum?!? ^^
begin
TPanel(FindComponent('number'+inttostr(l))).Color := clRed; sleep(1000); TPanel(FindComponent('number'+inttostr(l))).Visible := false; end; |
AW: Pause während Schleifendurchlauf
@Michael:
Hast gewonnen :-) Wo war wieder der rote Kasten? |
AW: Pause während Schleifendurchlauf
Zitat:
|
AW: Pause während Schleifendurchlauf
ja danke ich probiere es mal aus.
|
AW: Pause während Schleifendurchlauf
Häng mal noch ein Application.ProcessMessages dazwischen....
|
AW: Pause während Schleifendurchlauf
Ist in Delay schon enthalten.
|
AW: Pause während Schleifendurchlauf
Zitat:
Delphi-Quellcode:
läuft Einwandfrei
if gestrichen[l] = true then
begin TPanel(FindComponent('number'+inttostr(l))).Color := clRed; sleep(1000); Application.ProcessMessages; TPanel(FindComponent('number'+inttostr(l))).Visible := false; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr. |
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-2025 by Thomas Breitkreuz