WebBrowser i status ładowania

0

Cześć.
Mam aplikację napisaną w Delphi.
Wykorzystuje komponenet TWebBrowser (czyli w praktyce systemowy IE). Elegancko wyświetla to co ma wyświetlać.

Dorzuciłem też okienko statusu. Czyli by w trakcie ładowania pojawiało się okienko z napisem ładuję, a po załadowaniu znikało. I ogólnie mówiąc działa, ale nie do końca jak trzeba. Kiedy klikam sobie na link, to łąduje stronę, pojawia się status, kończy ładować, status znika. Wszystko jest ok. Ale gdy wykonam jakieś operacje działające na na JavaScript (np rozwinięcie drzewka w menu), a nie przeładowujące całą stronę, status się pojawia, ale nie znika.

Kod wygląda tak:

procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer);  
begin
  if( (Progress<ProgressMax)  then
    begin
      if (widac<>True) then
        begin
        widac:=True;
        PokazForme(Form4,True);
        end;
    end;
end;


procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);  
begin
  if CurDispatch = nil then
    CurDispatch := pDisp;
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);  
begin
  if (pDisp = CurDispatch) then
  begin
    PokazForme(Form4,False);
    widac:=False;
    CurDispatch := nil;
  end;
end;

Zastanawiam się jak uwzględnić tą sytuację, gdy takie operacje JavaScriptem powodują zmianę Progress, ale nie dają w efekcie nic w Complete, bo tak to chyba wygląda.

0

Udało mi się to zrobić.
Troszkę na około, ale działa.

Zapodaję, moze komuś się przyda:

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  WebBrowser1.Tag:=Pos('javascript:', LowerCase(URL))
end;

procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer);  
begin
  if( (Progress<ProgressMax) AND (WebBrowser1.Tag=0) ) then
    begin
      if (widac<>True) then
        begin
        widac:=True;
        PokazForme(Form4,True);
        end;
    end;
end;


procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);  
begin
  if CurDispatch = nil then
    CurDispatch := pDisp;
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);  
begin
  if (pDisp = CurDispatch) then
  begin
    PokazForme(Form4,False);
    widac:=False;
    CurDispatch := nil;
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1