A twebbrowser mentése

A TWebBrowser mentése

fogadtatás
mondja meg, mi a probléma, mentem a TWebBrowser tartalmát a következő módon:
# xA0; HTMLDocument: = WebBrowser1.Document mint IHTMLDocument;
# xA0; PersistFile # xA0 ;: = HTMLDocument mint IPersistFile;
# xA0; PersistFile.Save (StringToOleStr ("c: \ HTMLFile.html"), System.True);
minden jól működik.

Megpróbálok menteni egy változón keresztül:
htmllink: = "C: \ Mentés \ SavedFile.html";
HTMLDocument: = WebBrowser1.Document mint IHTMLDocument;
PersistFile # xA0 ;: = HTMLDocument mint IPersistFile;
PersistFile.Save (StringToOleStr (htmllink), System.True);
az oldal nem kerül mentésre.

funkció WB_SaveHTMLCode (WebBrowser: TWebBrowser; const Fájlnév: TFileName): Boole;
var
# xA0; ps: IPersistStreamInit;
# xA0; fs: TFileStream;
# xA0; sa: IStream;
kezdődik
# xA0; Eredmény: = hamis;
# xA0; IF WebBrowser.Document = null, majd kilépés;
# xA0; ps: = WebBrowser.Document, mint IPersistStreamInit;
# xA0; fs: = TFileStream.Create (Fájlnév, fmCreate);
# xA0; próbáld ki
# xA0; # xA0; sa: = TStreamAdapter.Create (fs, soReference) mint IStream;
# xA0; # xA0; Eredmény: = Megbetegedett (ps.Save (sa, True));
# xA0, végül
# xA0; # xA0; fs.Free;
# xA0; vége;
végén;

függvény WB_GetHTMLCode (WebBrowser: TWebBrowser; ACode: TStrings): Boole;
var
# xA0; ps: IPersistStreamInit;
# xA0; ss: TStringStream;
# xA0; sa: IStream;
# xA0; s: string;
kezdődik
# xA0; ps: = WebBrowser.Document, mint IPersistStreamInit;
# xA0; s: = "";
# xA0; ss: = TStringStream.Create (s);
# xA0; próbáld ki
# xA0; # xA0; sa: = TStreamAdapter.Create (ss, soReference) mint IStream;
# xA0; # xA0; Eredmény: = Megbetegedett (ps.Save (sa, True));
# xA0; # xA0; ha Eredmény, akkor ACode.Add (ss.Datastring);
# xA0, végül
# xA0; # xA0; ss.Free;
# xA0; vége;
végén;

By the way, ki tudja, hogyan mentheti az egész oldalt (képekkel, stílusokkal, szkriptekkel) a lemezen a TWebBrowser segítségével?

azaz az internetes archívum mht-ben, egy érdekes kérdés

Nem feltétlenül a mht.

Az MS IE négy mentési lehetőséggel rendelkezik:
1. Weboldal, teljes
2. Web archívum, egyetlen fájl
3. Weboldal, csak HTML
4. Szövegfájl

Érdekli az első lehetőséget.

1. Az EmbeddedWB teljes weboldal mentésére képes?

2. De ez nem kívánatos, mindent automatizálni kell.

És a második. Bizonyos, hogy van egy módja az automatizált mentésre, párbeszédablak nélkül.

2. Ha igen, hol van?

De ezt nem tudom.
Kérdezd meg a nikkie vagy Ihor Osov "yakot.

megpróbálhatja ezt az OLECMDID_SAVEAS parancs végrehajtásával, de megjelenik egy párbeszédablak. Elméletileg a párbeszédeket egy paraméterrel kell összekapcsolni
OLECMDEXECOPT_DONTPROMPTUSER és határozza meg pontosan a paramétereket a vaIn-ban, de ez nem mindig működik. a kézművesek felajánlják, hogy egy ablakot adnak meg a billentyűleütésekről, lásd például:

de valahogy ügyetlen. ha nem működik a WB parancsokon keresztül, akkor egy példa egy ésszerűbbnek tűnik, amelyet a Google is megtalál:

Ezt a CDO-n keresztül ismerem. Csak a gépemen nem működik (a program futási időben "Syntax error" -et ad a CreateMHTMLBody-ban)

Talán az oka, hogy nincs MS Exchange telepítve?

Igazából nem is próbáltam ezt a példát. Most itt próbálkozik - umenya működik, de az eredmény nem az, ami várható volt. képeket nem menti a mht.

felhasználások
# xA0; ADODB_TLB, CDO_TLB;

így az erkölcsi - a CDO-val nem fog működni. vagy menteni kell az OLECMDID_SAVEAS programmal, és nyomja meg a párbeszédablakot, például billentyűleütések küldésével vagy saját mht generátor írásához.

A CDO-t kicsit másként használtam, de negatív eredménnyel is:

function SaveToMHT (const AUrl, AFileName: string;
# xA0; AShowErrorMessage: boolean = false): logikai;
var oMSG, oConfig: OleVariant;
# xA0; sFileName: string;
# xA0; Retvar: logikai;
kezdődik
# xA0; sFileName: = ChangeFileExt (AFileName, ".mht");
# xA0; DeleteFile (sFileName);

# xA0; próbáld ki
# xA0; # xA0; oConfig: = CreateOleObject ("CDO.Configuration");
# xA0; # xA0; oMSG: = CreateOleObject ("CDO.Message");
# xA0; # xA0; oMSG.Configuration: = oConfig;
# xA0; # xA0; oMSG.CreateMHTMLBody (WideString (AUrl));
# xA0; # xA0; oMSG.GetStream.SaveToFile (sFileName);
# xA0; # xA0; Retvar: = igaz;
# xA0; kivéve
# xA0; # xA0; E-n: kivétel kezdődik
# xA0; # xA0; # xA0; ha AShowErrorMessage majd MessageDlg (E.Message, mtError, [mbOk], 0);
# xA0; # xA0; # xA0; Retvar: = hamis;
# xA0; # xA0; vége;
# xA0; vége;

# xA0; oMSG: = VarNull;
# xA0; oConfig: = VarNull;

> de negatív eredménnyel is jár
Kérem. Számomra minden működik, ezért nem szükséges általánosítható.

Most már világos, hogy miért repült az érvénytelen szintaxissal.
Természetesen - késői kötést használ, és felhívja a CreateMHTMLBody paramétereket a nem megfelelő paraméterek számával. Összeállításkor minden rendben van, és futási időben hibát kap.

Számomra ez a kód hibát adott, ezért nem szükséges la-la:

eljárás SaveToMHT (const URL, DestFileName: string);
var
# xA0; Msg: IMessage;
# xA0; Konfiguráció: IConfiguráció;
# xA0; Stream. _Stream;
kezdődik
# xA0; Msg: = CoMessage.Create;
# xA0; Conf: = CoConfiguration.Create;
# xA0; Msg.Configuration: = Conf;
# xA0; Msg.CreateMHTMLBody (URL, cdoSuppressNone, "", "");
# xA0; Stream: = Msg.GetStream;
# xA0; Stream.SaveToFile (DestFileName, adSaveCreateOverWrite);
végén;

A CDO_TLB.pas fájl a projektkönyvtárban található
# xA0; # xA0; eljárás CreateMHTMLBody (const URL: WideString; Flags: CdoMHTMLFlags;
# xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; const Felhasználó neve: WideString; const Jelszó: WideString); safecall;

és nem tudta kódolni a kódot a rossz számú paraméterrel

Nekem is ez a kód működik. a Google-ben számos panasz érkezik az érvénytelen szintaxisra a CreateMHTMLBody hívásakor, de semmilyen választ nem találok.

mi az OS verziója, a cdosys.dll verziója stb.

Windows 98 Second Edition

A cdosys.dll egyáltalán nem található a lemezen. Azt hiszem, ez az oka.

Bár CLSIDFromProgID (PWideChar (WideString ( "CDO.Configuration")), osztályazonosítót) visszatér S_OK (és CDO.Message visszatér ugyanaz).

Általában nem értek semmit.

annak érdekében, hogy a [15] -es kódot lefordítsák, a CDO_TLB-nek használnia kell. nézd meg, nézd meg, milyen típusú könyvtár volt szebb.

Nem hoztam létre, már készen álltam:

// Típus Lib: C: \ WINNT \ system32 \ cdosys.dll (1)
// IID \ LCID: \ 0
// Súgó: C: \ WINNT \ system32 \ cdosys.chm
// DependLst:
// # xA0; (1) v2.0 stdole, (C: \ WINNT \ System32 \ Stdole2.tlb)
// # xA0; (2) v2.5 ADODB, (C: \ Program Files \ Common Files \ System \ ADO \ msado25.tlb)
// # xA0; (3) v4.0 StdVCL, (C: \ WINNT \ System32 \ STDVCL40.DLL)

1. Ez az érték a CDO_TLB.pas?
# xA0; CLASS_Message: TGUID = "";
2. mi szerepel a rendszerleíró adatbázisban:
HKEY_CLASSES_ROOT \ CLSID \\ InprocServer32?
3. Project / Import Type Library - van egy név a Microsoft CDO típusának?

egyébként létrehozott egy ágat ebben a témában. Megpróbáltam válaszolni neked, de látszólag a saját fiókodon lőttél. Nagyon furcsa.

> Piter
Nos, az összes mozgást rögzítetted. ismételjük meg, figyeljünk érdeklődéssel.

de már mindent elmondtál.

Nem fogok versenyezni veled a WebBroser ismeretében :)))

