Einzelnen Beitrag anzeigen

gandime
(Gast)

n/a Beiträge
 
#1

Repeat-Schleife endet nach application.ProcessMessages?

  Alt 10. Jul 2007, 18:42
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
  Mit Zitat antworten Zitat