Copyright © Êðàñíîÿðñêèé ãîñóäàðñòâåííûé óíèâåðñèòåò 2003
Ôóíêöèÿ uicontrol äëÿ ðàçðàáîòêè èíòåðôåéñíûõ ïðîãðàìì
Êàê èç ôóíêöèè íà ÿçûêå matlab ïðèãîòîâèòü êîä íà ÿçûêå Ñè è èç íåãî
ïðèãîòîâèòü exe-ôàéë
Çàäà÷è
Ôóíêöèÿ uicontrol äëÿ ðàçðàáîòêè èíòåðôåéñíûõ ïðîãðàìì
Ôóíêöèÿ uicontrol ÿâëÿåòñÿ îñíîâíîé ôóíêöèåé äëÿ ðàçðàáîòêè èíòåðôåéñíûõ ïðîãðàìì.
Îíà ðàçìåùàåò â ïàìÿòè è âûñâå÷èâàåò íà óêàçàííîì ãðàôè÷åñêîì îêíå èíòåðôåéñíûå ýëåìåíòû.
Ñëåäóþùèå äâå ñòðîêè îòêðûâàþò ãðàôè÷åñêîå îêíî è ðàçìåùàþò íà íåì èíòåðôåéñíûé ýëåìåíò.
h1=figure;
hu=uicontrol(h1);
Òèï èíòåðôåéñíîãî ýëåìåíòà, åãî ðàçìåðû, ðàñïîëîæåíèå â ãðàôè÷åñêîì îêíå, öâåò è ò.ä.
îïðåäåëÿþòñÿ çíà÷åíèÿìè ïîëåé èíòåðôåéñíîãî îáúåêòà. Ïîñìîòðåòü âñå âîçìîæíûå ïîëÿ îáúåêòà
è èõ çíà÷åíèÿ ïî óìîë÷àíèþ ìîæíî êîìàíäîé set(hu).  ñëåäóþùåé òàáëèöå ïðèâîäÿòñÿ íåêîòîðûå
ïîëÿ èíòåðôåéñíûõ îáúåêòîâ è èõ âîçìîæíûå çíà÷åíèÿ. Çíà÷åíèÿ ïî óìîë÷àíèþ âûäåëåíÿ â
ôèãóðíûå ñêîáêè.
|
Ïîëå |
Íàçíà÷åíèå |
|
BackgroundColor |
Îïðåäåëÿåò öâåò îáúåêòà. |
|
FontUnits |
Åäèíèöû èçìåðåíèÿ ðàçìåðà øðèôòà. Âîçìîæíûå çíà÷åíèÿ [ inches | centimeters | normalized | {points} | pixels ] |
|
FontName |
Èìÿ øðèôòà. |
|
FontSize |
Ðàçìåð øðèôòà. |
|
Units |
Åäèíèöû èçìåðåíèÿ äëÿ ïîëîæåíèÿ ýëåìåíòà â ãðàôè÷åñêîì îêíå è åãî ðàçìåðîâ. Íà÷àëî ñèñòåìû êîîðäèíàò âñåãäà â ëåâîì íèæíåì óãëó. Âîçìîæíûå çíà÷åíèÿ [ inches | centimeters | normalized | points | {pixels} | characters ]. Îáû÷íî äëÿ ïîëÿ Units èñïîëüçóþò çíà÷åíèå normalized. Ïðè òàêîì âûáîðå â ëåâîì íèæíåì óãëó ãðàôè÷åñêîãî îêíà âñåãäà ðàñïîëîæåíà òî÷êà (0,0), à â ïðàâîì âåðõíåì (1,1). Ýòî ïîçâîëÿåò ñîçäàâàòü èíòåðôåéñû, íåçàâèñÿùèå îò ðàçðåøåíèÿ ìîíèòîðà è ôàêòè÷åñêîãî ðàçìåðà ãðàôè÷åñêîãî îêíà íà äèñïëåå.
|
|
Position |
Îïðåäåëÿåò ïîëîæåíèå ëåâîãî íèæíåãî óãëà ýëåìåíòà è åãî øèðèíó è âûñîòó. Çàäàåòñÿ âåêòîðîì èç ÷åòûðåõ ýëåìåíòîâ. Íàïðèìåð, ñòðîêà set(hu,'position',[0.1 0.1 0.4 0.5]); çàäàåò ëåâûé íèæíèé óãîë â òî÷êå (0.1,0.1) , øèðèíó 0.4 è âûñîòó 0.5. |
|
Style |
Îïðåäåëÿåò òèï èíòåðôåéñíîãî ýëåìåíòà. Âîçìîæíûå çíà÷åíèÿ [
{pushbutton} | togglebutton | radiobutton | checkbox | edit | text
| slider | frame | listbox | popupmenu ]. |
|
String |
Çàäàåò íàäïèñü íà èíòåðôåéñíîì ýëåìåíòå. |
|
UiContextmenu |
Ññûëêà íà âñïëûâàþùåå ìåíþ, ñâÿçàííîå ñ îáåêòîì. |
|
Callback |
Îïðåäåëÿåò èìÿ ôóíêöèè, êîòîðàÿ âûçûâàåòñÿ , êîãäà ñ îáúåêòîì ïðîèñõîäèò ñîáûòèå ( íàïðèìåð, ùåë÷îê ìûøè íà îáúåêòå). |
Íàïðèìåð, ÷òîáû ñîçäàòü èíòåðôåéñíûé îáúåêò òèïà togglebutton (êíîïêà ñ äâóìÿ ïîëîæåíèÿìè
- óòîïëåííàÿ è îòæàòàÿ) è íàïèñàòü ôóíêöèþ äëÿ îáðàáîòêè íàæàòèé íóæíî íàïèñàòü â ìàòëàáå
global ht
ht=uicontrol(h1,'style','togglebutton','callback','togl');.
Äëÿ îáðàáîòêè íàæàòèé íà êíîïêó íóæíî íàïèñàòü ôóíêöèþ togl, êîòîðàÿ ìîæåò âûãëÿäåòü ïðèìåðíî
òàê
function togl()
global ht
val=get(ht,'value');
if val==0 % êíîïêà îòæàòà
.
.
.
else %êíîïêà óòîïëåíà
.
.
.
end
Êîãäà ïðîèñõîäèò íàæàòèå íà êíîïêó togl, âûçûâàåòñÿ ôóíêöèÿ togl. Ýòà ôóíêöèÿ ïîëó÷àåò
óêàçàòåëü íà îáúåêò ht ÷åðåç îïåðàòîð global. Ôóíêöèÿ get ñ÷èòûâàåò çíà÷åíèå ïîëÿ 'value'
îáúåêòà ht. Ýòî ïîëå îïðåäåëÿåò ñîñòîÿíèå îáúåêòà togglebutton, 0 - êíîïêà îòæàòà,
1 - êíîïêà óòîïëåíà.
Ñëåäóþùèé ïðèìåð ðàçìåùàåò èíòåðôåéñíûé îáúåêò òèïà 'popup' è èïèñûâàåò ôóíêöèþ mycall
äëÿ îáðàáîòêè ñîáûòèé.
global hpop
hpop=uicontrol('style','popup','units','normalized','position',[0.1 0.1 0.4 0.05],...
'string','hsv|hot|cool|jet','callback',mycall');
Ôóíêöèÿ mycall âûãëÿäèò ïðèìåðíî òàê:
function mycall()
global hpop
val=get(hpop,'value');
switch val % âûáèðàåì âûñâå÷åííóþ ñòðîêó
case 1 % âûñâå÷åíà ïåðâàÿ ñòðîêà
.
.
.
case 2 % âûñâå÷åíà âòîðàÿ ñòðîêà
.
.
.
otherwise
.
.
.
end
Âèä ýëåìåíòà popup ïîêàçàí íà ðèñ. 3.1.
Ðèñ. 3.1
 êà÷åñòâå ïîëíîãî ïðèìåðà ïðèâåäó ïðîãðàììó äëÿ îòðèñîâêè ãðàôèêà çàäàííîé ôóíêöèè.
Âñå íåîáõîäèìûå èíòåðôåéñíûå ýëåìåíòû îòðèñîâûâàþòñÿ ôóíêöèåé graphic.m.
function graphic()
%#function myplot
global x0 dx xend fun
h1=figure;
a1=axes('units','normalized','position',[0.1 0.1 0.8 0.5]);
set(h1,'currentaxes',a1,'numbertitle','off','name','grafik f(t)');
xlabel('t');
ylabel('f');
pos=[0.1 0.7 0.1 0.05];
x0=uicontrol('style','edit','units','normalized','position',pos,'string','0');
pos1=[0.1 0.77 0.1 0.05];
dx=uicontrol('style','edit','units','normalized','position',pos1,'string','0.1');
pos2=[0.1 0.84 0.1 0.05];
xend=uicontrol('style','edit','units','normalized','position',pos2,'string','1');
pos3=[0.01 0.7 0.07 0.05];
uicontrol('style','text','units','normalized','position',pos3,'string','t0');
pos4=[0.01 0.77 0.07 0.05];
uicontrol('style','text','units','normalized','position',pos4,'string','dt');
pos5=[0.01 0.84 0.07 0.05];
uicontrol('style','text','units','normalized','position',pos5,'string','tend');
pos6=[0.01 0.91 0.07 0.05];
uicontrol('style','pushbutton','units','normalized','position',pos6,...
'string','plot','backgroundcolor',[1 0 0],'callback','myplot');
pos7=[0.3 0.91 0.5 0.05];
fun=uicontrol('style','edit','units','normalized','position',pos7,'string',...
'cos(2*pi*t).*exp(-t.^2)');
pos8=[0.2 0.91 0.08 0.05];
uicontrol('style','text','units','normalized','position',pos8,'string','f(t)=');
Âîò êàê âûãëÿäèò ðåçóëüòàò ðàáîòû ýòîé ôóíêöèè íà ýêðàíå.
Ïðè íàæàòèè êíîïêè plot âûçûâàåòñÿ ôóíêöèÿ myplot èç ôàéëà myplot.m,
êîòîðàÿ è îòðèñîâûâàåò ãðàôèê.
function myplot()
global x0 dx xend fun
s1=get(x0,'string');
s2=get(dx,'string');
s3=get(xend,'string');
s4=get(fun,'string');
sx=strcat('[',s1,':',s2,':',s3,']');
t=eval(sx); % âûïîëíÿåì ñòðîêó sx, êàê êîìàíäó ìàòëàáà è ðåçóëüòàò çàíîñèì â t.
%next string for compilation to the standalone application only
%you can to comment these string for work in matlab only
str=strrep(s4,'t',sx); % çàìåíà â ñòðîêå s4 ñèìâîëà t íà ñòðîêó sx
f=eval(str); % ñòðîêà str âûïîëíÿåòñÿ êàê êîìàíäà ìàòëàáà, à ðåçóëüòàò çàíîñèòñÿ â f
plot(t,f);
×èòàòåëþ ïðåäîñòàâëÿåòñÿ ñàìîñòîÿòåëüíî ðàçîáðàòü òåêñò ôóãíêöèè myplot. Çàìå÷ó ëèøü,
÷òî çàìåíà ñèìâîëà t â ñòðîêå s4 íà ñòðîêó sx ñâÿçàíà ñ òåì, ÷òî â äàëüíåéøåì
ôóíêöèÿ myplot áóäåò êîìïèëèðîâàòüñÿ â Cè êîä. Â ìàòëàá çàïðåùåíî êîìïèëèðîâàòü â Ñè
ôóíêöèè ñîäåðæàùèå âûçîâ ôóíêöèè eval ñî ñòðîêîé, ñîäåðæàùåé èìåíà ïåðåìåííûõ èç ðàáî÷åãî
ïðîñòðàíñòâà ìàòëàáà.
Êàê èç ôóíêöèè íà ÿçûêå matlab ïðèãîòîâèòü êîä íà ÿçûêå Ñè è èç íåãî
ïðèãîòîâèòü exe-ôàéë
Êàê ïðîèçâîäèòñÿ êîìïèëÿöèÿ ïðîãðàìì, íàïèñàííûõ íà ÿçûêå matlab, â êîä
íà ÿçûêå Ñè è çàòåì ãîòîâèòñÿ íåçàâèñèìîå exe-ïðèëîæåíèå ÿ ïîêàæó íà ïðèìåðå
ôóíêöèè graphic.m. Ïðåæäå âñåãî íåîáõîäèìî çàìåòèòü, ÷òî êîìïèëèðóþòñÿ òîëüêî ôóíêöèè
ìàòëàáà. Êîìïèëÿöèÿ îñóùåñòâëÿåòñÿ ñ ïîìîùüþ êîìïèëÿòîðà mcc.
Ïåðåä êîìïèëÿöèåé íåîáõîäèìî íàñòðîèòü êîìïèëÿòîð ñ ïîìîùüþ êîìàíäû mbuild -setup,
êîòîðóþ ìîæíî ââîäèòü ëèáî èç êîìàíäíîãî îêíà matlab , ëèáî èç êîìàíäíîé ñòðîêè Windows.
Âîò êàê âûãëÿäèò äèàëîã â êîìàíäíîì îêíå.
Ïîñëå íàñòðîéêè êîìïèëÿòîðà ìîæíî ïðèñòóïàòü ê êîìïèëÿöèè ñ ïîìîùüþ êîìàíäû.
mcc -m -B sgl graphic.m
Ïîñëå êîìïèëÿöèè â âàøåì ðàáî÷åì êàòàëîãå îáðàçóþòñÿ ôàéëû graphic.c è graphic.exe.
Ôàéë graphic.exe ÿâëÿåòñÿ íåçàâèñèìûì exe-ôàéëîì, êîòîðûé ìîæåò âûïîëíÿòüñÿ íåçàâèñèìî
îò ìàòëàáà. Îäíàêî, åñëè â âàøåé ñèñòåìå íå óñòàíîâëåí matlab, òî äëÿ âûïîëíåíèÿ exe-ôàéëîâ
íåîáõîäèìî èíñòàëëèðîâàòü dll áèáëèîòåêè ìàòäàáà. Îíè õðàíÿòñÿ â ñïåöèàëüíîì
ñàìîðàñïàêîâûâàþùåìñÿ àðõèâå mglinstaller.exe, êîòîðûé îáû÷íî õðàíèòñÿ â
%MATLAB%\extern\lib\win32.
Îáðàòèòå âíèìàíèå íà âòîðóþ ñòðîêó ôàéëà graphic.m.
%#function myplot
Âñå callback ôóíêöèè äîëæíû áûòü îáÿâëåíû ïîäîáíûì îáðàçîì, åñëè ôóíêöèÿ áóäåò êîìïèëèðîâàòüñÿ
â Ñè.
Çàäà÷è
1. Íàïèñàòü èíòåðôåéñíóþ ïðîãðàììó äëÿ âû÷èñëåíèÿ îïðåäåëåííûõ èíòåãðàëîâ. Ïîäèíòåãðàëüíàÿ
ôóíêöèÿ è ïðåäåëû èíòåãðèðîâàíèÿ äîëæíû ââîäèòüñÿ ñ èíòåðôåéñà.
2. Èñïîëüçóÿ èíòåðôåéñíûé ýëåìåíò popup ðàçðàáîòàòü èíòåðôåéñ "íàó÷íûé êàëüêóëÿòîð".
Âêëþ÷èòü èíòåðôåéñû äëÿ îòðèñîâêè îòðèñîâêè ãðàôèêîâ, âû÷èñëåíèÿ îïðåäåëåííûõ èíòåãðàëîâ,
âû÷èñëåíèÿ íåîïðåäåëåííûõ èíòåãðàëîâ, äèôôåðåíöèðîâàíèÿ çàäàííîé ôóíêöèè, ðàçëîæåíèÿ
ôóíêöèè â ðÿä Òýéëîðà â îêðåñòíîñòè çàäàííîé òî÷êè.
previous next home