Sajnálom, valószínűleg hiányzott. Ismételje meg, pliz.

ZY Általában véve hűvös lenne válaszolni a fiókodra mailben.

Két sublight:
(Alapértelmezett) - C: \ PROGRA


> 3. Project / Import Type Library - van egy típusnév
> Microsoft CDO?

> Piter
Igen, senki sem versenyez senkivel. különösen mivel a CDO-nak nincs kapcsolat a WebBrowserrel. ha lenne más ötlet, érdekes lenne hallani őket. de most a CDO úgy néz ki, mint egy működő opció, de nem mindenütt van telepítve.

A Microsoft Corporation elismeri, hogy a fejlesztőknek olyan objektumkönyvtárra van szükségük, amely több funkciót nyújt, mint az Active Messaging 1.1 könyvtárban, amely a Microsoft® Exchange 5.0 verziójával szállítható. A fejlesztőknek olyan objektumokra van szükségük, amelyek képesek az egyszerű üzenetküldést és a naptártervezést, az együttműködést és a munkafolyamatokat. Ezek a képességek egyszerűsíthetik a nagy erőforrás-ütemező alkalmazások fejlesztését.

Válaszul a Microsoft az Active Messaging objektumokat Collaboration Data Objects (CDO-k) helyettesítette. Ezek a CDO-k a CDO 1.2-ben ismert könyvtárban érhetők el, amely az Active Messaging objektumkönyvtár 1.1-es verzióját helyettesíti és az Exchange 5.5 verzióval szállítja. A könyvtár egyik legfontosabb jellemzője, hogy az Active Messaging 1.1 programmal létrehozott alkalmazások változatlanok lehetnek a CDO 1.2 környezetben. Ezenkívül az Internet Information Server 4.0-ben, a Microsoft Windows NT® Server Collaboration Data Objects-ként ismert fejlesztők számára is elérhető.

Szeretném megérteni, hogy mi van ott telepítve, honnan érkezett, és miért jött létre az objektum, de a módszerének hívása hibát okoz.

A w2k alatti operációs verziók esetében a CDO valószínűleg nem lesz telepítve. ismét nincs semmi bizonyosság, hogy a Microsoft a jövőbeli verziókban nem fogja eldobni a CDO-t, mivel elhomályosította az aktív üzenetküldést. úgyhogy számomra úgy tűnik számomra, hogy a független asztali alkalmazásokhoz a mht fájl jobban kézzel történik (vagy talán a TIdMessage képes írni).

> (Alapértelmezett) - C: \ PROGRA

amit nem értettem, honnan jött. te írtad:

> Talán az oka, hogy nincs MS Exchange telepítve?

Tényleg átadta a fájlt, és regisztrálta?

Nem, látszólag, az MS Office XP a telepítés során történt. De nincs a cdosys.dll fájl.


> vagy talán a TIdMessage írhatja le).

Az Indaevsky TIdMessage képes lesz leírni, ha az összes fájl közel van. Időközben a probléma az, hogy le kell tölteni az összes html-fájlhoz kapcsolódó fájlt (ami lehet Tueva Hucha).

rendezni a címkéket a dokumentumban, vytsepit linkeket külső fájlokat, hogy ezeket a fájlokat (a gyorsítótárból, vagy töltse le, ha azok nem a cache - URLDownloadToFile vagy RetrieveUrlCacheEntryFile), kivéve a helyi, cserélje hivatkozások a dokumentumban. és senki nem mondta, hogy könnyű lenne.

Másképp? OLECMDID_SAVEAS + a nyitó párbeszéd lehallgatása (WinAPI hook vagy hook), erőszakkal bezárva.

furcsa és sértő, hogy az OLECMDID_SAVEAS az OLECMDEXECOPT_DONTPROMPTUSER zászlóval nem működik, de mi a teendő.

És mi fog megjelenni a kód, amelyben az oldal mentése a TWebBrowser használatával történik? (Valahogy úgy gondolom, hogy ez a legjobb mód, az MS IE mindenhol telepítve van).

És erőszakkal az ablakot fogjuk lefedni :)

Kapcsolódó cikkek