schau dir mal IHMTLDocument2 (MSDN) an.
Nimm dazu statt TWebBrowser, den TDHTMLEdit (importiere die Datei:C:\Programme\Gemeinsame Dateien\Microsoft Shared\Triedit\dhtmlocx)
und dann kannst du via Dom relativ einfach auf das Dokument zugreifen.
Ist quasi ein vollwertiger HTML-Editor, den man aber in den Read-Only Modus setzen kann, dann benimmt er sich
wie ein TWebBrowser. Hat aber einige nette Features mehr.
z.b. auf die Meta-Tags zugreifen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure MetaTag(S:String); var I:Integer; Item: IHTMLElement; M:IHTMLMetaElement; begin for I:= 0 to WebEdit.DOM.all.length-1 do begin Item := WebEdit.Dom.All.Item(i,varempty) as IHTMLElement; if (item<>nil)and(Item.Tagname='META') then begin M:= WebEdit.Dom.All.Item(i,varEmpty)as IHTMLMetaElement; if M.content=S then M.content:= '"text/html; charset=iso-8859-1"'; end; end; end; |
such einfach statt Meta , HRef und fertig ist's.
oder hier noch so'n Teil:
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:
| function TBTW.GetActiveElement: IHTMLElement; var V: OleVariant; S: OleVariant; i:Integer; Felement:IHTMLElementCollection; Len:Integer; Item: OleVariant; Item2: IHTMLElement; L:String; begin while WebEdit.Busy do Application.ProcessMessages;
Felement:=WebEdit.DOM.all; Len := FElement.Length;
for i := 0 to Len - 1 do begin Item := FElement.Item(i, varEmpty); if (Item.TagName = 'P')or(Item.TagName = 'p') then begin Item2:= FElement.Item(i, varEmpty) as IHtmlElement; end; end; end; |
oder
umbennen und/oder hinzufügen von ID=xxxx für <p> Tags:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| while WebEdit.Busy do Application.ProcessMessages; Felement:=WebEdit.DOM.all; Len := FElement.Length; lauf:=1; for i := 0 to Len - 1 do begin Item := FElement.Item(i, varEmpty); if (Item.TagName = 'P')or(Item.TagName = 'p') then begin Item2:= FElement.Item(i, varEmpty) as IHtmlElement; Item2._AddRef; Item2.removeAttribute('ID',0); item2.setAttribute('ID','"'+trim('blablaba')+'-'+trim(L)+'-p'+IntToStr(Lauf)+'"',0); Item2._Release; inc(Lauf); end; end; end; |
vielleicht hilfs dir, ist aus meinen Projekten rausgeschnippselt.
grez
msch