vložil Radek Červinka
12. února 2014 22:17
Někdy bych si fakt lištil. Pár hodin se snažím vylepšit TWebBrowser za pomocí implementace různých interface, TLB a dalších MS úchylností a pak mi najednou vyvstane na mysli, že v rámci porovnávání co nového bylo změněno v aktuální verzi jsem zaregistroval nějaký soubor WebBrowserEx.pas. Kouknu do adresáře source\internet a fakt tam něco je a světe div se - je to ve starších verzích (nejméně v Delphi XE).
Tato jednotka (i další v tom adresáří jsou zajímavé) je v podstatě vlhkým snem programátora používajícího TWebBrowser. Po jejím objevení jsem z našeho projektu odstranil několik jednotek. Neříkám, že je to vše spasující, ale rozhodně to řeší většinu problémů co jsem měl.
Jedná se o následníka TWebBrowser implementujícího různé interface:
TWebBrowserEx = class(TWebBrowser, IUnknown, IDispatch,
IDocHostUIHandler, IDocHostUIHandler2,
IDocHostShowUI, IServiceProvider, IOleCommandTarget, IHTMLChangeSink)
Třída publikuje např. (modří již vědí)
procedure DoCommand(const Cmd: TOleEnum; InParam: OleVariant;
OutParam: OleVariant); overload;
procedure ForceSelectionChange;
procedure Bold;
function Focused: Boolean; override;
procedure Italic;
procedure Underline;
procedure CutToClipBoard;
procedure CopyToClipBoard;
procedure PasteFromClipBoard;
procedure Delete;
procedure Undo;
procedure Redo;
procedure SelectAll;
procedure Clear;
function SelLength: Integer;
function Selection: IHTMLSelectionObject;
procedure CreateBookmark;
procedure Overwrite;
function GetViewLinkDocuments(CmdId: TOleEnum): IInterfaceList;
function GetElementOfViewLinkDocument(ADocument: IHTMLDocument): IHTMLElement;
function GetIsEditableElement(AElement: IHTMLElement; AFlags: TElementEditableFlags): Boolean;
function GetIsContentPage: Boolean;
{ Print Operations }
procedure Print;
procedure PageSetup;
procedure PrintPreview;
{ File Operations }
procedure ClearDirtyFlag;
procedure LoadFromStream(S: TStream);
procedure LoadFromFile(const FileName: string); virtual;
procedure SaveToStream(S: TStream);
procedure SaveToFile(const FileName: string); virtual;
property Document2: IHTMLDocument2 read GetDocument2;
property Document3: IHTMLDocument3 read GetDocument3;
property Document4: IHTMLDocument4 read GetDocument4;
property CurrentElement: IHTMLElement read GetCurrentElement;
property CurrentElementType: TCurrentElementType read GetCurrentElementType;
a další včetně tuny událostí.
Tohle opravdu bolelo.