• 0
nassl

Символы векторов

Вопросы

Хочется вывести кусочек  математического  текста  (должны быть значки векторов над буквами \vec(F) - латех)   на форму  в перемежку с парой картинок. 
Конечно, идеально иметь компонент с Latex, но вряд ли появится. 
Пока смог придумать генерировать html текст и кидать его  в  WebBrowser.

Еще вопрос: Слой на котором лежит компонент  TWebBrowser должен обработать жест "влево". 
Этот жест не проходит если WebBrowser. Visible:=true, причем WebBrowser. HitTest:=false.
Как справить?

try
HTMLPage.Add('<!DOCTYPE html>');
HTMLPage.Add('<html>');
HTMLPage.Add('<head>');
HTMLPage.Add('<style type=''text/css''>');
HTMLPage.Add('.arrow {margin-left: -13px;}');
HTMLPage.Add('.arrow::before {content:''\2192''; position:  relative; top: -11px;left: 13px;}');
HTMLPage.Add('</style>');
HTMLPage.Add('</head>');
HTMLPage.Add('<body>');
HTMLPage.Add('<p>some text <span class="arrow">F</span> some text</p>');
HTMLPage.Add('</body>');
HTMLPage.Add('</html>');

TemporaryFileName:=TPath.GetTempPath+TEMP_FILE_NAME;
HTMLPage.SaveToFile(TemporaryFileName);
WebBrowser1.URL:=Format(FILE_URL_OPEN_FILE,[TemporaryFileName]);
finally
HTMLPage.Free;

получается такой html 

<!DOCTYPE html>
<html>
<head>
<title>Проба</title>
<style type='text/css'>
.arrow {margin-left: -13px;}
.arrow::before {content:'\2192'; position:  relative; top: -11px;left: 13px;}
</style>
</head>
<body>
<p>some text <span class="arrow">F</span> some text</p>
</body>
</html>

Проблема в том, что WebBrowser  эту страницу выводит без учета стилей css, хотя в обычном браузере все хорошо.

Как можно решить проблему? 

/need help/

 

 

Изменено пользователем nassl

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 ответа на этот вопрос

  • 0

Как вариант, можно рисовать вектора да и все, что угодно, в событии OnPaint

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Конечно, глядя на эти костыли, хочется рыдать под одеялом. Поэтому улучшения приветствуются!
Но этот код работает в TWebBrowser.  Получается строка эквивалентная Latex'у 

m_1\vec{V}_1+m_2\vec{V}_2=m_1\vec{V}_1+m_2\vec{V}_2

Еще вопрос: Слой на котором лежит компонент  TWebBrowser должен обработать жест "влево".  
Этот жест не проходит если WebBrowser. Visible:=true, причем WebBrowser. HitTest:=false.
Как справить?  

 

const
TEMP_FILE_NAME ='temp.html';
FILE_URL_OPEN_FILE ='file:/%s';
var
HTMLPage :TStringList;
TemporaryFileName: string;
FS: UnicodeString;

begin

FS:='m<span class="_">1</span><span class="vec"><span class="arrow">&rarr;</span>V<span class="_">1</span></span> +'
+'m<span class="_">2</span><span class="vec"><span class="arrow">&rarr;</span>V<span class="_">2</span></span> ='
+'m<span class="_">1</span><span class="vec"><span class="arrow">&rarr;</span>V<span class="_">1</span></span> +'
+'m<span class="_">2</span><span class="vec"><span class="arrow">&rarr;</span>V<span class="_">2</span></span>';


HTMLPage:=TStringList.Create;
try
HTMLPage.Add('<!DOCTYPE html>');
HTMLPage.Add('<html>');
HTMLPage.Add('<head>');
HTMLPage.Add('<title>Test</title>');
HTMLPage.Add('<meta charset="UTF-8">');
HTMLPage.Add('<style type=''text/css''>');
HTMLPage.Add('.arrow{position: absolute;  bottom:11px;}');
HTMLPage.Add('.vec{position: relative;}');
HTMLPage.Add('._{font: 80% sans-serif; position:  relative; bottom: -8px;}');
HTMLPage.Add('.^{font: 80% sans-serif; position:  relative; bottom: 8px;}');
HTMLPage.Add('</style>');
HTMLPage.Add('</head>');
HTMLPage.Add('<body>');
HTMLPage.Add('<p>Formulae:'+FS+'</p>');
HTMLPage.Add('</body>');
HTMLPage.Add('</html>');

TemporaryFileName:=TPath.GetTempPath+TEMP_FILE_NAME;
HTMLPage.SaveToFile(TemporaryFileName);
WebBrowser1.URL:=Format(FILE_URL_OPEN_FILE,[TemporaryFileName]);
finally
HTMLPage.Free;

 

aaaas.png

Изменено пользователем nassl

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Можно попробовать использовать обычный контрол и символы юникода http://www.fileformat.info/info/unicode/char/20d7/index.htm

Попробовал ради интереса - Memo1.Lines.Add('v' + Char($20d7) + ' + ' + 'V' + Char($20d7));

Но результат не очень. То ли Дельфи не очень работает с комбинируемыми символами, толи шрифт надо подобрать (я на дефолтном пробовал).

image.thumb.png.3ec1992d9614c91f841d165d1b66fb1c.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу