Jak ukryć WebBrowser do czasu załadowania strony?

Jak ukryć WebBrowser do czasu załadowania strony?
RoyMartin
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:19
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):

Kopiuj
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

edytowany 1x, ostatnio: flowCRANE
flowCRANE
@RoyMartin - wiesz w jakim języku piszesz? Chyba nie, bo skoro piszesz w Delphi, to dlaczego wstawiasz kod w znaczniki kolorowania składni C++?
KA
Nie wiem o co przecież normalnie działa jak powinno.
RoyMartin
No właśnie nie działa...Danny też próbował i nie działa.
MI
  • Rejestracja:ponad 15 lat
  • Ostatnio:prawie 9 lat
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

edytowany 2x, ostatnio: misiakufal
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:4 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
RoyMartin
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:19
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:

Kopiuj
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...

edytowany 2x, ostatnio: RoyMartin
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około godziny
  • Lokalizacja:Tuchów
  • Postów:12171
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:

Kopiuj
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.