Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem: die ausgabe soll verzoegert werden (https://www.delphipraxis.net/71717-problem-die-ausgabe-soll-verzoegert-werden.html)

pagan1900 19. Jun 2006 22:17


Problem: die ausgabe soll verzoegert werden
 
Hi !
zu meinem Problem:
Ich möchte das der Anwender meines programms die veränderungen sehen kann während der algorithmus durchläuft!
Nur wie kann man es erreichen, wenn ich sleep und co innerhalb der procedure verwende wartet das programm seine zeit und gibt dann das endergebnis aus!
wie kann mann die ausgabe der werte (siehe code KW_dist,pre,R)so gestalten das erst
die initialisierung dagestellt wird
dann die weiteren veränderungen!
die Aktuellesituauin soll auf stringgrid ausgegeben werden.


Delphi-Quellcode:
procedure Dijkstra_Pfeil ( var pre,kw_dist:TKnoten; var b,c:TPfeil;{Endknotennummernvektor, Bewertungsvektor}
                           var PN:TKnoten_plus_1_feld; {Pfeilnummernvektor}
                               Knotenzahl:integer; Start:integer;var stringgrid1:Tstringgrid); {Anzahl Knoten}
var locali,localj,min:integer;
    R:array [1..8] of boolean;
begin
   //Initialisierung
   for locali:=1 to Knotenzahl do
    begin
      pre[locali]:=0;
      stringgrid1.Cells[locali,1]:=inttostr(pre[locali]);
      kw_dist[locali]:=999;
      stringgrid1.Cells[locali,2]:=inttostr(kw_dist[locali]);
      R[locali]:=true;
    end;
   kw_dist[Startknoten]:=0;
    stringgrid1.Cells[locali,2]:=inttostr(kw_dist[startknoten]);
   R[Startknoten]:=true;
   while true do  {Wiederholung Schritt 1 + 2}
    begin
    //Schritt 2
      min:=999;
      for localj:=1 to Knotenzahl do
       if R[localj] and (kw_dist[localj] < min)
        then
         begin
           min:=kw_dist[localj]; locali:=localj; end;
        if min = 999
         then exit;
    //Schritt 3
      for localj:=PN[locali] to PN[locali+1]-1 do
       if R[b[localj]] or ( kw_dist[b[localj]] = 999 )
        then
         if kw_dist[locali] + c[localj] < kw_dist[b[localj]]
          then
           begin
             kw_dist[b[localj]]:= kw_dist[locali] + c[localj];
             pre[b[localj]]:=locali;
             R[b[localj]]:= True;
           end;
    R[locali]:= False;
    stringgrid1.Cells[locali,1]:=inttostr(pre[locali]);
    stringgrid1.Cells[locali,2]:=inttostr(kw_dist[locali]);
    end;  {Ende Schritt 1 und 2}
end;
könnt ihr mir helfen?

Union 19. Jun 2006 22:20

Re: Problem: die ausgabe soll verzoegert werden
 
Delphi-Referenz durchsuchenApplication.ProcessMessages kann da Wunder bewirken ;)

pagan1900 19. Jun 2006 22:39

Re: Problem: die ausgabe soll verzoegert werden
 
was bewirkt Application.ProcessMessages?
die ergebnisse mussten doch einem stringgrid oder so übergeben werden, damit
sich die tabelle je nach der aktuellen lage im algorithmus aktualisiert?

pacman1986 19. Jun 2006 22:50

Re: Problem: die ausgabe soll verzoegert werden
 
es bewirkt das die Veränderungen angezeigt werden sozusagen als zwischen status. dementsprechend solltest du diesen Befehl einfügen nachdem du in dein stringgrid schreibst. als alternative wären threads zu nennen

pagan1900 19. Jun 2006 23:02

Re: Problem: die ausgabe soll verzoegert werden
 
um wieviel zeit muss mann dann noch verzögern?
oder beinhaltet dieses schon eine "lesbare" verzögerung?

pacman1986 19. Jun 2006 23:29

Re: Problem: die ausgabe soll verzoegert werden
 
ach meinst du das wird komplett verändert ? dann würde ich zu delay raten zu finden in der codelib

pagan1900 19. Jun 2006 23:40

Re: Problem: die ausgabe soll verzoegert werden
 
Liste der Anhänge anzeigen (Anzahl: 2)
der code oben ist der dijkstra algorithmus

und er hatt ja mehere durchläufe (besonders bei schritt 2+3) bis er das energebnis hat
und diese zwischen werte sollen jeweis angezeigt werden bzw die im stringgrid "vorhandenen" werte sollen durch die ermittelten werte "aktualisiert" werden
(das müste doch dann wenn es klapt doch auch analog zu übertragen sein, wenn er die gezeichnete pfeile
durch andersfarbige pfeile ersetzen soll sprich z.B. gerade im angriff genommener pfeil (gelb), dieser pfeil stellt verbesserung da grun...)
im anhang die komplette unit

pacman1986 20. Jun 2006 00:54

Re: Problem: die ausgabe soll verzoegert werden
 
naja ist ja realtiv egal wenn du eine bestimmte zeit aussetzen willst dann musst du diese Luckies delay oder Hagens delay einfügen danach fügst du einfach die zeile
Delphi-Quellcode:
delay(100); //bsp 100 = 100 ms
am ende bei dir ein

Delphi-Quellcode:
   
    stringgrid1.Cells[locali,1]:=inttostr(pre[locali]);
    stringgrid1.Cells[locali,2]:=inttostr(kw_dist[locali]);
   // Hier
    end;  {Ende Schritt 1 und 2}
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 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