Guten Morgen,
ich benutze die WebBrowser-Komponente jetzt schon mehrfach als HTML Viewer um diverse Reports anzuzeigen und diese zu formatieren. Das funktioniert gut mit den bekannten Code-Snipplets:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure clear() ; var sl: TStringList; ms: TMemoryStream; begin if assigned(htmlcache) then freeandnil(htmlcache); htmlcache := TStringList.Create();
WebBrowser.Navigate('about:blank') ; while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages;
if not Assigned(WebBrowser.Document) then raise Exception.Create('no html document'); end; |
und
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure print(text: string); var ms: TMemoryStream; begin if not assigned(htmlcache) then begin clear(); end;
if not Assigned(WebBrowser.Document) then begin clear(); if not Assigned(WebBrowser.Document) then raise Exception.Create('no html document'); end;
htmlcache.add(text);
ms := TMemoryStream.Create; try htmlcache.SaveToStream(ms) ; ms.Seek(0, 0) ; (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)) ; finally ms.Free; end;
Application.ProcessMessages; WebBrowser.OleObject.Document.ParentWindow.ScrollTo(0,MaxInt); Application.ProcessMessages; end; |
Mein Problem bei meinem neuen Projekt ist jetzt, dass die Erstellung es HTML-Codes lange dauert, ca. 4 minuten. Währenddessen ist der Webbrowser nicht benutzbar, also scrollt wild hin und her, zeigt wild teile der Seite oder auch mal gar nichts an, etc. Das sieht natürlich nicht schön aus. Und den Benutzer vor einer Processbar und einem weissen Browser warten zu lassen finde ich auch nicht so prickelnd.
habt ihr eine idee, wie ich das schöner lösen kann? so dass das das dokument, wie eine lahme webseite kontinuierlich geladen und dargestellt wird? ich hab schon versucht, die streams zwischenzuspeichern und wiederzuverwenden, aber kriege entweder kauderwelsch oder nur unvollständige seiten.
Dieses Werk ist unter einer Creative Commons 3.0 Lizenz lizenziert und darf unter Namensnennung kopiert, weitergegeben, veröffentlicht und verändert werden.