水平附加对象你好,
我编写了一个小型图像查看器,用于在 JMP 9 中浏览数码照片文件夹,并包含以下脚本。我遇到的问题是,我希望在使用该工具时保留显示图像的列表框和图形框的相对位置。目前,当我从列表中选择一个图像替换原始图像时,新的图形框会附加到列表下方,而我希望它出现在我最初放置的位置——列表的右侧。我知道它为什么这样做:“<< append”属性会垂直附加新图表。问题是,我该如何修改脚本以水平附加它?
// 程序开始;
清除日志();
照片文件夹= “C:\我的照片\相机卡 1\102_FUJI\”;
图像列表= 目录中的文件(照片文件夹; // 每个文件都是 JPEG,因此无需过滤它们;
表达式_创建_图像= 表达式(
图像名称=照片文件夹||图像列表[图像编号] ;
英国= 图形框(
帧大小(410, 308 ),
X 比例( 0, 100 ),
和规模( 0, 100 ),
<<背景颜色( {0.7, 0.7, 0.7} ),
<<添加图像(打开(图像名称),边界(左边( 5 ), 正确的( 95 ),顶部(95 ),底部(5 ) ) )
);
// 我不想看到轴,所以把它们去掉;
gb [轴箱(2 )] <<删除;
gb [轴箱(1 )] <<删除;
);
表达式替换图表= 表达式(
西北[ OwnerBox (1 )] <<删除; // 从窗口中删除旧的;
西北<<附加( gb ); // 附加新的;
);
磅= 列表框(
图像列表,
图片编号=(磅<<获取选定的索引)[1];
评估(表达式创建图像; // 创建一个新的图形框;
评估(表达式替换图表; // 用新图替换旧图;
,
最大选定(1 )
);
图片编号= 1; // 最初显示第一个;
评估(表达式创建图像; // 创建图表;
磅<<设置选定(图像编号, 1 ); // 预先选择列表的第一个元素;
西北= 新窗口( “新窗口”, 水平列表框(磅,英国) ); // 并显示窗口;
//程序结束;
更概括地说,有没有一种方法可以简单地用新图表替换原始图表,而无需像我现在这样部分解构然后再重建显示窗口?显而易见的解决方案是简单地用从列表框中选择的新图像替换图形框中的初始图像,但我似乎无法做到这一点:在同一个图形框上再次使用“<<添加图像”属性似乎不起作用——这就是为什么我现在每次都要创建一个新的图形框。
非常感谢您的任何建议。
回复:水平方向追加对象这太棒了!我刚刚把上面的内容整合到我目前正在开发的一个应用程序中,用作通用图形文件浏览器。我可能唯一需要做的改动就是将 (410x308) 的宽高比调整为能够适应任何输入尺寸,因为我查看的图像可能包含 JMP 图形框的导出输出,而这些输出理论上可以是任意大小的。为什么不把上面的内容提交到文件交换中心呢?那里有一些关于使用图片框、在输出窗口中交换组件以及其他相关功能的实用示例。关键在于,不难想象它有许多潜在用途。
再次感谢!
水平方向追加对象这很有趣。为了避免应用变得臃肿,我还发布了一个带有旋转和缩放当前图像按钮的版本。按住 Alt 键可以反转这些功能。
图片列表= 文件在目录中(照片文件夹= 选择目录() ) ;
ImageNumber = 1 ;
Expr_pb = Expr ( pb = 配电箱 ( , 画盒 ( img ) ) ) ;
Expr_Create_Image = Expr (
ImageName = PhotoFolder || ImageList [ ImageNumber ] ;
img =打开(图像名称, jpg ) ;
img_size = img << getsize ;
如果( img_size [ 1 ] > img_size [ 2 ] ,
img <<设置大小( { 410 , 308 } ) ,
img <<设置大小( { 308 , 410 } )
);
Expr_pb ;
);
Expr_replace_image = Expr (
nw[配电箱( 1 )] << delete;
hlb << append ( pb ) ;
);
rotate =按钮框( "旋转" ,
如果(是 Alt 键() ,
img << rotate ( -90 ) ,
img << rotate ( 90 )
);
Expr_pb ;
Expr_replace_image ;
);
缩放= 按钮框( “缩放” )
如果(是 Alt 键() ,
img <<设置大小( 评估列表 ( {( img <<获取大小)[ 1 ] / 1.5 , ( img <<获取大小)[ 2 ] / 1.5 } ) ) ,
img << set size (评估列表( {( img << get size )[ 1 ] * 1.5 , ( img << get size )[ 2 ] * 1.5 } ) )
);
Expr_pb ;
Expr_replace_image ;
);
rotate << set tip ( "向右旋转 90°,按住 Alt 键向左旋转 90°" ) ;
飞涨<<设置提示( “按一下增大,按住 Alt 键减小” ) ;
磅= 列表框(
图片列表,
ImageNumber = ( lb <<获取选定的索引)[ 1 ] ;
Expr_Create_Image ;
Expr_replace_image ;,
最大选中数( 1 )
);
Expr_Create_Image ;
nw = 新窗口 ( “测试” , hlb = H 列表框 ( V 列表框 ( lb , rotate , zoom ) , pb ) ) ;
回复:水平方向追加对象太好了——这正是我需要的,而且还简化了操作。非常感谢!
回复:水平方向追加对象以下是一个使用图像的示例(对您最初想法的修改)<
图片列表= 文件在目录中(照片文件夹= 选择目录() ) ;
ImageNumber = 1 ;
Expr_Create_Image = Expr (
ImageName = PhotoFolder || ImageList [ ImageNumber ] ;
img =打开(图像名称, jpg ) ;
img_size = img << getsize ;
如果( img_size [ 1 ] > img_size [ 2 ] ,
img <<设置大小( { 410 , 308 } ) ,
img <<设置大小( { 308 , 410 } )
);
pb =图片框( img ) ;
bb =面板框( , pb ) ;
);
Expr_replace_image = Expr (
nw[配电箱( 1 )] << delete;
hlb << append ( bb ) ;
);
磅= 列表框(
图片列表,
ImageNumber = ( lb <<获取选定的索引)[ 1 ] ;
评估( Expr_Create_Image ) ;
评估( Expr_replace_image );,
最大选中数( 1 )
);
评估( Expr_Create_Image );
nw = 新窗口 ( “测试” , hlb = H 列表框 ( lb , bb ) ) ;
水平附加对象太棒了——非常感谢!(实际上,如果能找到一些方法在加载每张图片时确定其尺寸,就能让它更有用:如果能做到这一点,我每次都能用正确的长宽比创建每个图表,而不是像现在这样,把所有竖屏拍摄的照片都压缩成横屏。我现在暂时没找到办法做到这一点,但这并不意味着不可能。如果有人知道怎么做,能教教我吗?)
再次感谢,
大卫
水平附加对象很棒的小应用程序!我没有深入研究这个问题的普遍性(修改而不是替换 gb),但我做了一些小改动,似乎保留了水平布局。下面的脚本中,我只显示了修改的行。
...
Expr_Replace_Chart = 表达式 (
nw [ OwnerBox ( 1 )] <<删除; // 从窗口中删除旧的;
hlb << append ( gb ) ; // 将新的附加到 H 列表框
);
...
尝试( 评估 ( Expr_Create_Image )) ; //创建图表;//我将其包含在尝试中以避免第一次出现错误消息
...
净重= 新建窗口( "新建窗口" , hlb = H 列表框(磅 , gb ) ) ; // 并显示窗口;给 H 列表框一个引用
...