Jak ukryć WebBrowser do czasu załadowania strony?

0

Witam

Tak jak w temacie - jak mogę ukryć / ustawić przeźroczystość WebBrowser1 do czasu załadowania strony? Chodzi o to, że nie chcę oglądać białego prostokąta do czasu załadowania strony. Wygląda to mało gustownie...
WebBrowser1 utworzyłem na Panelu (Panel1) aby móc ukryć ramki WebBrowser1 - Panel1 ma pożądaną wielkość, i pozycję, natomiast znajdujący się na nim WebBrowser1 jest o łącznie 4px większy w poziomie i pionie, a następnie ucięty (Left/ Top -2). Takim sposobem nie widzę ramek, a WeBrowser1 pokrywa się z wielkością znajdującego się pod nim Panel1.

Wracając do tematu - ustawienie w opcjach Panel1 Visible na False skutkuje automatycznym ustawieniem niewidzialności także dla WeBrowser1 (jako że ten znajduje się na Panel1). Sądziłem więc, że skoro w ustawieniach ustawię Visible na False, to w evencie NavigateComplete2 ustawię Panel1.Visible:=True; i będzie po problemie, ale...Nie. NavigateComplete2 nie zmienia przeźroczystości Panel1 na True i w efekcie WebBrowser pozostaje niewidoczny cały czas.

Kod (w ustawieniach Panel1 Visible ustawione na False):

procedure TFMain.WebBrowser1NavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
 FMain.Panel1.Visible:=True;
end;

Jak mogę ukryć Panel1 i znajdujący się na nim WebBrowser1 do czasu załadowania się strony (by uniknąć białego prostokąta do czasu załadowania strony) ?

Ktoś podsunie jakieś pomysły? Będę wdzięczny
Pozdrawiam

zamiana znacznika <code class="cpp"> na <code class="delphi"> - Furious Programming

0

gdzieś kiedyś się natknąlem na informację, ze WebBrowser nie działa poprawnie jak jest niewidoczny, tzn nie odpala chyba zdarzenia NavigateComplete czy DocumentComplete. Poszukam źródła to tu wkleje.

ooo tutaj
http://support.microsoft.com/kb/259935

0

Jak WebBrowser będzie miał rozmiar 1x1 zaś ten jednopixelowy WebBrowser ustawisz kolo jakiegoś obrazku to użytkownik nawet się nie połapie.

0

Razem z kAzek'em porobiliśmy od cholery testów. Gdy ustawić w opcjach Panel1 Visible na True, WebBrowser1 (który jest na Panel1) też jest widoczny. Problemem jest tylko to białe tło które pokazuje się przed całkowitym pojawieniem strony.
Gdy ustawić w ustawieniach Panel1 Visible na False, znika też Webbrowser1. Po to więc chciałem skorzystać z:

procedure TFMain.WebBrowser1NavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
 FMain.Panel1.Visible:=True;
end;

Ale niestety zmiana widoczności nie następowała - Panel1 a i przez to WebBrowser pozostawały niewidoczne. Porobiłem kilka testów - usunąłem wpisy odpowiedzialne za rysowanie TŁA aplikacji o nieregularnych kształtach - 32bit bitmap'a. Czytany był więc kanał alpha na warstwach...Po usunięciu tej części kodu widoczność Panelu1 zaczęła działać poprawnie.

Muszę teraz zdecydować - nieregularne tło z 32bit bitmap'y czy...biały prostokąt w oknie Webbrowser do czasu załadowania strony. Jedne na drugim nie zadziała więc...Kupa.

A, próbowałem jeszcze ustawić ZA oknem Panel1 / Webbrowser1 fragment grafiki (osobny obrazek) z 24bit bitmap'y - standardowy, by Panel1 nie "leżał" bezpośrednio na 32bit bitmap'ie - nie pomogło...

0

Każdy komponent, który ma właściwość Visible ma także metody Show i Hide, więc zrób to jak człowiek:

FMain.Panel1.Show();

Druga sprawa - czy aż tak bardzo przeszkadza Ci białe tło w komponencie? Przecież pewnie wszystkie popularne przeglądarki tak właśnie ładują stronę - najpierw jest białe tło, potem dopiero strona jest uzupełniana - albo stopniowo, albo od razu całość (zależy od ustawień przeglądarki); Nie widzę więc powodu żeby się tym przejmować, a tym bardziej aby rezygnować z innych rzeczy tylko i wyłącznie dlatego, że tło na chwilę wskakuje białe.

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