AGB  ·  Datenschutz  ·  Impressum  







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

Pause während Schleifendurchlauf

Ein Thema von ChristianR · begonnen am 16. Nov 2010 · letzter Beitrag vom 16. Nov 2010
Antwort Antwort
ChristianR

Registriert seit: 4. Mai 2009
22 Beiträge
 
#1

Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 11:39
Delphi-Version: 5
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:
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;
Ich hoffe, das es so verständlich genug erklärt ist und mir jemand helfen kann
Habe wahrscheinlich grade wieder nur ein Brett vor dem Kopf.
Besten Dank Christian
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#2

AW: Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 11:44
Dein Suchwort heisst sleep
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 11:46
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ChristianR

Registriert seit: 4. Mai 2009
22 Beiträge
 
#4

AW: Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 11:48
Dein Suchwort heisst sleep
Delphi-Quellcode:
 begin
               TPanel(FindComponent('number'+inttostr(l))).Color := clRed;
               sleep(1000);
               TPanel(FindComponent('number'+inttostr(l))).Visible := false;
             end;
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?!? ^^
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#5

AW: Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 11:48
@Michael:
Hast gewonnen
Wo war wieder der rote Kasten?
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824

Geändert von Wolfgang Mix (16. Nov 2010 um 11:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 11:53
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?!? ^^
Begründung und Lösung habe ich dir in meinem Beitrag genannt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ChristianR

Registriert seit: 4. Mai 2009
22 Beiträge
 
#7

AW: Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 11:54
ja danke ich probiere es mal aus.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 11:55
Häng mal noch ein Application.ProcessMessages dazwischen....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 12:01
Ist in Delay schon enthalten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ChristianR

Registriert seit: 4. Mai 2009
22 Beiträge
 
#10

AW: Pause während Schleifendurchlauf

  Alt 16. Nov 2010, 12:08
Häng mal noch ein Application.ProcessMessages dazwischen....
Perfekt! Jetzt läuft es so, wie ich es haben wollte! Danke

Delphi-Quellcode:
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;
läuft Einwandfrei
  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 09:24 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