找回密码
 注册
Simdroid-非首页
楼主: cwit

【原创】一些经典guide编程

[复制链接]
 楼主| 发表于 2005-3-14 19:36:38 | 显示全部楼层 来自 上海

Re:【原创】一些经典guide编程

关于参数传递:
这个问题我在一年之前就遇到了,当时也想了很久,采用了各种办法。可以简介一下我的方法。
1. 尽量在内存中提取:方法有三种:① 采用function的varargin和varargout传送,② 存在handle的ApplicationData中,③保存在handles里面。当然还有其他方法。
2.存在硬盘上,采用save和load。
3.用全局变量,最次的办法,有时却是最好的办法。

关于handles:
实际上这个handles是MATLAB中GUI编程中最常用的一个句柄管理变量。
handles的生成:handles = guihandles( figurehandle );将figure中所有对象中“Tag”属性有值的句柄的handle采集在一起。handles是结构名,每个“Tag”域名里保持此对象的句柄。
handles的保存:guidata( figurehandle, handles );handles将保存在figure对象的“ApplicationData”的一个域名里。
handles的使用:handles = guidata( h );其中为figure中任意一个对象的句柄。
handles.SpeechSourceGui可能是一个figure的句柄,“userdata”是一个对象的属性,可以在其中存取任何数据。但是我不怎么用它,一则它只能存一个变量;二则它无法存入变量的名字,很难区分。

nargin,nargout,varargin,varargout:
nargin:输入参数的个数,主要用于两个方面:①判断输入参数的个数,如果输入参数个数不对,可以警告或其他处理;②根据参数个数的不同可以做不同的处理。如:
if nargin == 0
    error;
elseif nargin == 1
    …………
elseif nargin == 2
    …………
else
   warndlg( '……‘, ’‘,‘modal')
   return ;
end

nargout:输出参数的个数,用法同上。
varargin:输入参数的总和,保存为cell结构。提取方式如下:
    A = varargin{1} ;
    B = varargin{2:end} ;
varargout 输出参数。见到的最常见的用法是:
if nargout > 0
    varargout{1} =figurehandle ;
end
 楼主| 发表于 2005-3-14 19:41:29 | 显示全部楼层 来自 上海

Re:【原创】一些经典guide编程

Simdroid开发平台
关于:
try
  [varargout{1:nargout}] = feval(varargin{ : }); % FEVAL switchyard
catch
  disp(lasterr);
end

将所有的输入参数依次传入feval执行。然后依次返回结果。feval执行的是传入的第一个输入参数(一个函数名),然后把后面的参数依次作为这个函数的输入参数。feval实际上起到了一个函数转换器的作用。
当然用try结构是为了能够让代码安全运行,并返回错误信息。
dddlzg 该用户已被删除
发表于 2005-3-25 16:21:25 | 显示全部楼层 来自 上海普陀区
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2005-3-25 17:38:38 | 显示全部楼层 来自 上海

Re:【原创】一些经典guide编程

可能是matlab编译器的版本不一样吧,不兼容。只好委屈你读读代码了。
那一个例子有一些难和凌乱,建议你还是看其他的吧。
抱歉!
sjj101 该用户已被删除
发表于 2005-5-18 08:16:32 | 显示全部楼层 来自 福建厦门
提示: 作者被禁止或删除 内容自动屏蔽
sjj101 该用户已被删除
发表于 2005-5-18 08:19:55 | 显示全部楼层 来自 福建厦门
提示: 作者被禁止或删除 内容自动屏蔽
含笑的波浪 该用户已被删除
发表于 2005-6-1 16:34:49 | 显示全部楼层 来自 吉林长春
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2005-6-1 17:03:09 | 显示全部楼层 来自 上海

Re:【原创】一些经典guide编程

matlab的版本不一样,无法调用link_EditMultiUEParameter.dll 你看看其他例子吧。
xiaoxu1437 该用户已被删除
发表于 2005-6-13 22:24:22 | 显示全部楼层 来自 江苏无锡
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2005-9-29 21:24:46 | 显示全部楼层 来自 德国

Re:【原创】一些经典guide编程

楼主的东西真的是不错呀,是大家学习的好榜样!
因为开始要做课程设计,需要用到Matlab和Simulink,并且是关于控制方面的内容,具体一点儿是比较两种控制方法,一种是采用Ferraris-传感器对线性直接传动机构(linear direct actuation)进行控制,另一种方法是采用Kaskaden控制。一个小问题,举个简单的闭环控制的例子,输入是一个矩形脉冲波,经过一个2阶比例延迟系统,得到一个系统的输出。这个控制过程应该既可以用Simulink通过方块图来实现,也可以用Matlab通过程序设计来实现。而二者之间的相互联系则是通过Matlab中的众多的工具箱和Simulink库来完成的。不知到我的理解对不对。
 楼主| 发表于 2005-10-15 12:42:21 | 显示全部楼层 来自 上海

Re:【原创】一些经典guide编程

