Salvarea twebbrowser

Salvarea TWebBrowser

bun venit
spune-mi ce este problema, salvez conținutul TWebBrowser în felul următor:
# xA0; HTMLDocument: = WebBrowser1.Document ca IHTMLDocument;
# xA0; PersistFile # xA0 ;: = HTMLDocument ca IPersistFile;
# xA0; PersistFile.Save (StringToOleStr ("c: \ HTMLFile.html"), System.True);
toate funcționează bine.

Încerc să salvez printr-o variabilă:
htmllink: = "C: \ Salvare \ SavedFile.html";
HTMLDocument: = WebBrowser1.Document ca IHTMLDocument;
PersistFile # xA0 ;: = HTMLDocument ca IPersistFile;
PersistFile.Save (StringToOleStr (htmllink), System.True);
pagina nu este salvată.

funcția WB_SaveHTMLCode (WebBrowser: TWebBrowser; const NumeleName: TFileName): Boolean;
var
# xA0; ps: IPersistStreamInit;
# xA0; fs: TFileStream;
# xA0; sa: IStream;
începe
# xA0; Rezultat: = False;
# xA0; IF WebBrowser.Document = nil apoi ieșire;
# xA0; ps: = WebBrowser.Document ca IPersistStreamInit;
# xA0; fs: = TFileStream.Create (FileName, fmCreate);
# xA0; încercați
# xA0; # xA0; sa: = TStreamAdapter.Create (fs, soReference) ca IStream;
# xA0; # xA0; Rezultat: = Succes (ps.Save (sa, True));
# xA0; în cele din urmă
# xA0; # xA0; fs.Free;
# xA0; sfârșitul;
se încheie;

funcție WB_GetHTMLCode (WebBrowser: TWebBrowser; ACode: TStrings): Boolean;
var
# xA0; ps: IPersistStreamInit;
# xA0; ss: TStringStream;
# xA0; sa: IStream;
# xA0; s: șir;
începe
# xA0; ps: = WebBrowser.Document ca IPersistStreamInit;
# xA0; s: = "";
# xA0; ss: = TStringStream.Create (e);
# xA0; încercați
# xA0; # xA0; sa: = TStreamAdapter.Create (ss, soReference) ca IStream;
# xA0; # xA0; Rezultat: = Succes (ps.Save (sa, True));
# xA0; # xA0; dacă rezultatul este apoi ACode.Add (ss.Datastring);
# xA0; în cele din urmă
# xA0; # xA0; ss.Free;
# xA0; sfârșitul;
se încheie;

Apropo, cine știe cum să salveze toată pagina (cu imagini, stiluri, scripturi) pe disc utilizând TWebBrowser?

adică în arhiva web, o întrebare interesantă

Nu neapărat în mht.

MS IE are patru opțiuni de economisire:
1. Pagină web, completă
2. Arhiva Web, fișier unic
3. Pagină Web, numai HTML
4. Fișier text

Interesat de prima opțiune.

1. EmbeddedWB poate salva o pagină web complet?

2. Dar acest lucru este nedorit, totul ar trebui să fie automatizat.

Și despre al doilea. Bineînțeles că există o metodă de salvare automată, fără o casetă de dialog.

2. Dacă da, unde este?

Dar nu știu asta.
Cereți Nikkie sau Ihor Osov "yak.

puteți încerca să faceți acest lucru executând comanda OLECMDID_SAVEAS, dar va afișa un dialog. în teorie, dialogurile trebuie să fie legate de un parametru
OLECMDEXECOPT_DONTPROMPTUSER și să specificați în mod explicit parametrii în vaIn, dar acest lucru nu merge întotdeauna. meșteșugari oferă să trimită o fereastră de apăsări de taste, a se vedea, de exemplu,

dar într-un fel este neîndemânatic. dacă nu funcționează prin intermediul comenzilor WB, atunci un exemplu arată ca unul mai rezonabil, care a fost găsit și în Google:

Știu asta prin CDO. Numai pe mașina mea nu funcționează (programul în timpul execuției dă "eroarea de sintaxă" pe CreateMHTMLBody)

Poate motivul este că nu am instalat MS Exchange?

