Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Repeat-Schleife endet nach application.ProcessMessages? (https://www.delphipraxis.net/95631-repeat-schleife-endet-nach-application-processmessages.html)

gandime 10. Jul 2007 18:42


Repeat-Schleife endet nach application.ProcessMessages?
 
Hi,
ich habe ein ganz komisches Problem!
Die Repeat-Schleife, sowie die gesamte Funktion wir bei mir nach "application.ProcessMessages;" beendet.
Ich habe extra einmal überall Break-Points gesetzt aber es sieht so aus als ob die gesamte Funktion mit der Übergeordneten Procedure beendet wurde.
Mein Code:
Delphi-Quellcode:
var
  b_nav_inuse:boolean;

procedure Tfrm_oberflaeche.nav(s_url,s_frame:string);// es werden zwei nav Proceduren ausgelöst mit nahe zu keine Zweitverzögerung (durch zwei Timer)
//Befehle: nav('die url','h'); sind zwar unterschiedliche urls aber der Frame is der selbe
var
  ov: OleVariant;
  i:integer;
begin
  if (b_nav_inuse=true) then //hier wird geguckt ob die Procedure gerade benutzt wird
  begin
    i:=0;//der zweite nav aufruf landet hier und wartet halt^^
    repeat
    begin
      sleep(50);
      i:=i+1;
      application.ProcessMessages;
    end;
    until (i>200);//er wartet auch noch wenn der erste nav aufruf "im nichts gelandet is"
    nav(s_url,s_frame);
  end
  else
  begin
    b_nav_inuse:=true;//der erste nav aufruf landet hier ;-)
    if (s_frame='b') then
    begin
      web.Navigate(s_url);
      if (web_wait(true)=false) then
      begin
        b_nav_inuse:=false;
        nav(s_url,s_frame);
      end;
    end
    else
    if (s_frame='h') then
    begin
      web.Navigate(s_url,'','Hauptframe',ov);
      if (web_wait(false)=false) then//bis dann diese Funktion aufgerufen wird -siehe unten weiter-
      begin
        b_nav_inuse:=false;
        nav(s_url,s_frame);
      end;
    end
    else
    if (s_frame='i') then
    begin
      web.Navigate(s_url,'','Inhalt',ov);
      if (web_wait(false)=false) then
      begin
        b_nav_inuse:=false;
        nav(s_url,s_frame);
      end;
    end;
    b_nav_inuse:=false;
  end;
end;

function Tfrm_oberflaeche.web_wait(b_main:boolean):boolean;
var
  i:integer;
begin
  i:=0;
  repeat
  begin
    i:=i+1;
    sleep(50);
    application.ProcessMessages;//es geht dann normal weiter bis dann hier Ende ist
  end;
  until (i>10);//es wird nichtmal Until überprüft/ausgelöst
  if (b_main=true) then//hier auch nichts sowie der gesamte folgende Code
  begin
    repeat
    begin
      i:=i+1;
      sleep(50);
      application.ProcessMessages;
    end;
    until (s_web='main') or (i>200);
    if (s_web='main') then
    begin
      result:=true;
    end
    else
    begin
      result:=false;
    end;
  end
  else
  begin
    repeat
    begin
      i:=i+1;
      sleep(50);
      application.ProcessMessages;
    end;
    until (s_web='sub') or (i>200);
    if (s_web='sub') or (s_web='main') then
    begin
      result:=true;
    end
    else
    begin
      result:=false;
    end;
  end;
end;
Ich hoffe ihr konntet meiner Erklärung folgen.
Woran liegt das?
Ich möchte bitte keine Antworten, wie z.b.: leg doch die Timer anders.


mfg
gandime

mkinzler 10. Jul 2007 18:52

Re: Repeat-Schleife endet nach application.ProcessMessages?
 
Bis du sicher, daß er nicht auswertet?
BTW.:Lass mal die überflüssigen begin..end innerhalb der Repeat..Until weg

Die Muhkuh 10. Jul 2007 18:53

Re: Repeat-Schleife endet nach application.ProcessMessages?
 
Hi,

deine Repeat heißt:

Wiederhole
[Code]
solange I größer als 200 ist.

Mach aus dem > ein < ;)

mkinzler 10. Jul 2007 18:57

Re: Repeat-Schleife endet nach application.ProcessMessages?
 
Zitat:

Zitat von Die Muhkuh
Hi,

deine Repeat heißt:

Wiederhole
[Code]
solange I größer als 200 ist.

Mach aus dem > ein < ;)

Nein ist doch ne Repeat..Until und keine While-Schleife

Die Muhkuh 10. Jul 2007 18:57

Re: Repeat-Schleife endet nach application.ProcessMessages?
 
:wall:

Stimmt, Entschuldigung :stupid:

DeddyH 10. Jul 2007 18:59

Re: Repeat-Schleife endet nach application.ProcessMessages?
 
In C-basierten Sprachen heißt es do - while, d.h. da gibt es eine Laufbedingung, bei repeat - until ist das eine Abbruchbedingung :warn:

gandime 10. Jul 2007 20:56

Re: Repeat-Schleife endet nach application.ProcessMessages?
 
kommt auf das selbe hinaus wenn ich der begin und end weg lasse
außerdem funktioniert es wenn "nur" einmal nav aufgerufen wird!


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