マウスボックス リストボックス ドラッグ アンド ドロップ
Re: マウスボックス リストボックス ドラッグ アンド ドロップ<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />ありがとう。
Re: マウスボックス リストボックス ドラッグ アンド ドロップsetKey は、クリック/トラック/ドラッグ ハンドラーと同様のキーストローク ハンドラーです。キーストローク。GetUserData が必要なものです。複数の値が必要な場合は、連想配列、リスト、または行列を使用します。
Re: マウスボックス リストボックス ドラッグ アンド ドロップありがとうクレイグ。私はそれを理解し始めていると思います。
Get/SetKey の Key は情報を保存する別の方法ですか、それとも何か他の用途がありますか?
Re: マウスボックス リストボックス ドラッグ アンド ドロップ元の JSL は 2 つのボックスを超えて拡張できません。また、「他のボックス」がドラッグの原因であると想定されるため、汎用かどうかにかかわらず、2 つを超えるボックスで動作させるのは非常に困難です。コードの先頭に、MouseBox がクリックまたはドラッグ メソッドではなくトラック (マウスは移動するがボタンは押されない) メソッドを使用する理由を説明するコメントがあります。クリックとドラッグの両方により、ListBox による選択が妨げられます (その後、ドラッグの供給)。オリジナルの JSL は、ListBox が現在実行していないことの回避策です。
内部の ListBox サポートを変更しない限り、3 つ以上のリストボックス間でドラッグ アンド ドロップを行う完全に満足のいく方法は見つからないと思います。元のコードを使用すれば、複数のボックスのペアを作成できるはずです。クロストーク テスト (他のボックスの選択がドラッグされたテキストと一致するかどうかを確認する) があり、ほとんどの不正行為の試みを検出します。
選択した項目をソース ListBox から削除する必要がない場合、問題ははるかに単純になります。ドロップしたテキストを使用してクローンを作成します。項目を削除する必要がないため、他のボックスを探す心配もありません。
----
かなりクールなドラッグ アンド ドロップ GUI を構築できます。 <<。これらを使用するための鍵の 1 つは、dragBegin に戻りコードの文字列を提供させることです。これは、dropCommit が受け取る文字列です。MouseBox setDropTrack のスクリプト インデックスには、次の JSL を使用した 15 パズルの例があります。
ragBegin = Function( {this, clickPt},
{x, y} = this << getUserData;
If( nextToBlank( x, y ),
((this << child) << child) << getText/* メッセージはテキストボックスの内容です */
、 /* それ以外 */
0 /* ドラッグを抑制します */
);
);/* ソースセルから文字を削除する関数ですが、ドロップが成功した場合に限ります */
太線は、戻り値の 2 つの使用方法を示しています。15 パズルのピースを移動できない場合はドラッグ試行を無視し、移動できる場合は文字を返す方法です。この例には、どの正方形が隣接しているかを把握するのに役立つ userData など、他の機能もいくつかあります。
クレイジ
Re: マウスボックス リストボックス ドラッグ アンド ドロップこんにちは、クレイジ。リストボックスが大好きなので、リストボックスをより一般的にしようとしていますが、好きな数だけ作成してどこにでも配置したいと思っています。うまく機能していますが、選択には非常に注意が必要なようです。マウスボックスの感度などを変更するために考えられることはありますか?親子関係に依存したくない。
名前のデフォルトはここです( 1 );
リンクされた =関数({リスト}、{}、
マウスボックス(
<< SetDragEnable ( 1 )、
//<
<< SetDropEnable ( 1 )、
<<ドラッグ開始の設定(
関数({これ、クリックPt}、
これ<<ドロップ有効化の設定( 0 );
)
)、
/*<
Function({this, clickPt},
this << Set DropEnable(0);
sel = (この << 子)<<選択を取得;
this << SetUserData(sel)
)
)、
<
Function({this, clickPt},
{destbox、sourcebox、lb、items、i、lb_source、lb_dest、index}、
destbox = this << GetDestBox;
ソースボックス = this << GetSourceBox;
show(ソースボックス);
/*lb_source = ソースボックス << 子;
sel = lb_source << 選択を取得;
lb_dest = デストボックス << 子;
items = lb_source << アイテムを取得;
for(i = 1, i<=nitems(sel), i++,
Index = Contains(lb_source<<アイテムを取得, sel );
lb_source << アイテム(インデックス)を削除;
lb_dest << Append(sel );
);
show(destbox、sel、text、lb、index、items);
ソースボックス << Set Drop Enable(1);
1;*/
)
)、*/
<<ドラッグ終了の設定(
関数({これ、clickPt、どうやって}、
これ<<ドロップ有効化の設定( 1 );
)
)、
<< SetDropCommit (
関数({this, clickPt, text},
{destbox、sourcebox、lb、items、i、lb_source、lb_dest、index}、
デストボックス = これ << GetDestBox ;
ソースボックス = これ <<ソースボックスの取得;
見せる(ソースボックス);
lb_source = ソースボックス <<子供;
sel = lb_source <<選択してください;
lb_dest = デストボックス <<子供;
項目 = lb_source <<アイテムを入手する;
のために(i = 1 、i<=ナイアイテム(セル)、i++、
インデックス =含まれています(lb_source<<アイテムを入手する、セル);
lb_source <<アイテムの削除(索引);
lb_dest <<追加(セル)
);
見せる(destbox、sel、text、lb、index、items);
ソースボックス <<ドロップ有効化の設定( 1 );
1 ;
)
)、
リストボックス(リスト)
)
);
新しい窓( "テスト" 、
リストボックス(
リンクされた({ 「1」 、 「2」 、 「3」 })、
リンクされた({ 「4」 、 「5」 、 「6」 })、
リンクされた({ 「8」 、 「9」 、 「14」 })
)
);
新しい窓( 「別の窓」 、 //これが良いことなのか悪いことなのかはまだわかりません
リンクされた({ "テスト" 、 「その他これ」 、 "もの" })
);
Re: マウスボックス リストボックス ドラッグ アンド ドロップ@Craige_Halesこれは、1 つのリスト ボックスのみにクリック/ドラッグ機能を追加するための理想的な設定でしょうか? つまり。 項目のリストを含むリスト ボックス。ユーザーは項目を選択してドラッグし、リストの順序を調整できます。 そうでない場合は、上矢印ボタンと下矢印ボタンを使用して回避策を講じると思います...効果的ですが、操作が遅くなります。
Re: マウスボックス リストボックス ドラッグ アンド ドロップ選択した項目を操作するための上下ボタンが正しい答えだと思います。マウスボックスのピクセルレベルの座標をリストボックスの項目番号と一致させようとすることが、確実な解決策になるとは思えません。
Re: マウスボックス リストボックス ドラッグ アンド ドロップ整理できたと思います... これが誰かの役に立つかどうかはわかりませんが、念のためここに投稿します...
選択したインデックスを追跡し、再配置した後に再選択します。
/*
* Changes position of selected list items, moving them up in rank
*/
On Move Up = function({this},
selectedList = listBoxBoxVariable << Get Selected;
selectedIndices = listBoxBoxVariable << Get Selected Indices;
myNewIndices = List();
listBoxBoxVariable << Remove Selected;
<BR />
For Each({index, i}, selectedIndices,
tempName = selectedList[i];
newInsertIndex = Max(i-1,index-2);
listBoxBoxVariable << Insert(tempName, newInsertIndex);
Insert Into(myNewIndices, newInsertIndex+1);
);
For Each({index, i}, myNewIndices,
listBoxBoxVariable << Set Selected(index);
);
);
/*
* Changes position of selected list items, moving them down in rank
*/
On Move Down = function({this},
selectedList = listBoxBoxVariable << Get Selected;
selectedIndices = listBoxBoxVariable << Get Selected Indices;
myNewIndices = List();
listBoxBoxVariable << Remove Selected;
For Each({index, i}, selectedIndices,
tempName = selectedList[i];
newInsertIndex = Min(Length(TagListBox << Get Items),index);
listBoxBoxVariable << Insert(tempName, newInsertIndex);
Insert Into(myNewIndices, newInsertIndex+1);
);
For Each({index, i}, myNewIndices,
listBoxBoxVariable << Set Selected(index);
);
);