<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />MouseBoxes很难。 我正在尝试实施拖放解决方案来移动图片。
下面我从Scripting Index >> Mouse Box >> SetDropTrack中获取了示例代码,并重新实现它以包含框中的图像而不是字母。 掉线后我无法将图像填入新位置。 任何帮助,将不胜感激。
名称默认为此处 ( 1 ) ;
// Datatable with:LocalPath包含计算机上图像文件路径的列
dtFull = 当前数据表 () ;
PATH1 = dtFull : 了localPath [ 20 ] ;
路径2 = dtFull : 了localPath [ 21 ] ;
path3时, = dtFull : 了localPath [ 22 ] ;
PATH4 = dtFull : 了localPath [ 23 ] ;
PATH5 = dtFull : 了localPath [ 20 ] ;
path6 = dtFull : 了localPath [ 21 ] ;
path7 = dtFull : 了localPath [ 22 ] ;
path8 = dtFull : 了localPath [ 23 ] ;
IMG = 新图片 ( PATH1 ) ;
IMG2 = 新图片 ( 路径2 ) ;
IMG3 = 新图片 ( path3时, ) ;
IMG4 = 新图片 ( PATH4 ) ;
IMG5 = 新图片 ( PATH1 ) ;
img6 = 新图片 ( 路径2 ) ;
IMG7 = 新图片 ( path3时, ) ;
img8 = 新图片 ( PATH4 ) ;
//下面是修改后的脚本索引>> SetDropTrack示例
nextToBlank = 功能 ( { X , ÿ } , / *辅助函数* /
如果 ( / *孩子是边界,孙子是文字* /
( X > 1 & 是空的 ((( 难题 [ X - 1 ] [ ÿ ] << 儿童 ) << 儿童 ) << 的getImage )) | ( X < 3 & 是空的 ((( 难题 [ X + 1 ] [ ÿ ] << 儿童 ) << 儿童 ) << 的getImage ))
| ( ÿ > 1 & 是空的 ((( 难题 [ X ] [ ÿ - 1 ] << 儿童 ) << 儿童 ) << 的getImage )) | ( ÿ < 3 & 是空的 ((( 难题 [ X ] [ ÿ + 1 ] << 儿童 ) << 儿童 ) << 的getImage ))
,
1 ,
0
)
) ; / *只允许在空单元格隔壁开始拖动* /
dragBegin = 功能 ( { 这个 , clickPt } ,
{ X , ÿ } = 这个 << getUserData ;
打印 ( “dragBegin” ) ;
如果 ( nextToBlank ( X , ÿ ) ,
图片 = (( 这个 << 儿童 ) << 儿童 ) << 的getImage / *消息是文本框内容* /
, / * else * /
0 / *抑制阻力* /
) ;
) ; / *函数从源单元格中删除字符,但仅在删除成功时* /
dragEnd = 功能 ( { 这个 , clickPt ,怎么样 } , / *如何复制/移动/忽略* /
destbox = 这个 << getDestBox ;
如果 ( 是空的 ( destBox ) ,
节目 ( “未知目的地” ) ;
0 / *不知道dest的位置,强制忽略* /
;
,
尝试 (
{ X , ÿ } = destbox << GetUserData ,
X = - 1 ;
ÿ = - 1 ;
) ; / * destbox可能没有userdata中的列表* /
如果 (
尝试 (
难题 [ X ] [ ÿ ] != destbox ,
1 / * throw与!= * /相同
)
, / * x,y可能不是有效索引* /
节目 ( “没有放弃这个难题” ) ;
0 / *不是这个拼图实例,强制忽略* /
;
, / * else * /
如果 ( 怎么样 == “忽视” ,
节目 ( “没完成” ) ;
0 / *下降未完成* /
;
, / * else * /
(( 这个 << 儿童 ) << 儿童 ) << setImage ( “” )
)
) ;
) ;
0 / *返回代码被忽略* /
;
) ; / *函数来决定是否允许丢弃。 返回码(0,1)是至关重要的。* /
dropTrack = 功能 ( { 这个 , clickPt } ,
sourcebox = 这个 << getSourceBox ;
如果 ( 是空的 ( sourcebox ) ,
节目 ( “未知来源” ) ;
0 / *未知来源框没有掉落* /
;
, / * else * /
尝试 (
{ X , ÿ } = sourcebox << getUserData ,
X = - 1 ;
ÿ = - 1 ;
) ; / *源框可能没有userdata中的列表* /
如果 (
尝试 (
难题 [ X ] [ ÿ ] != sourcebox ,
1 / * throw与!= * /相同
)
, / * x,y可能不是有效索引* /
节目 ( “不是来自这个难题” ) ;
0 / *不是来自这个谜题实例,忽略* /
;
, / * else * /
如果 ( !是空的 ((( 这个 << 儿童 ) << 儿童 ) << 的getImage ) ,
0 / *占用单元没有下降* /
, / * else * /
1 / *允许删除空白单元格* /
)
) ;
) ;
) ; / *函数实现drop * /
dropCommit = 功能 ( { 这个 , clickPt ,图片 } ,
(( 这个 << 儿童 ) << 儿童 ) << setImage ( 图片 ) ;
1 ; / *忽略* /
) ; / *光标更换器可以获取拖动的单元格* /
跟踪 = 功能 ( { 这个 , clickPt } ,
{ X , ÿ } = 这个 << getUserData ;
如果 ( nextToBlank ( X , ÿ ) ,
这个 << 的setCursor ( “手” ) ,
这个 << 的setCursor ( “箭头” )
) ;
1 ; / *忽略* /
) ; / *辅助函数构造显示框树* /
MB = 功能 ( { 信件 , X , ÿ } ,
MouseBox (
边框 ( 剩下 ( 9 ) ,对 ( 9 ) ,最佳 ( 3 ) ,底部 ( 3 ) ,双方 ( 15 ) ,
图片框 ( 信件 )
) ,
<< setUserData来 ( 评估列表 ( { X , ÿ } ) ) , / *记住我的位置。 我不动,但我的内容发生了变化。* /
<< setDragEnable ( 1 ) ,
<< setDragBegin ( dragBegin ) , / * dragFunctions定义如下* /
<< setDragEnd ( dragEnd ) ,
<< setDropEnable ( 1 ) ,
<< setDropTrack ( dropTrack ) ,
<< setDropCommit ( dropCommit ) ,
<< setTrackEnable ( 1 ) ,
<< setTrack ( 跟踪 )
)
) ;
难题 = 评估列表 (
{ 评估列表 ( { MB ( IMG , 1 , 1 ) , MB ( IMG2 , 1 , 2 ) , MB ( “” , 1 , 3 )} ) ,
评估列表 ( { MB ( IMG3 , 2 , 1 ) , MB ( IMG4 , 2 , 2 ) , MB ( IMG5 , 2 , 3 )} ) ,
评估列表 ( { MB ( img6 , 3 , 1 ) , MB ( IMG7 , 3 , 2 ) , MB ( img8 , 3 , 3 )} )}
) ;
新窗户 ( “难题” ,
边框 ( 剩下 ( 五 ) ,对 ( 五 ) ,最佳 ( 五 ) ,底部 ( 五 ) ,双方 ( 15 ) ,
阵容箱 ( N Col ( 3 ) ,间距 ( 3 , 3 ) ,
难题 [ 1 ] [ 1 ] ,
难题 [ 1 ] [ 2 ] ,
难题 [ 1 ] [ 3 ] ,
难题 [ 2 ] [ 1 ] ,
难题 [ 2 ] [ 2 ] ,
难题 [ 2 ] [ 3 ] ,
难题 [ 3 ] [ 1 ] ,
难题 [ 3 ] [ 2 ] ,
难题 [ 3 ] [ 3 ] ,
)
)
) ;
很近!剪贴板仅设置为移动文本,而不是其他JMP对象。 您可以将图片转换为大块文本并将其移动到剪贴板中。 (您还可以使用关联数组的字符键来构建不同的机制,可能使用关联数组来保存图像。 它看起来会更复杂,但在剪贴板/ CPU上压力更小。 如果你拖出拼图,进入另一个编辑器,你会看到大量的文本。)
字符转换使您的代码开始工作:
image = char(((this << child)<< child)<< getImage); / *消息是文本框内容* /
图片;
和
图像解析=(图像);
((本<<孩子)<<孩子)<< setimage(图像);