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