HTML2BMP
-
kann keiner helfen wie man aus
var viewObject:IViewObject; WebBrowser1.Document.QueryInterface(IViewObject,viewObject); Webbrowser1.OleObject.Document.Body.Style.OverflowX:='hidden';entsprechenden CBuilder Syntax macht?

-
Hallo
In meinem BCB5 gibt es jedenfalls kein Typ namens IViewObject oder TViewObject. Frag doch dort nach wo du den Quellcode her hast.
bis bald
akari
-
Das ist schon beim BCB (auch 5) dabei. sieh mal nach oleidl.h. Bei möglichen Anwendungen finde ich aber nur pascal oder MFC-Sachen.
-
CBuilder hat kein Problem mit "IViewObject *viewObject;" da geht er fehlerfrei drüber.
Aber die beiden Zeilen darunter mag er in dieser Form garnicht.WebBrowser1.Document.QueryInterface(IViewObject,viewObject); Webbrowser1.OleObject.Document.Body.Style.OverflowX:='hidden';WebBrowser1->Document->QueryInterface(IViewObject, viewObject); WebBrowser1->OleObject->Document->Body->Style->OverflowX = "hidden";Allein schon die Zeile macht 3 Fehler
WebBrowser1->Document->QueryInterface(IViewObject, viewObject); //E2108 Ungültige Verwendung von typedef 'IViewObject' //E2034 Konvertierung von 'IViewObject *' nach 'void * *' nicht möglich //E2342 Keine Übereinstimmung des Typs beim Parameter 'ppvObject' ('void * *' erwartet, 'IViewObject *' erhalten)
-
Dann würde ich das mal folgendermaßen ändern
WebBrowser1.Document.QueryInterface(__classid(IViewObject),reinterpret_cast<void**>(viewObject));
-
Danke! Aber das war es noch nicht ganz

WebBrowser1->Document->QueryInterface(__classid(IViewObject),reinterpret_cast<void**>(viewObject)); // E2242 Für __classid ist ein Klassentyp im VCL-Stil erforderlich.
-
Dann mußt du mal nachschauen was QueryInterface so verlangt. Der erste parameter soll ja wohl einen Typen darstellen. Da man in C++ aber keine Typen übergeben kann ist das hier bestimmt etwas anders gelöst. Bei der VCL nimmt man eben __classid. IViewObject ist aber ein OLE-Interface.
-
Ich hab gerade mal ein wenig nachgeschaut. evtl. geht das ja
WebBrowser1.Document.QueryInterface(IID_IViewObject,reinterpret_cast<void**>(viewObject));
-
Danke das hat super geholfen, zumindest geht der Compiler nun ohne mux drüber.

Den letzten Fehler den er nun noch meldet ist hinter "WebBrowser1->OleObject".
Eventuell eine Idee wie das ausschauen soll?
// DELPHI WebBrowser1.OleObject.Document->Body.Styl.OverflowX := 'hidden';// CBUILDER WebBrowser1->OleObject->Document->Body->Style->OverflowX = "hidden"; // E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
-
Habe mich mittlerweile totgegoogelt und finde keine Lösung, vielleicht jemand der schonmal mit geabreitet hat und weiss woran es liegt?
-
Hallo
Vermutlich darf mindestens einer der Punkt-Operatoren nicht in einen Pfeiloperator umgewandelt werden.
bis bald
akari
-
Na und selbst wenn, du hast bei der Implementation des CppWebbrowsers beim BCB einen entscheidenden Nachteil.
Du kannst nicht auf das OleObject zugreifen.
Vielleicht hilft dir das weiter:http://www.codeproject.com/KB/IP/htmlimagecapture.aspx?msg=783507
und
http://www.codeproject.com/KB/GDI-plus/WebPageSnapshot.aspx
-
Es gibt auch eine Komponente die das kann. Kostet allerdings 149$.
http://www.guangmingsoft.net/download.htm
-
Ja hast wohl recht, lässt sich mit dem CBuilder so nicht realisieren.
Vielleicht hilft ja jemand dieser Weg: http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc08019.phpSieht aber "korksig" aus und komplex. Delphi 1 Zeile und CBuilder 1 Seite.

-
Also ich würde da ganz anders heran gehen.
Ich würde mir eine Form erstellen in der in nur den CppWebBrwoser anzeigen lasse.
Im Idealfall als ohne Rahmen ect.pp.Dann schiebe ich die Form auf Left = -1000 (außerhalb des sichtbaren Bereichen)
Focus auf das Fenster legen und STRG+Druck-Taste auslösen lassen (Geht auch direkt über eine
Funktion -> siehe FAQ) runter scrollen lassen und nochmal. Das ganze dann aus der Zwischenablage
holen und als BMP speichern (-> siehe FAQ) und dann aufwendig wieder zusammen schnipseln.Wäre meine erste überlegung.
-
Die Überlegung hat nur den Nachteil, das er dann den Screenshot vom Bildschirm hat und nicht vom Fenster. Trotzdem müsste er auch noch an die Breite und die Höhe des angeigten Dokumentes kommen.