📄 tabfig.m
字号:
for i = 1:numTabs,
butDownFcn = ['tabfig(''tabpress'', gcbf, ''' strings{i} ''', ' sprintf('%d',i) ')'];
leftEdge =...
sheetPos(1) + ...
selectionHoffset + ...
sum(tabWidths(1:i)) + ...
( (i-1) * deltaTabs );
posTab(1) = leftEdge;
posTab(3) = tabWidths(i+1);
addh=.0036;
posTab1(1)=posTab(1)/figWidth;
posTab1(2)=posTab(2)/figHeight;
posTab1(3)=posTab(3)/figWidth+addh;% %%%%%%%%%这里调整tab之间的间距%%%%%%%%%%%%
posTab1(4)=posTab(4)/figHeight; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tabs(i)= uipanel('Parent', hfig,...
'unit', 'norm',...
'borderwidth', 1,...
'Position', posTab1, ...
'ButtonDownFcn', butDownFcn,...
'tag', 'tabpanel'... %tab的panel的tag均为tabpanel
);
text(i) = uicontrol('Parent', tabs(i),...
'style', 'text',...
'unit', 'norm',...
'enable', 'inactive',...
'hittest', 'off',...
'string', strings{i}, ... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'HorizontalAlign', 'center', ... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'ButtonDownFcn', butDownFcn, ...
'position', [0.05,0.2,.9,.6] ,...
'fontunit', 'pixels',...
'foregroundcolor', [0 0 0] ,... %%%%%%%%%%%%这里改变tab字符的颜色%%%%%%%%%
'fontsize', 12, ... %%%%%%%%%%%%这里改变tab字符的大小%%%%%%%%%
'fontname', '宋体'); %%%%%%%%%%%%这里改变tab字符的字体%%%%%%%%%
selectorPos(i, :) = [ ...
leftEdge - selectionHoffset + leftBevelOffset + selectorLeftFudgeFactor ...
posTab(2) ...
posTab(3) + selectionHoffset - rightBevelOffset ...
selectorHeight ...
];
selectorPos(i,1)=selectorPos(i,1)+1; %%%%%%%%这里调整挡板位置%%%%%%%%%%%%%%%%%
selectorPos(i,2)=selectorPos(i,2)+.2;
selectorPos(i,3)=selectorPos(i,3)+3;
selectorPos(i,4)=selectorPos(i,4);
end
color.presscolor=get(hfig,'color'); %tab按下后的颜色
color.unpresscolor=[0.8055 0.7937 0.7471]; %tab未按下时的颜色
color.shadowcolor=[.1 .1 .2]; %阴影色
color.highlightcolor=[1 1 1]; %亮色
borderwidth=2; %边宽
bordertype='beveledout'; %效果,有beveledout etchedout beveledin etchedin etchedout none line
%==============================================================================
% 建立效果遮挡panel(由于tab标签在底板之上)
%==============================================================================
sheetPosActual = sheetPos;
sheetPosActual(4) = sheetPosActual(4) + topBevelOffset;
t32(1)=sheetPosActual(1)/figWidth;
t32(2)= posTab1(2)-.003;%;.945;
t32(3)=sheetPosActual(3)/figWidth-.0015;
t32(4)=.008;
sheet2 = uipanel( ...
'Parent', hfig, ...
'unit', 'norm',...
'borderwidth', 0,...
'position', t32, ...
'bordertype', 'beveledout',...
'tag', 'sheet2'...
);
set(sheet2,'visible','on')
%==============================================================================
% 创建挡板
%==============================================================================
selector = uicontrol( ...
'Parent', hfig, ...
'Style', 'text', ...
'tag', 'selector'...
);
set(selector,'userdata',figPos);
guidata(selector,color);
panel=findobj(hfig,'type','uipanel');
set(panel,'bordertype',bordertype,... %设定所有panel的视觉效果,如有不同在下面设定
'shadowcolor',color.shadowcolor,...
'highlightcolor',color.highlightcolor,...
'borderwidth',borderwidth,...
'back',color.unpresscolor);
set(panel(end),'tag','mainpanel',... %(MainPanel)设定主panel的tag,并设定MainPanel的颜色
'back',color.presscolor);
set(sheet2,...
'back', color.presscolor,...
'shadowcolor', color.presscolor,...
'highlightcolor', color.highlightcolor); %效果遮挡panel的颜色
ttext=findobj(hfig,'style','text');
set(ttext,'back',color.unpresscolor);
%==========================================================================
% 将相关数据存贮在据容器中
%==========================================================================
DialogUserData.tabs = tabs;
DialogUserData.selector = selector;
DialogUserData.selectorPos = selectorPos;
DialogUserData.selectionHoffset = selectionHoffset;
DialogUserData.selectionVoffset = selectionVoffset;
DialogUserData.leftBevelOffset = leftBevelOffset;
DialogUserData.rightBevelOffset = rightBevelOffset;
DialogUserData.deltaTabs = deltaTabs;
DialogUserData.activeTabNum = -1;
DialogUserData.callback = callback;
DialogUserData.strings = strings;
%==========================================================================
% 选择默认tab
%==========================================================================
DialogUserData = i_PressTab(hfig, DialogUserData, default_page);
%==========================================================================
% 存贮 user data.
%==========================================================================
i_SetDialogData(hfig, DialogUserData);
%==========================================================================
% 存贮默认值
%==========================================================================
set(hfig, 'DefaultUicontrolEnable', origDefaultUicontrolEnable);
%==========================================================================
% Function - 按下所选tab
%==========================================================================
function DialogUserData = i_PressTab(hfig, DialogUserData, pressedTabNum),
figPos = get(hfig, 'position');
figWidth=figPos(3);
figHeight=figPos(4);
posPressedTab = get(DialogUserData.tabs(pressedTabNum), 'position');
posPressedTab(1) = posPressedTab(1)*figWidth - DialogUserData.selectionHoffset;
posPressedTab(3) = posPressedTab(3)*figWidth + DialogUserData.selectionHoffset;
posPressedTab(4) = posPressedTab(4)*figHeight + DialogUserData.selectionVoffset;
t2(1)=posPressedTab(1)/figWidth;
t2(2)=posPressedTab(2);
t2(3)=posPressedTab(3)/figWidth;
t2(4)=posPressedTab(4)/figHeight;
selector=DialogUserData.selector;
color=guidata(selector);
presstext=get(DialogUserData.tabs(pressedTabNum),'children'); %按下后改变tab颜色
set(DialogUserData.tabs(pressedTabNum), 'unit','norm','position', t2,...
'back',color.presscolor);
set(presstext,'back',color.presscolor);
set(selector,'back',color.presscolor);
t2=DialogUserData.selectorPos(pressedTabNum,:); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t2(1)=t2(1)/figWidth;
t2(2)=t2(2)/figHeight;
t2(3)=t2(3)/figWidth;
t2(4)=t2(4)/figHeight;
set(DialogUserData.selector, ...
'unit','norm','position', t2 ... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
);
DialogUserData.activeTabNum = pressedTabNum;
%==========================================================================
% Function - 取消tab按下
%==========================================================================
function i_UnPressTab(hTab, nTab, DialogUserData),
figPos = get(gcf, 'Position'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figWidth=figPos(3);
figHeight=figPos(4);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
posTab = get(DialogUserData.tabs(nTab), 'Position');
posTab(1)=posTab(1)*figWidth;
posTab(3)=posTab(3)*figWidth;
posTab(4)=posTab(4)*figHeight;
posTab(1) = posTab(1) + DialogUserData.selectionHoffset;
posTab(3) = posTab(3) - DialogUserData.selectionHoffset;
posTab(4) = posTab(4) - DialogUserData.selectionVoffset;
posTab1(1)=posTab(1)/figWidth;
posTab1(2)=posTab(2);
posTab1(3)=posTab(3)/figWidth;
posTab1(4)=posTab(4)/figHeight;
selector=DialogUserData.selector;
color=guidata(selector);
set(DialogUserData.tabs(nTab), 'unit','norm','Position', posTab1,...
'back',color.unpresscolor);
set(get(DialogUserData.tabs(nTab),'children'),'back',color.unpresscolor); %取消按下时tab的颜色
%==========================================================================
% Function - 处理tab按下
%==========================================================================
function [DialogUserData, bModified] = ...
i_ProcessTabPress(hfig, DialogUserData, string, pressedTabNum),
%==========================================================================
% 初始化
%==========================================================================
bModified = 0;
tabs = DialogUserData.tabs;
activeTabNum = DialogUserData.activeTabNum;
if pressedTabNum == activeTabNum,
return;
end
i_UnPressTab(tabs(activeTabNum), activeTabNum, DialogUserData);
DialogUserData = i_PressTab(hfig, DialogUserData, pressedTabNum);
bModified = 1;
%==========================================================================
% Function - 确定tab的宽
%==========================================================================
function tabdims = i_DetermineTabDims(strings, font),
%==========================================================================
% 变量检查
%==========================================================================
if nargin == 1,
fontsize = get(0, 'DefaultUicontrolFontSize');
fontname = get(0, 'DefaultUicontrolFontName');
else
fontsize = font{2};
fontname = font{1};
end
%==========================================================================
% 创建图形
%==========================================================================
hfig = figure('Visible', 'off');
hText = uicontrol('Style', 'text', 'FontWeight', 'bold');
tabdims{1} = zeros(length(strings), 1);
for i=1:length(strings),
set(hText, 'String', strings{i});
ext = get(hText, 'Extent');
tabdims{1}(i) = ext(3) + 4;
end
tabdims{2} = ext(4) + 2;
delete(hfig);
%==========================================================================
% 改变图形大小
%==========================================================================
function figresize
selector=findobj(gcf,'tag','selector');
Pos0=get(selector,'userdata');
Pos1=get(gcf,'position');
set(selector,'userdata',Pos1);
if isempty(Pos0)
return
end
wid0=Pos0(3);hig0=Pos0(4);
wid1=Pos1(3);hig1=Pos1(4);
sca1=wid1/wid0;
sca2=hig1/hig0;
dataContainer = findobj(gcf,...
'Type', 'uicontrol', ...
'Style', 'text', ...
'Tag', 'TMWDlgDat@#' ...
);
data=get(dataContainer, 'UserData');
data.selectorPos(:,1)=data.selectorPos(:,1)*sca1;
data.selectorPos(:,2)=data.selectorPos(:,2)*sca2;
data.selectorPos(:,3)=data.selectorPos(:,3)*sca1;
data.selectorPos(:,4)=data.selectorPos(:,4)*sca2;
data.selectionHoffset=data.selectionHoffset*sca1;
data.selectionVoffset=data.selectionVoffset*sca2;
data.leftBevelOffset=data.leftBevelOffset*sca1;
data.rightBevelOffset=data.rightBevelOffset*sca2;
set(dataContainer,'userdata',data);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -