找回密码
 注册
Simdroid-非首页
查看: 473|回复: 4

[分享]Activex-MSFlexGrid做的数据输入界面。

[复制链接]
发表于 2005-9-19 13:21:46 | 显示全部楼层 |阅读模式 来自 陕西西安
这次做得比较完整一点,默认参数从文件加载,可以保存参数文件,可以选择参数文件加载,点确定后参数文件存为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

查看全部评分

 楼主| 发表于 2005-9-19 13:23:35 | 显示全部楼层 来自 陕西西安

Re:[分享]Activex-MSFlexGrid做的数据输入界面。

Simdroid开发平台
代码与参数文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2005-9-19 18:54:58 | 显示全部楼层 来自 新疆乌鲁木齐

Re:[分享]Activex-MSFlexGrid做的数据输入界面。

请教nostalgica,如果我想用你这种方式来做有限元程序的初始输入参数,由于节点数很多,有时想用zeros或者ones命令,能否再象结构数组一样被传入且由系统识别,抱歉我没有尝试你的程序就发问,实在是老兄你发的贴子没有一时半会儿估计掌握不了,还是你介绍下吧:D
还有就是你用的是7.0.4吧,我在6.5.1下第七行就没调试成功...:(
??? Error using ==> actxcontrol
Event handler name must be a string or cell array.

Error in ==> D:\MATLAB6.5.1\work\simwe论坛上有意思的问题\nostalgica写的参数输入界面\sim2.m
On line 7  ==> h = actxcontrol(ID,[0 50 700,450],fig,@gridhandler);
 楼主| 发表于 2005-9-19 23:50:45 | 显示全部楼层 来自 陕西西安

Re:[分享]Activex-MSFlexGrid做的数据输入界面。

我的数据文件是txt的文件。通过这个activex控件读txt文件,参数也是保存为txt文件。
hamhamham 该用户已被删除
发表于 2005-12-8 19:58:35 | 显示全部楼层 来自 湖北武汉
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-28 05:57 , Processed in 0.054387 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表