Kursor przy ładowaniu strony TWebBrowser

0

Witam.
Podczas ładowania strony (lub odświeżania) komponent TWebBrowser zmienia kursor w całym systemie (na tą chwilę)
na crAppStart (strzałka z klepsydrą). Po ustawieniu "visible" komponentu na "false" i umieszczeniu go na niewidocznym
panelu dzieje się to samo. Jest sposób, aby "zablokować" komponentowi/aplikacji zmianę kursora?

Pozdrawiam.

0

W przypadku TWebBrowser raczej nie da się w "normalny" sposób przynajmniej u mnie z niewiadomych przyczyn Subclassing ani SetWindowsHookEx nic nie daje (można sobie w komunikacie WM_SETCURSOR zwracać 0 do bólu).
Nie testowałem ale na http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_21917237.html jest coś związanego ze zmianą kursora w TWebBrowser wykorzystujące hook na funkcję WinApi SetCursor myślę że powinno zadziałać. Zresztą tam pytający był zadowolony z odpowiedzi.
Tam linki do potrzebnego modułu Win32Hook nie działają ale pewnie da się gdzie indziej wygooglać.

0

Widziałem ten link. Nie mam tam konta premium.

0

Wklej w google poniższy link i wtedy zobaczysz całą stronę, jednak niestety nie wiem czy odpowiedź tam podana pokrywa się z accepted solution, do której aby jednak się dostać potrzebne jest chyba niestety konto premium na tym serwisie.
http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_21917237.html

1

Olesio Twój sposób nie wszędzie działa (u mnie też nie) podaję kod:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, OleCtrls, SHDocVw, ComCtrls, Win32Hook;

type
  TForm1            =  class(TForm)
     ProgressBar1:  TProgressBar;
     WebBrowser1:   TWebBrowser;
     Button1:       TButton;
     Edit1:         TEdit;
     procedure      Button1Click(Sender: TObject);
     procedure      FormCreate(Sender: TObject);
  private
     // Private declarations
     FHook:         TCodeRewrite;
  protected
     // Protected declarations
  public
     // Public declarations
  end;

type
  TSetCursor        =  function(hCur: HCURSOR): HCURSOR; stdcall;

var
  Form1:            TForm1;
  DownCount:        Integer;
  OldSetCursor:     TSetCursor;

implementation
{$R *.DFM}

function HookSetCursor(hCur: HCURSOR): HCURSOR; stdcall;
begin

  // Check downloading
  if (Form1.WebBrowser1.ReadyState in [0, 4]) then
     // Call old function
     result:=OldSetCursor(hCur)
  else
     // Nothing
     result:=0;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin

  WebBrowser1.Navigate(Edit1.Text);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

  FHook:=TCodeRewrite.Create;
  FHook.Link(GetProcAddress(GetModuleHandle('user32'), 'SetCursor'), @HookSetCursor, @OldSetCursor);

end;

end.

W Twoim przypadku musisz trochę zmienić w funkcji HookSetCursor

0

"trochę pozmieniać" to znaczy jak to zrobić?

0

Nie wiem na pamięć ale ta linia

if (Form1.WebBrowser1.ReadyState in [0, 4]) then

ale kod po instrukcji jest chyba wykonywana też gdy WebBrowser pobiera dokument a wtedy Tobie zależy aby kursor się nie zmieniał więc raczej tu musisz pokombinować. Zapoznaj się z dokumentacją:
http://www.cryer.co.uk/brian/delphi/twebbrowser/twebbrowser_properties.htm

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