Форум программистов, компьютерный форум, киберфорум
Наши страницы
letete
Войти
Регистрация
Восстановить пароль
Несколько сообщений о МАТЛАБ и о том, как им пользоваться.

Комментарии, критика и восторженное рукоплескание приветствуются в самой категоричной форме.
Оценить эту запись

использование HTML

Запись от letete размещена 03.07.2014 в 12:09
Обновил(-а) letete 16.07.2014 в 17:02

Подборка статей г-на Альтмана
на тему использования HTML в МАТЛАБ.
Перевод вольный, сохраняющий лишь суть проблемы,
опробованный и дополненный.

Отсылка к оригиналам:
original part 1original part 2original part 3

Часть 1.
Все графические элементы uicontrols МАТЛАБа основаны на компонентах Java Swing (недокументированный факт). Общей чертой всех свингов JLabels является допустимость использования форматирования в формате HTML (и CSS), поэтому в МАТЛАБ для элементов графической оболочки типа uicontrol можно указывать не только сам текст, но и стиль его отображения: все, что может быть отформатировано в HTML (шрифт, цвет, размер, ...). При этом теги не обязательно закрывать (<tag> ... </tag>). Хотя закрывать теги и не обязательно, все же весьма и весьма не красиво, когда этого не делают.
Вот пример разноцветного листбокса в МАТЛАБ:
Matlab M
1
2
3
4
uicontrol('Style','list', 'Position',[10,10,70,70], 'String', ...
{'<HTML><FONT color="red">Hello</Font></html>', 'world', ...
 '<html><font style="font-family:impact;color:green"><i>What a', ...
 '<Html><FONT color="blue" face="Comic Sans MS">nice day!</font>'});
Название: html11.png
Просмотров: 766

Размер: 1.7 Кб
Кроме того вот еще несколько примеров (меню, подсказки и комбобоксы):
Matlab M
1
2
3
4
5
6
uicontrol('Style','popup', 'Position',[10,10,150,100], 'String', ...
{'<HTML><BODY bgcolor="green">green background</BODY></HTML>', ...
 '<HTML><FONT color="red" size="+2">Large red font</FONT></HTML>', ...
 '<HTML><BODY bgcolor="#FF00FF"><PRE>fixed-width font'});
h = uicontrol('Style', 'pushbutton');
set(h, 'ToolTip', '<HTML><b>line #1</b><br><font color="red">line #2</font></HTML>')
Название: uimenu2.png
Просмотров: 652

Размер: 5.1 КбНазвание: html2.png
Просмотров: 826

Размер: 568 байтНазвание: html3.png
Просмотров: 784

Размер: 3.5 Кб

Часть 2.
Использование HTML-панели браузера
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
% Create a blank figure window
f=figure('Name','Browser GUI demo','Num','off','Units','norm');
 
% Add the browser object on the right
jObject = com.mathworks.mlwidgets.html.HTMLBrowserPanel;
[browser,container] = javacomponent(jObject, [], f);
set(container, 'Units','norm', 'Pos',[0.3,0.05,0.65,0.9]);
 
% Add the URLs listbox on the left
urls = {'www.cnn.com','www.bbc.co.uk','myLocalwebpage.html',...
        'www.Mathworks.com', 'undocumentedmatlab.com'};
hListbox = uicontrol('style','listbox', 'string',urls, ...
        'units','norm', 'pos',[0.05,0.05,0.2,0.9], ...
        'userdata',browser);
 
% Set the listbox's callback to update the browser contents
cbStr=['strs = get(gcbo,''string''); ' ...
      'url = strs{get(gcbo,''value'')};' ...
      'browser = get(gcbo,''userdata''); ' ...
      'msg=[''<html><h2>Loading '' url '' - please wait''];'...  % no need for </h2></html>
      'browser.setHtmlText(msg); pause(0.1); drawnow;'...
      'browser.setCurrentLocation(url);'];
set(hListbox,'Callback',cbStr);
Собсна, вот примерно результат: Нажмите на изображение для увеличения
Название: Browser.png
Просмотров: 533
Размер:	34.8 Кб
ID:	2569

Часть 3.
Немного оговорюсь: то, что описано во второй части не очень хорошо работает (возможно, из-за прокси, надо разбираться, исправлять...) Но вот гораздо больший интерес представляет следующая идея. Та панель, которая там использовалась, она может использоваться для вывода произвольного HTML-форматированного текста. Где это полезно: например, я делал GUI с такой панелью для параллельного вывода текста, таблиц и графиков (возможно, приведу свой конкретный пример, когда наберусь сил на это). Итак, суть:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
mytext = ['<html><body><table border="1">' ...
          '<tr><th>Month</th><th>Savings</th></tr>' ...
          '<tr><td>January</td><td>$100</td></tr>' ...
          '</table></body></html>'];
 
% Create a figure with a scrollable JEditorPane
hfig = figure();
je = javax.swing.JEditorPane('text/html', mytext);
jp = javax.swing.JScrollPane(je);
[hcomponent, hcontainer] = javacomponent(jp, [], hfig);
set(hcontainer, 'units', 'normalized', 'position', [0,0,1,1]);
здесь mytext - это по сути произвольная HTML-страничка и именно ее можно по своему усмотрению редактировать. Вот так это выглядит:
Нажмите на изображение для увеличения
Название: JEditorPane.png
Просмотров: 487
Размер:	11.2 Кб
ID:	2570
Есть один небольшой нюанс, который, наверно, стоит иметь ввиду: эта панель допускает редактирование содержимого пользователем, ну т.е. туда что-то выводишь, а пользователь может что-то дописать/удалить. Конечно, оно не сохранится нигде и при обновлении страницы все станет на свои места, но помнить о такой неприятности все же нужно, наверно...

Замечание.
И хотя г-н Альтман утверждает, что отформатировано может быть все, что допускает форматировать HTML, это все же не так. Интерпретатор HTML здесь достаточно урезанный. У меня были случаи, когда приходилось изобретать велосипед только потому, что некоторые инструкции HTML игнорировались. По мере вспоминания, что именно, где и как обойти - буду дополнять пост. Замечания, предложения по этому поводу также весьма недурственно было бы оставлять в комментариях.

Часть 4. От себя
Как всем, полагаю, известно, комментарии к функции (или классу) служат автоматически справкой по команде
Matlab M
1
2
3
help myfunc
% или
doc myfunc
. Кроме того, я думаю, что многие в курсе, что в созданной собственноручно справке можно добавить строчку "See also:" - это позволит включить ссылки на справку к похожим функциям, но не всегда это работает. Зацени:
Matlab M
1
2
3
4
5
6
7
function myfunc()
% if you will use big endian MYFUNC, that means MYFUNC will 
% highlight in help (or in doc browser)
% 
% See also: help, doc, ColorSpec
    disp('Hello world')
end
Например, здесь не работает ссылка на ColorSpec (наверно, потому что это не функция, а лишь страница из справки), но все равно хотелось бы иметь возможность гиперссылочного перехода на эту страницу. Можно поступить следующим образом. В окне браузера справки (doc myfunc) правой кнопкой вызываем контекстное меню и выбираем пункт "Page Source":
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 450
Размер:	41.5 Кб
ID:	2580
Внимательно смотрим как организована страница справки и делаем то же самое:
Matlab M
1
2
3
4
5
6
7
function myfunc()
% if you will use big endian MYFUNC, that means MYFUNC will 
% highlight in help (or in doc browser)
% 
% See also: help, doc, <a href="matlab:doc ColorSpec">ColorSpec</a>
    disp('Hello world')
end
Радуемся результату.
Размещено в МАТЛАБ
Просмотров 739 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru