제목 : Re : 마우스 박스 여러 이미지 선택당신은 또한 JSL 함수 isShiftKey, isAltKey, isControlKey를 사용하여 red / white 결정을 관리 할 수 있습니다. 선택을 수집하는 루프는 버튼 릴리스에서 실행될 수 있습니다. 나는 그것이 "Release"라고 생각하고, 버튼 변수를 프린트하여 체크 아웃한다.
다시 : MouseBox 여러 이미지 선택올바른 길로 나를 설정해 주셔서 대단히 감사합니다.
코드를 약간 변경하여 사용자가 모든 것을 자동으로 선택 취소하는 대신 선택 또는 선택 취소를 선택할 수 있습니다.
그래서 다음 문제는 선택 추적과 함께 제공됩니다. 아래 코드를 참조하십시오. 작동하는 것처럼 보이지만 어색합니다.
mb << setclick(
Function( {this, coords, button},
If( button == "Pressed",
{pressedX, pressedY} = coords;
Try(
pressedBox = mb << getchildbox( {pressedX, pressedY} );
pressedBoxColor = pressedBox[2] << GetBackgroundColor;
);
,
{thisX, thisY} = coords;
xstart = Min( thisX, pressedX ) - 5;
xstop = Max( thisX, pressedX ) + 5;
xstep = 10;
ystart = Min( thisY, pressedY ) - 5;
ystop = Max( thisY, pressedY ) + 5;
ystep = 10;
// turn off all previous selections
//for( b=lb<<CHILD>= 2,
If( pressedBoxColor == "Red",
boxes[2] << setbackgroundcolor( "white" ),
boxes[2] << setbackgroundcolor( "red" )
)
);
)
);
)
)
);
selection = J( 1, 200, 0 );
counter = 0;
For( b = lb << child, !Is Empty( b ), b = b << sib,
counter++;
If( (b << getbackgroundcolor) == "Red",
selection[counter] = 1
);
);</CHILD>다시 : MouseBox 여러 이미지 선택
이 코드를 가져 오기 전에 페이지 상단에서 페이지 변환 기능을 해제해야 할 수도 있습니다. 마법은 마지막 몇 줄에 있습니다. 다른 모든 것이 설정되었습니다. 마지막으로, << getChildBox (location)은 마우스로 현재 마우스 위치까지 선택한 범위 내에서 픽셀 격자 (10 픽셀 X 및 Y)마다 루프에 사용됩니다. getChildBox는이 예제에서 픽셀이 비트 맵 (3 번째 상자)에 있는지 또는 테두리 (2 번째 상자)에 있는지 또는 마우스 상자 (1 번째 상자)의 라인업 하위에 있는지에 따라 1, 2 또는 3 개의 상자를 반환합니다. 두 번째 상자가 발견되면 빨간색 배경이됩니다. 또한 모든 상자가 흰색으로 지워지기 직전의 루프를 확인하십시오. 이 코드는 마우스 움직임과 타이머 틱 모두에서 실행됩니다. "button"인수는 함수가 호출 된 이유를 알려줍니다. 마우스 아래 위치를 누릅니다. lb [borderbox (1)] << getbackgroundcolor는 Release 이벤트가 발생할 때 상자가 빨간색인지 흰색인지를 알려줍니다. 텍스트 레이블도 추가 할 수 있습니다. 왼쪽 경계선 ... 아래쪽 값은 사진의 중앙을 맞추기 위해 사진 크기에 따라 설정됩니다. 텍스트가 추가되면 약간의 조정이 필요합니다.
더 많은 제어가 필요한 경우 그림 세그먼트와 쥐덫이있는 그래프 상자가 대안이 될 수 있습니다.
New Window( "selection test", mb = MouseBox( lb = Lineup Box( N Col( 10 ) ) ) );
// generate some pictures of various sizes
For( i = 1, i < 200, i++,
rows = Random Uniform( 10, 100 );
cols = Random Uniform( 10, 100 );
ls = (120 - cols) / 2;
rs = 120 - cols - ls;
ts = (120 - rows) / 2;
bs = 120 - rows - ts;
red = J( rows, cols, Random Uniform( 0, 1 ) );
green = J( rows, cols, Random Uniform( 0, 1 ) );
blue = J( rows, cols, Random Uniform( 0, 1 ) );
lb << append(
Border Box( sides( 15 ), Left( ls ), Right( rs ), top( ts ), bottom( bs ), New Image( "rgb", {red, green, blue} ) )
);
);
mb << setclickenable( 1 );
mb << setclick(
Function( {this, coords, button},
If( button == "Pressed",
{pressedX, pressedY} = coords,
{thisX, thisY} = coords;
xstart = Min( thisX, pressedX ) - 5;
xstop = Max( thisX, pressedX ) + 5;
xstep = 10;
ystart = Min( thisY, pressedY ) - 5;
ystop = Max( thisY, pressedY ) + 5;
ystep = 10;
// turn off all previous selections
For( b = lb << child, !Is Empty( b ), b = b << sib,
b << setbackgroundcolor( "white" )
);
// test points in the selection box
For( x = xstart, x <= xstop, x += xstep,
For( y = ystart, y <= ystop, y += ystep,
boxes = mb << getchildbox( {x, y} );
If( N Items( boxes ) >= 2,
boxes[2] << setbackgroundcolor( "red" )
);
)
);
)
)
);
여러 이미지를 선택하는 MouseBox마우스 상자를 사용하여 여러 이미지를 선택하고 싶습니다.
아래는 한 번에 하나씩 이미지를 선택할 수있는 방법을 보여주는 스크립트 예제입니다. 그러나 잠재적으로 수백 장의 사진이있을 수 있으므로 사용자가 각 이미지를 클릭하는 대신 드래그 기능으로 여러 이미지를 선택할 수 있기를 바랍니다. 팁이 있습니까?
Names Default To Here( 1 );
//dtFull contains image path information
dtFull = Current Data Table();
path1 = dtFull:LocalPath[20];
path2 = dtFull:LocalPath[21];
path3 = dtFull:LocalPath[22];
path4 = dtFull:LocalPath[23];
img = New Image( path1 );
img2 = New Image( path2 );
img3 = New Image( path3 );
img4 = New Image( path4 );
selected = [0, 0, 0, 0];
New Window( "test",
H List Box(
vlb = V List Box(
mb = MouseBox(
pb = Picture Box( img ),
<<SETCLICKENABLE></SETCLICKENABLE>