滑鼠框 列錶框 拖放
回覆:滑鼠框列錶框拖放<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />謝謝。
回覆:滑鼠框列錶框拖放setKey 是一個類似於單擊/追蹤/拖曳處理程序的擊鍵處理程序。按鍵。GetUserData 就是你想要的;如果需要多個值,請使用關聯數組、列表或矩陣。
回覆:滑鼠框列錶框拖放謝謝克雷格。我想我開始弄清楚了。
Get/SetKey 中的 Key 是儲存資訊的另一種方式還是有其他用途?
回覆:滑鼠框列錶框拖放原始 JSL 的擴展規模不會超過兩個盒子,而且無論是否通用,都很難讓它在兩個以上的盒子上工作,因為假設「另一個盒子」產生了阻力。程式碼開頭有一個註解解釋了為什麼 MouseBox 使用軌跡(滑鼠移動但未按下按鈕)方法而不是點擊或拖曳方法...點擊和拖曳都會阻止 ListBox 進行選擇(然後購買阻力)。最初的 JSL 是針對 ListBox 目前無法完成的任務的解決方法。
如果不更改內部列錶框支持,我認為您不會找到在三個或更多列錶框之間拖放的完全令人滿意的方法。我認為,你應該能夠使用原始程式碼製作多對盒子;有一個串擾測試(檢查另一個框的選擇與拖曳的文字是否匹配),可以檢測大多數濫用嘗試。
如果不需要從來源ListBox中刪除所選項目,那麼問題就簡單很多。使用刪除的文字進行克隆,甚至不用擔心找到另一個框,因為您不需要刪除該項目。
----
您可以建立一些非常酷的拖放 GUI與 <<。使用它們的關鍵之一是讓dragBegin 為其回傳程式碼提供一個字串。這是 dropCommit 將收到的字串。MouseBox setDropTrack 的腳本索引有一個包含 15 個謎題的 JSL 範例:
DragBegin = 函數( {this, clickPt},
{x, y} = this << getUserData;
如果( nextToBlank( x, y ),
((this << child) << child) << getText/* 訊息是文字方塊內容 */
, /* 別的 */
0 /* 抑制阻力 */
);
);/* 從來源儲存格中刪除字元的函數,但前提是刪除成功 */
粗線顯示了使用回傳值的兩種方式:當 15 塊拼圖無法移動時忽略拖曳嘗試,或者如果可以移動則傳回字母。此範例還有一些其他功能,例如協助找出哪些方塊相鄰的 userData。
克雷格
回覆:滑鼠框列錶框拖放嗨,克雷格,我正在努力讓你的列錶框更通用,因為我喜歡這些,但我想製作任意數量的列錶框並將它們放在任何地方。我已經讓它工作了,但選擇似乎非常挑剔。您能想到什麼來改變滑鼠盒的靈敏度或任何東西嗎?我不想依賴孩子/父母的關係。
名稱預設為此處( 1 );
連結 =功能({列表}, {},
滑鼠盒(
<<設定拖曳啟用( 1 ),
//<<設定軌道啟用(1),
<<設定丟棄啟用( 1 ),
<<設定拖曳開始(
功能({這個,點擊Pt},
這個<<設定丟棄啟用( 0 );
)
),
/*<<設定軌跡(
函數({this, clickPt},
this << 設定 DropEnable(0);
sel = (這個 << 孩子)<< 被選中;
這個 << SetUserData(sel)
)
),
<<設定拖放軌跡(
函數({this, clickPt},
{destbox,sourcebox,lb,項目,i,lb_source,lb_dest,索引},
目標方塊 = 這個 << GetDestBox;
來源框 = 這 << GetSourceBox;
顯示(來源框);
/*lb_source = 來源框 << 子項;
sel = lb_source << 被選取;
lb_dest = 目標框 << 孩子;
items = lb_source << 取得項目;
for(i = 1, i<=nitems(sel), i++,
索引 = 包含(lb_source<<獲取項目, sel );
lb_source << 刪除項目(索引);
lb_dest << 追加(sel );
);
顯示(destbox,sel,文本,lb,索引,項目);
sourcebox << 設定刪除啟用(1);
1;*/
)
),*/
<<設定拖曳結束(
功能({這個,clickPt,如何},
這個<<設定丟棄啟用( 1 );
)
),
<<設定刪除提交(
功能({這個, clickPt, 文本},
{destbox,sourcebox,lb,項目,i,lb_source,lb_dest,索引},
目標框=這個<<取得目標框;
源框=這個<<取得來源框;
展示(來源盒);
lb_source = 來源框 <<孩子;
sel = lb_source <<被選中;
lb_dest = 目標框 <<孩子;
項目 = lb_source <<獲取物品;
為了(我= 1 ,我<=尼特姆斯(選擇),i++,
索引 =包含(磅源<<獲取物品, 選擇);
磅源<<除去項目(指數);
lb_dest <<附加(塞爾)
);
展示(destbox、sel、文字、lb、索引、項目);
源框<<設定丟棄啟用( 1 );
1 ;
)
),
列錶框(列表)
)
);
新窗戶( “測試” ,
列錶框(
連結({ “1” , “2” , “3” }),
連結({ “4” , “5” , “6” }),
連結({ “8” , “9” , “14” })
)
);
新窗戶( 《另一扇窗》 , //還不確定這是好事還是壞事
連結({ “測試” , 「其他這些」 , "東西" })
);
回覆:滑鼠框列錶框拖放@Craige_Hales這是否是向 1 個列錶框添加單擊/拖曳功能的理想設定? IE。 包含項目清單的列錶框,使用者可以在其中進行選擇,然後拖曳以調整清單的順序。 如果不是,我認為我的解決方法將是向上和向下箭頭按鈕......有效但互動速度較慢。
回覆:滑鼠框列錶框拖放我認為操作所選項目的向上/向下按鈕是正確的答案;我不認為嘗試將滑鼠框像素級座標與列錶框項目編號對齊將是一個可靠的解決方案。
回覆:滑鼠框列錶框拖放我想我已經把它列好了... 不確定這是否對任何人有用,但在這裡發布以防萬一...
追蹤選定的索引,然後在重新定位後重新選擇。
/*
* 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);
);
);