De fapt, nici nu am încercat acest exemplu. Acum este încercat - umenya funcționează, dar rezultatul nu este cel așteptat. imaginile pe care nu le salvează în mht.

utilizări
# xA0; ADODB_TLB, CDO_TLB;

astfel încât morala - cu CDO nu va funcționa. fie trebuie să salvați cu OLECMDID_SAVEAS și să împingeți dialogul, de exemplu, prin trimiterea intrărilor de la tastatură, sau să scrieți propriul dvs. generator mht.

Am folosit CDO puțin diferit, dar și cu un rezultat negativ:

funcția SaveToMHT (const AUrl, AFileName: string;
# xA0; AShowErrorMessage: boolean = false): boolean;
var oMSG, oConfig: OleVariant;
# xA0; sFileName: șir;
# xA0; Retvar: boolean;
începe
# xA0; sFileName: = SchimbaFileExt (AFileName, ".mht");
# xA0; ȘtergereFile (sFileName);

# xA0; încercați
# xA0; # xA0; oConfig: = CreateOleObject ("CDO.Configurare");
# xA0; # xA0; oMSG: = CreateOleObject ("CDO.Message");
# xA0; # xA0; oMSG.configurație: = oConfig;
# xA0; # xA0; oMSG.CreateMHTMLBody (WideString (AUrl));
# xA0; # xA0; oMSG.GetStream.SaveToFile (sFileName);
# xA0; # xA0; Retvar: = adevărat;
# xA0; cu excepția
# xA0; # xA0; pe E: Excepția începe
# xA0; # xA0; # xA0; dacă AShowErrorMessage apoi MessageDlg (E.Message, mtError, [mbOk], 0);
# xA0; # xA0; # xA0; Retvar: = false;
# xA0; # xA0; sfârșitul;
# xA0; sfârșitul;

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

> dar și cu un rezultat negativ
Aș cere. La mine toate lucrările, deci nu este necesar să generalizați.

Este clar acum de ce ați zburat Sintaxă nevalidă.
Desigur - utilizați legarea târzie și apelați CreateMHTMLBody cu un număr greșit de parametri. La compilare totul este normal, iar în timp de execuție primești o eroare.

La mine, de asemenea, acest cod a dat o eroare, deci nu este necesar la-la:

procedura SaveToMHT (URL-ul const, DestFileName: string);
var
# xA0; Msg: IMessage;
# xA0; Conf: Configurația ICON;
# xA0; Stream. _Stream;
începe
# 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);
se încheie;

Fișierul CDO_TLB.pas este în directorul meu de proiect
# xA0; # xA0; procedura CreateMHTMLBody (URL-ul const: WideString; Flags: CdoMHTMLFlags;
# xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; const Nume utilizator: WideString; const Parola: WideString); safecall;

și nu a putut compila codul cu un număr greșit de parametri

Am și acest cod de lucru. în Google există mai multe plângeri cu privire la sintaxa nevalidă la apelarea grupului CreateMHTML, dar nu văd răspunsuri.

care este versiunea dvs. de OS, versiunea de cdosys.dll, etc?

Windows 98 Second Edition

cdosys.dll nu este deloc pe disc. Cred că motivul este acesta.

Deși CLSIDFromProgID (PWideChar (WideString ( "CDO.Configuration")), classid) returnează S_OK (și CDO.Message returnează același lucru).

În general, nu înțeleg nimic.

pentru ca codul din [15] să fie compilat, trebuie să aveți CDO_TLB în utilizări. uita-te la ea, arata, pe baza care tip de biblioteca a fost mai sgener.

Nu l-am creat, am pregătit-o deja:

// Tip Lib: C: \ WINNT \ system32 \ cdosys.dll (1)
// IID \ LCID: \ 0
// Helpfile: 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. Este această valoare în CDO_TLB.pas?
# xA0; CLASS_Message: TGUID = "";
2. ce este scris în registru în
HKEY_CLASSES_ROOT \ CLSID \\ InprocServer32?
3. Biblioteca de proiect / import - există un nume pentru tipul de Microsoft CDO?

Apropo, ai creat o ramură pe acest subiect. Am încercat să vă răspund, dar vă pare că ați marcat pe propria ramură. Foarte ciudat.

> Piter
Ei bine, ați înregistrat toate mișcările. repetăm, vom asculta cu interes.

dar ai spus deja totul.

Nu voi concura cu tine în cunoștința WebBroser :)))