欢迎你来参加明年的“第三届MATLAB应用技术研讨会”,就在上海!
发表于 2005-11-27 00:26:13 | 显示全部楼层 来自 重庆沙坪坝区

Re:【原创】一些经典guide编程

CWIT兄:你好。曾经看到过你编译过一个关于《电弧炉对电网影响的仿真计算软件》,你用的是6.1的版本吧?它能否脱离开MATLAB环境运行呢?请问你用的MCC命令具体是怎样写的呢?因为我有一个6.1版本的小程序想进行编译,想脱离开MATLAB环境运行。另外要说明的是我的计算机里没装VC、C等其它语言。
bamboo389 该用户已被删除
发表于 2005-12-1 22:53:31 | 显示全部楼层 来自 同济大学
提示: 作者被禁止或删除 内容自动屏蔽
suiyuan4959 该用户已被删除
发表于 2006-2-24 20:52:33 | 显示全部楼层 来自 哈尔滨工程大学
提示: 作者被禁止或删除 内容自动屏蔽
wang__chong 该用户已被删除
发表于 2006-3-17 15:05:36 | 显示全部楼层 来自 江苏南京
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2006-3-19 10:11:05 | 显示全部楼层 来自 上海杨浦区

Re:【原创】一些经典guide编程

你修改如下吧:
cmenu = uicontextmenu;
hline = plot(1:10,'UIContextMenu',cmenu);
cb1 = ['set(gcbo,"LinetStyle","--")'];
cb2 = ['set(gcbo,"LinetStyle",":")'];
cb3 = ['set(gcbo,"LinetStyle","-")'];
item1 = uimenu(cmenu,'Label','dashed','Callback',cb1);
item2 = uimenu(cmenu,'Label','dotted','Callback',cb2);
item3 = uimenu(cmenu,'Label','solid','Callback',cb3);

gcbo的用法查help。
发表于 2006-3-19 12:15:03 | 显示全部楼层 来自 新加坡

Re:【原创】一些经典guide编程

wang__chong wrote:
请教各位MATLAB师兄:我编了一个简单的菜单程序,可是老有错
cmenu = uicontextmenu;
hline = plot(1:10,'UIContextMenu',cmenu);
cb1 = ['set(hline,"LinetStyle","--")']; %下面两行相同
cb2 = ['set(hline,"LinetStyle",":")'];
cb3 = ['set(hline,"LinetStyle","-")'];
item1 = uimenu(cmenu,'Label','dashed','Callback',cb1);
item2 = uimenu(cmenu,'Label','dotted','Callback',cb2);
item3 = uimenu(cmenu,'Label','solid','Callback',cb3);

请注意上面红色的部分,有两种错误:一是LinetStyle应该是LineStyle,二是那些看起来是双引号的都应该是两个单引号。

修改后的代码可以是下面这样,其中的hline可以换成cwit讲的gcbo:
  1. cmenu = uicontextmenu;
  2. hline = plot(1:10,'UIContextMenu',cmenu);
  3. cb1 = ['set(hline,[color=blue]''[/color]LineStyle[color=blue]''[/color],[color=blue]''[/color]--[color=blue]''[/color])'];
  4. cb2 = ['set(hline,''LineStyle'','':'')'];
  5. cb3 = ['set(hline,''LineStyle'',''-'')'];
  6. item1 = uimenu(cmenu,'Label','dashed','Callback',cb1);
  7. item2 = uimenu(cmenu,'Label','dotted','Callback',cb2);
  8. item3 = uimenu(cmenu,'Label','solid','Callback',cb3);
复制代码
wang__chong 该用户已被删除
发表于 2006-3-20 09:39:56 | 显示全部楼层 来自 江苏南京
提示: 作者被禁止或删除 内容自动屏蔽
wang__chong 该用户已被删除
发表于 2006-3-21 08:59:10 | 显示全部楼层 来自 江苏南京
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2006-3-21 09:35:48 | 显示全部楼层 来自 新加坡

Re:【原创】一些经典guide编程

wang__chong wrote:
taohe你好:
当我按你的指导修改并运行
cmenu = uicontextmenu;
hline = plot(1:10,'UIContextMenu',cmenu);
cb1 = ['set(gcbo,''LineStyle'',''--'')']; %下面两行相同
cb2 = ['set(gcbo,''LineStyle'','':'')'];
cb3 = ['set(gcbo,''LineStyle'',''-'')'];
item1 = uimenu(cmenu,'Label','dashed','Callback',cb1);
item2 = uimenu(cmenu,'Label','dotted','Callback',cb2);
item3 = uimenu(cmenu,'Label','solid','Callback',cb3);
得到如下错误:
??? Error using ==> set
Invalid uimenu property: 'LineStyle'.

??? Error while evaluating uimenu Callback.
真是焦头烂额了!

Please forget the setence about "gcbo" in my last post, just use the code I osted.

That is, don't use gcbo in the above code. Use hline.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 15:18 , Processed in 0.049345 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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