再:MouseBox複数の画像を選択するまた、JSL関数のisShiftKey、isAltKey、isControlKeyを使用して赤と白の決定を管理することもできます。 選択範囲を集めるためのループは、ボタンを離したときに実行できます。 私はそれが「リリース」だと思います、チェックするボタン変数を印刷します...机から離れて...
再:複数の画像を選択するマウスボックス正しい道に私を設定してくれてありがとう。
ユーザーがすべてを自動的に選択解除する代わりに、選択または選択解除を選択できるように、コードを少し変更しました。
だから、次の問題は、選択の追跡に伴うと思います。 以下のコードを参照してください、それは動作するようですが、それはちょうど私にとって厄介な感じです。
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>再:複数の画像を選択するマウスボックス
このコードを取得する前に、ページ上部のページ変換機能をオフにする必要がある場合があります。 魔法は最後の数行にあります。それ以外はすべて設定されています。 最後に、<< getChildBox(location)は、現在のマウス位置までマウスで選択された範囲内のピクセルのグリッド(XおよびYピクセル10個ごと)のループで使用されています。 この例では、ピクセルがビットマップ(3番目のボックス)にあるか、境界(2番目のボックス)にあるか、マウスボックスのラインアップの子(1番目のボックス)にあるかによって、getChildBoxは1、2、または3ボックスを返します。 2番目のボックスが見つかった場合は、背景が赤になります。 また、その直前のループがすべてのボックスを白にクリアしていることに注目してください。 このコードは、マウスの動きとタイマーティックの両方で実行されます。「ボタン」引数は、関数が呼び出される理由を示します。 Pressedは、マウスダウンの場所です。 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" )
);
)
);
)
)
);
複数の画像を選択するマウスボックスマウスボックスを使用して複数の画像を選択したい。
以下は、一度に1つの画像を選択する方法を示すスクリプトの例です。 しかし、潜在的に数百枚の写真が存在する可能性があるため、ユーザーは各画像をクリックする代わりに、ドラッグ機能を使用して複数の画像を選択できるようにしたいと考えています。 任意のヒント?
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>