Ne pare rău, probabil că a ratat. Repetă, pliz.

ZY În general, ar fi bine să primiți răspunsuri către sucursala dvs. prin poștă.

Există două sublinieri:
(Implicit) - C: \ PROGRA


> 3. Biblioteca tip proiect / import - există un nume de tip
> Microsoft CDO?

> Piter
Da, nimeni nu concurează cu nimeni. mai ales că CDO nu are o relație cu WebBrowser. dacă ar exista alte idei, ar fi interesant să le auzi. dar pentru moment CDO arată ca o opțiune de lucru, dar nu este instalată peste tot.

Microsoft Corporation recunoaște că dezvoltatorii au nevoie de o bibliotecă de obiecte care să ofere mai multă funcționalitate decât cea disponibilă în biblioteca Active Messaging 1.1, livrată cu Microsoft® Exchange 5.0. Dezvoltatorii au nevoie de obiecte care să suporte capabilități dincolo de mesajele simple și în câmpurile de calendare, colaborare și flux de lucru. Astfel de capacități pot simplifica dezvoltarea unor aplicații de programare a resurselor grele.

Ca răspuns, Microsoft a înlocuit obiectele Active Messaging cu Collaboration Data Objects (CDO). Aceste CDO-uri sunt disponibile într-o bibliotecă cunoscută sub numele de CDO 1.2, care înlocuiește versiunea 1.1 a bibliotecii obiectului Active Messaging și se livrează cu Exchange 5.5. Una dintre caracteristicile cheie ale bibliotecii este că aplicațiile create cu Active Messaging 1.1 pot rula neschimbate într-un mediu CDO 1.2. De asemenea, disponibil pentru dezvoltatorii care lucrează în Internet Information Server 4.0, cunoscut sub numele de Collaboration Data Objects pentru Microsoft Windows NT® Server.

Aș dori să înțeleg ce se instalează acolo, de unde a venit și de ce a fost creat obiectul, dar chemarea metodei sale duce la o eroare.

Pentru versiunile de OS de mai jos w2k, CDO-ul nu va fi probabil instalat. din nou, nu există nici o certitudine că Microsoft în versiunile viitoare nu va arunca CDO, deoarece a aruncat mesajele active. așa că mi se pare că pentru fișierul independent de aplicații desktop-mht fișierul este mai bine făcut de mâini (sau poate TIdMessage se poate scrie).

> (Implicit) - C: \ PROGRA

ceva nu am înțeles de unde a venit. ai scris:

> Poate motivul este că nu am instalat MS Exchange?

S-a transferat într-adevăr dosarul și l-a înregistrat?

Nu, se pare că a fost făcută de MS Office XP în timpul instalării. Dar nu am fișierul cdosys.dll.


> sau, poate, TIdMessage se poate scrie).

Indiana TIdMessage va putea să o scrie dacă toate fișierele sunt la îndemână. Între timp, problema este să descărcați toate fișierele asociate html-ului (care poate fi un Tueva Hucha).

pentru a sorta etichetele în document, link-uri către fișiere vytsepit externe, pentru a primi aceste fișiere (din memoria cache sau descărcați în cazul în care acestea nu sunt în cache - URLDownloadToFile sau RetrieveUrlCacheEntryFile), salvați local, înlocuiți referințele din document. și nimeni nu a spus că ar fi ușor.

Cum altfel? OLECMDID_SAVEAS + interceptarea dialogului de deschidere (cârlig sau cârlig WinAPI), prin închiderea forțată.

ciudat și trist că nu funcționează cu OLECMDEXECOPT_DONTPROMPTUSER OLECMDID_SAVEAS pavilion, dar ce să fac.

Și cum va arăta codul în care pagina este salvată folosind TWebBrowser? (Într-un fel cred că aceasta este cea mai bună cale, MS IE este instalat peste tot).

Și cu forța pe fereastră vom acoperi :)

Articole similare