- 积分
- 86
- 注册时间
- 2004-12-22
- 仿真币
-
- 最后登录
- 1970-1-1
|
这次做得比较完整一点,默认参数从文件加载,可以保存参数文件,可以选择参数文件加载,点确定后参数文件存为simu.cfg,参数文件都是txt格式的。
文本编缉做的不太好,键盘响应部分我预留出来了,有兴趣的朋友可以帮我改一改。
function h=simcfg
%MSFlexGrid,双击输入,单击或回车确认,双击后未输入字符则原字符保存,BackSpace删除
% by nostalgica;email:nostalgica@163.com
ID='MSFlexGridLib.MSFlexGrid';
fig=figure('NumberTitle','off','toolbar','none','menubar','none','Name','参数配置','pos',[159 150 700 500],'visible','off','resize','off');
h = actxcontrol(ID,[0 50 700,450],fig,@gridhandler);
uicontrol(fig,'string','设为默认值','unit','norm','pos',[.07 .02 .2 .06],'callback',{@defaultValue,h});
uicontrol(fig,'string','加载参数配置文件','unit','norm','pos',[.3 .02 .2 .06],'callback',{@loadValue,h});
uicontrol(fig,'string','另存参数配置文件','unit','norm','pos',[.53 .02 .2 .06],'callback',{@saveValue,h});
uicontrol(fig,'string','确定','unit','norm','pos',[.76 .02 .2 .06],'callback',{@confirm,h});
rows=40;
set(h,'rows',rows,'cols',2);
set(h,'row',0,'col',1,'text',' 取值');
set(h,'ColWidth',1,7050);
set(h,'format','* 参数名称 *');%标题
% set(h,'TextStyle', 'flexTextInsetLight');
defaultValue(0,0,h);
%========找一个数据交换的地方=========
atxdata{1}=get(h,'text');
atxdata{2}=[get(h,'row') get(h,'col')];
uicontrol(fig,'style','text','tag','datacontainer','visible','off','userdata',atxdata);%存放临时数据
%=====================================
set(fig,'visible','on');
function gridhandler(varargin)
%varargin{1}:object (com,progid)
%varargin{2}:event id
%varargin{3}:event args
%varargin{4}:event name
switch varargin{2}
%-----------------------------------
case -600, %single click
[h,prow,pcol,ptext,datacontainer,atxdata]=dataprepare(varargin);
row=get(h,'row');col=get(h,'col');
rowsel=get(h,'rowsel');colsel=get(h,'colsel');%rowsel,colsel与row,col构成一矩形区为选定区
set(h,'row',prow,'col',pcol);
if length(ptext)~=0
if ptext(end)=='|'
if length(ptext)==1
atxdata{1}=atxdata{3};
else
atxdata{1}=ptext(1:end-1);
end
set(h,'text',atxdata{1});
end
end
set(h,'row',row,'col',col,'rowsel',rowsel,'colsel',colsel);
atxdata{2}=[row col];
set(datacontainer,'userdata',atxdata);
%-----------------------------------
case -601,%Dbclick
[h,prow,pcol,ptext,datacontainer,atxdata]=dataprepare(varargin);
atxdata{3}=get(h,'text');
atxdata{1}='|';
set(h,'text',atxdata{1});
set(datacontainer,'userdata',atxdata);
%-----------------------------------
%case -602, %keypress
%-----------------------------------
case -603, %charpress
[h,prow,pcol,ptext,datacontainer,atxdata]=dataprepare(varargin);
text=get(h,'text');
newchar=char(varargin{3});
if strcmp(newchar,char(13))==1%回车
if length(text)==1
set(h,'text','');
atxdata{1}=[];
set(datacontainer,'userdata',atxdata);
else
set(h,'text',text(1:end-1));
end
return
end
if strcmp(newchar,char(8))==1%Back Space
if length(text)>1
atxdata{1}=[text(1:end-2),'|'];
set(h,'text',atxdata{1});
end
set(datacontainer,'userdata',atxdata);
return
end
if length(text)~=0
if text(end)=='|'
if length(text)==1
atxdata{1}=[newchar,'|'];
else
atxdata{1}=[text(1:end-1),newchar,'|'];
end
set(h,'text',atxdata{1});
set(datacontainer,'userdata',atxdata);
end
end
%-----------------------------------
%case -604, %keypress
%-----------------------------------
%case -605, %mouse down
%-----------------------------------
%case -606, %mouse move
%-----------------------------------
%case -607, %mouse up
%-----------------------------------
end
function [h,prow,pcol,ptext,datacontainer,atxdata]=dataprepare(event)
datacontainer=findobj('style','text','tag','datacontainer');
datacontainer=datacontainer(end);
atxdata=get(datacontainer,'userdata');
h=event{1};
prow=atxdata{2}(1);
pcol=atxdata{2}(2);
ptext=atxdata{1};
function defaultValue(hobject,eventdata,handles)
h=handles;
try
[name value]=textread('simudefault.cfg', '%s %s');
setValue(h,name,value);
catch
errordlg('无法加载默认参数配置文件','');
end
function loadValue(hobject,eventdata,handles)
h=handles;
[file path]=uigetfile('*.cfg');
if(file==0)
return
end
try
[name value]=textread([path file], '%s %s');
setValue(h,name,value);
catch
errordlg('格式错误','');
end
function saveValue(hobject,eventdata,handles)
h=handles;
figures=get(0,'userdata');
[file path]=uiputfile([figures.mainpath 'simu.cfg']);
if(file==0)
return
end
fid = fopen([path file],'wt');
for (i=1:get(h,'rows')-1)
for(j=0:get(h,'cols')-1)
if(j~=get(h,'cols')-1)
fprintf(fid,'%s ', get(h,'TextMatrix',i,j));
else
fprintf(fid,'%s\n', get(h,'TextMatrix',i,j));
end
end
end
fclose(fid);
function confirm(hobject,eventdata,handles)
h=handles;
figures=get(0,'userdata');
fid = fopen('simu.cfg','wt');
for (i=1:get(h,'rows')-1)
for(j=0:get(h,'cols')-1)
if(j~=get(h,'cols')-1)
fprintf(fid,'%s ', get(h,'TextMatrix',i,j));
else
fprintf(fid,'%s\n', get(h,'TextMatrix',i,j));
end
end
end
fclose(fid);
delete(get(gcbo,'parent'))
function setValue(h,name,value)
for i=1:length(value)
set(h,'row',i,'col',0,'text',name{i});
set(h,'row',i,'col',1,'text',value{i});
set(h,'CellAlignment',0)
end
[ 本帖最后由 nostalgica 于 2006-9-2 14:35 编辑 ] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
评分
-
1
查看全部评分
-
|