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