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


Автор: fireofdeath 5.4.2011, 11:10
Здравствуйте у меня такая проблема. Мне нужно чтобы в webbrowser вывелась таблица еще не созданного файла, причем чтобы были использованы стили для данной таблицы. Вывожу текст webbrowser следующим образом:

Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('about:blank');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Range: IHTMLTxtRange;
begin

  Range := ((WebBrowser1.Document as IHTMLDocument2).body as
    IHTMLBodyElement).createTextRange;
      Range.collapse(true);
      Range.pasteHTML( '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">');
      Range.pasteHTML( '<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="stylesheet" type="text/css" href="file:///C:/Users/Admin/Desktop/style.css">');
      Range.pasteHTML( '<title>Текст</title>');
      Range.pasteHTML( '</head>');
      Range.pasteHTML( '<body>');
      Range.pasteHTML( '<h1>Текст</h1>');
      Range.pasteHTML( '<table align="center" width="100%" border="0">');
      Range.pasteHTML( '<tr><td>');
      Range.pasteHTML( '<p><span class="note">Текст</span></p>');
      Range.pasteHTML( '</td></tr>');
      Range.pasteHTML( '<td><tr>');
      Range.pasteHTML( '<table align="center" cellpadding="2" cellspacing="0" width="100%" border="1" bordercolor="white" class="infotable">');
      Range.pasteHTML( '<tr class="header">');
      Range.pasteHTML( '<td colspan="3">Текст</td>');
      Range.pasteHTML( '</tr><tr class="content">');
      Range.pasteHTML( '<td width="45%">Текст</td>');
      Range.pasteHTML( '<td width="42%">Текст</td>');
      Range.pasteHTML( '<td>Текст</td>');
      Range.pasteHTML( '</tr><tr class="foot-l">');
      Range.pasteHTML( '<td>Текст:</td>');
      Range.pasteHTML( '<td>Текст</td>');
      Range.pasteHTML( '<td></td>');
      Range.pasteHTML( '</tr></table>');
      Range.pasteHTML('</td></tr>');
      Range.pasteHTML('</table>');
      Range.pasteHTML('</body>');
      Range.pasteHTML('</html>');
end;


Как правильно сделать, чтобы в webbrowser корректно отображался текст? 
PS. Если открыть уже готовый html файл с тем же кодом то в webbrowser, то отображается все хорошо.

Автор: cat512 5.4.2011, 16:48
Ещё раз, по русски, объясни что надо сделать

Автор: fireofdeath 5.4.2011, 17:53
В webbrowser весь текст выводится в одну строчку, а мне нужно чтобы текст был в таблице (тот что между тегами <table></table>) и для данной таблицы были использованы css стили. Если по русски у меня не работают теги.

Автор: cat512 5.4.2011, 18:39
Скажи пожалуйста, а зачем ты в тело документа, добавляешь HTML теги (родительского элемента)?

Автор: fireofdeath 5.4.2011, 20:30
Ну я нашел код в drkb 'Добавить HTML к TWebBrowser Document', вот им и воспользовался, а как правильно сделать я не знаю, вот и спрашиваю, если гдето написано, как нужно буду рад прочитать про это.

Автор: cat512 5.4.2011, 21:14
Я посмотрел, этот код, у меня, начиная с тега <h1> всё корректно компонуется броузером

Автор: fireofdeath 5.4.2011, 22:06
Жаль, что у меня не выводится как надо   smile 

Автор: cat512 6.4.2011, 00:12
Попробуй убрать код до тега h1.

Автор: fireofdeath 6.4.2011, 07:46
Я пробовал так, но без результата.

Автор: fireofdeath 8.4.2011, 18:27
А можно как-нибудь по другому вывести в WebBrowser информацию?

Автор: cat512 9.4.2011, 11:50
как вариант использовать Document.write
Код

procedure TForm1.btn1Click(Sender: TObject);
var
  Doc: IHTMLDocument2;
  E: IHTMLElement2;
  V: Variant;
  Arr: PVarArray;
begin
  wb1.Navigate('about:blank');
  Doc := (wb1.Document as IHTMLDocument2);

//Здесь используется вариант
//но лучше наверное через нативные функции типа SafeArrayCreate. SafeArrayCreateVector
  V := VarArrayCreate([0, 0], varVariant);
  V[0] := '<BODY><H1>HELLO</H1><table><tr><H2>Hello</H2></tr></table></BODY>';
  Arr := VarArrayAsPSafeArray(V);
  Doc.write(PSafeArray(Arr));
end;

Можно через IHtmlFragment

Автор: fireofdeath 12.4.2011, 10:02
Спасибо то, что нужно  smile 

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