[TWebBrowser] Ładowanie html z tektu, blokuje inny komponent

0

Witam,

Ładuję sobie do TWebBrowser kod html z bazy danyc za pomocą procedurek znalezionych gdzieś w necie. Wyglądają one następująco:

procedure Tform1.LoadDocFromString(WB: TWebBrowser; const HTMLString: string);
var
  v: OleVariant;
  HTMLDocument: IHTMLDocument2; 
begin 
  CheckDocReady(WB); 
  HTMLDocument := WB.Document as IHTMLDocument2; 
  v := VarArrayCreate([0, 0], varVariant); 
  v[0] := HTMLString; 
  HTMLDocument.Write(PSafeArray(TVarData(v).VArray)); 
  HTMLDocument.Close;

end;

procedure Tform1.LoadBlankDoc(WB: TWebBrowser);
begin
  WB.Navigate('about:blank', EmptyParam, EmptyParam, EmptyParam, EmptyParam); 
  while WB.ReadyState <> READYSTATE_COMPLETE do
  begin
    Application.ProcessMessages;
    Sleep(0);
  end; 
end; 

procedure Tform1.CheckDocReady(WB: TWebBrowser);
begin 
  if not Assigned(WB.Document) then
    LoadBlankDoc(WB);     
end; 

I wszystko to śmiga fajnie oprócz jednej rzeczy. Otoż danę ładuję w następujący sposób
LoadDocFromString(WebBrowser2,'<body style="margin:0px; background-color:#E3E0DB;">

</body>');</p>

podczas TDataSetAfterScroll, który to dataset nawiguję za pomocą TDBGrid1.

I teraz pojawia się problem. Gdy już sobie zaczytam tekst do Twebbrowser i kliknę w ten komponent to wówczas bezpośrednio po klikaniu w TWebBrowser nie mogę kliknąć w DBGrid1. Tzn. sprawia on wrażenie jakby miał Enabled:=False;, ale przecież nie ma.
Dopiero kliknięcie w inny dowolny komponent na formie powoduje odblokowanie DBGrid1.
Czy ktoś wię z czym może być związany ten problem? Dodam, że na końcu mam dodane:

initialization
  OleInitialize(nil);

finalization
  OleUninitialize; 
0

Nie do końca rozumiem ale może to u Ciebie zadziała, lub pomoże w przyszłości.

Ja jak mam sporo danych to "blokuję" kontrolkę po wykonaniu "odblokowuje" ją:

  cxGrid2DBTableView1.DataController.BeginUpdate;
  try
    cxGrid2DBTableView1.DataController.ForEachRow( True, AddItemProcDefault );
    cxGrid2DBTableView1.DataController.DeleteSelection;
  finally
    cxGrid2DBTableView1.DataController.EndUpdate;

A do wczytywania z bazy to kiedyś używałem UWebBrowserWrapper.pas LoadFromStream i SaveToStream :)

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