Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Библиотека MsHtml, все о ее возможностях


Автор: goa_dreamer 26.9.2008, 12:35
Хотелось бы создать тему в которой можно выкладывать применения интерфейсов из библиотеки MsHtml.

Моя задача, из которой возникла эта идея:
В компоненте TWebBrowser загружена веб-страница, где имеется одна или больше таблиц. Этими таблицами нужно манипулировать:
- добавление/удаление рядов/колонок;
- доступ к ячейкам таблицы;
- доступ к стилям тегов таблицы.

Код

With ( ( WebBrowser1.Document as IHtmlDocument2 ).all.tags( 'table' ) as IHtmlElementCollection ) do
Begin
 With ( item( 0, '' ) as IHtmlTable ) do
 Begin
  With ( insertRow( 0 ) as IHtmlTableRow ) do {вставляет ряд, тег <tr></tr>}
  Begin
   With ( InsertCell( 0 ) as IHtmlTableCell ) do {вставляет ячейку, тег <td></td>}
   Begin 
   end;
  end;
  With ( rows.item( 0, '' ) as IHtmlTableRow ) do {получение доступа к ряду с индексом 0}
  Begin
   With ( cells.item( 0, '' ) as IHtmlElement ) do {получение доступа к ячейке в виде свойств IHtmlElement, можно использовать IHtmlTableCell}
   Begin
    {для получения доступа к атрибутам тега}
    ShowMessage( getAttribute( 'width', 0 ) );
    {для получения доступа к атрибутам стиля тега}
    ShowMessage( style.getAttribute( 'border', 0 ) );
   end;
  end;
 end;
end;

Автор: goa_dreamer 10.10.2008, 16:33
Еще одно добавление связанное с проблемой печати через компонент TWebBrowser листа orientation = landscape.

Создаем отдельно файл printtemplate.htm:
Код

<HTML XMLNS:IE>
<HEAD>
<?IMPORT NAMESPACE="IE" IMPLEMENTATION="#default">
<STYLE TYPE="text/css">
.contentstyle
{
    width:11in;
    height:8.5in;
    margin:none;
    background:white;   
    border:1 dashed gray;
}
.masterstyle
{ 
    width:11in;
    height:8.5in;
    margin:none;
}
</STYLE>
<script LANGUAGE="JavaScript">
<!--
invocations = 0;

function CheckIfPrintRequested() {
  invocations++;
  if (invocations > 1) return;
  switch (dialogArguments.__IE_PrintType) {
    case "Prompt":
      if (printer.showPrintDialog()) PrintPrep();
      break;
    case "NoPrompt":
      PrintPrep();
      break;
    case "Preview":
    default:
      break;
  }
}

function PrintPrep() {
  if (layoutrect1.contentDocument.readyState == "complete") {
    PrintNow();
  }
  else {
    layoutrect1.contentDocument.onreadystatechange = PrintWhenContentDocComplete;
  }
}

function PrintWhenContentDocComplete() {
  if (layoutrect1.contentDocument.readyState == "complete")    {
    layoutrect1.contentDocument.onreadystatechange = null;
    PrintNow();
  }
}

function PrintNow() {
  printer.startDoc("Printing from template2.htm");
  printer.printPage(page1);    
  printer.printPage(page2);
  printer.stopDoc();
}
// -->
</SCRIPT>

</HEAD>
<BODY>
<IE:TEMPLATEPRINTER ID="printer"/>
<script Language="JavaScript">
     printer.orientation="landscape";
    </SCRIPT>
    
<IE:DEVICERECT ID="page1" CLASS="masterstyle" MEDIA="print">
    <IE:LAYOUTRECT ID="layoutrect1" CONTENTSRC="document" CLASS="contentstyle" NEXTRECT="layoutrect2"/>
</IE:DEVICERECT>

<IE:DEVICERECT ID="page2" CLASS="masterstyle" MEDIA="print">
    <IE:LAYOUTRECT ID="layoutrect2" CLASS="contentstyle" ONLAYOUTCOMPLETE="setTimeout('CheckIfPrintRequested()', 100)"/>
</IE:DEVICERECT>

</BODY>
</HTML>


Дополнительную информацию о шаблонах печати можно узнать из:
http://msdn.microsoft.com/en-us/library/aa969431.aspx

В проекте Delphi добавляем компонент TWebBrowser и кнопку с следущим кодом:
Код

var
 pvaIn : OleVariant;
Begin
 pvaIn := 'printtemplates\printtemplate.htm'; //путь к вашему шаблону печати
 WebBrowser1.ExecWB( OLECMDID_PRINTPREVIEW, 0, pvaIn );
end;


Шаблон печати можете модифицировать под свои задачи.

Автор: shraibikus 4.3.2009, 01:48
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)