unit UnitfrmHTMLPreview;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  StdCtrls, ExtCtrls, Forms, OleCtrls, SHDocVw_TLB, ActiveX;

type
  TfrmHTMLPreview = class(TForm)
    wbPreview: TWebBrowser;
    tmrLoad: TTimer;
    procedure tmrLoadTimer(Sender: TObject);
    procedure FormShow(Sender: TObject);
  public
    procedure LoadCode(eHTML: String);
  end;

var
  frmHTMLPreview: TfrmHTMLPreview;

implementation

uses UnitMainTools, UnitfrmMain;

{$R *.DFM}

{ TfrmHTMLPreview }

procedure TfrmHTMLPreview.LoadCode(eHTML: String);
var sl: TStringList;
    ms: TMemoryStream;
begin
  wbPreview.Navigate('about:blank');
  while wbPreview.ReadyState < READYSTATE_INTERACTIVE do
   Application.ProcessMessages;

  if Assigned(wbPreview.Document) then
  begin
    sl := TStringList.Create;
    try
      ms := TMemoryStream.Create;
      try
        sl.Text := eHTML;
        sl.SaveToStream(ms);
        ms.Seek(0, 0);
        (wbPreview.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
      finally
        ms.Free;
      end;
    finally
      sl.Free;
    end;
  end;
end;

procedure TfrmHTMLPreview.tmrLoadTimer(Sender: TObject);
begin
  if not Started then exit;
  
  if (Visible) and (not Focused) then begin
    if (LowerCase(ExtractFileExt(ActiveDoc.FileName)) = '.htm') or (LowerCase(ExtractFileExt(ActiveDoc.FileName)) = '.html') then
      LoadCode(frmMain.sciEditor.Lines.Text);
  end;
end;

procedure TfrmHTMLPreview.FormShow(Sender: TObject);
begin
  Left := frmMain.Left + frmMain.Width - Width - 50;
  Top := frmMain.Top + 30;
end;

end.