2007年05月15日
ページ切り替え型選択ダイアログ
今日は作ったスクリプトを貼ってみたいと思います。
//+++
項目を選択するダイアログのスクリプトです。
ダイアログには12個しか項目を並べられないですが、12個以上の選択ができる汎用的なダイアログのソースを作ってみました。
ソースを探すのが面倒だったのが本音なのは秘密です。
//+++
listに項目を全部入れてcreate_listdlg()を呼ぶだけです。
ダイアログに渡せる文字列長が決まっているので切り詰めています。
ボタンには24文字も表示し切れませんけれどねー。
ソースをそのままコピペするとコメントの日本語が化けますが動くようです。
(SLのエディタが表示できないだけで日本語のデータは持てているのですねー)
タッチすると選択ダイアログが出ます。
HTMLとかさっぱりなので整形はぽい投げしました。
にたろさんは色つけたりしてましたねー。
ちょっとやりたかったけれどポイ投げポーイ。
改変ご自由にどうぞ。
バグありましたら教えていただけると嬉しいです。
以下ソースです。
//+++
項目を選択するダイアログのスクリプトです。
ダイアログには12個しか項目を並べられないですが、12個以上の選択ができる汎用的なダイアログのソースを作ってみました。
ソースを探すのが面倒だったのが本音なのは秘密です。
//+++
listに項目を全部入れてcreate_listdlg()を呼ぶだけです。
ダイアログに渡せる文字列長が決まっているので切り詰めています。
ボタンには24文字も表示し切れませんけれどねー。
ソースをそのままコピペするとコメントの日本語が化けますが動くようです。
(SLのエディタが表示できないだけで日本語のデータは持てているのですねー)
タッチすると選択ダイアログが出ます。
HTMLとかさっぱりなので整形はぽい投げしました。
にたろさんは色つけたりしてましたねー。
ちょっとやりたかったけれどポイ投げポーイ。
改変ご自由にどうぞ。
バグありましたら教えていただけると嬉しいです。
以下ソースです。
//-----------------------------------------------------------
// リストをページごとにダイアログで表示する
// Ver.1.00 / 070515
// -- Noki Kamachi
//-----------------------------------------------------------
// ダイアログに表示する文字列
string strDlgTitle = "Select item";
// " ページ目へ"
string strPage = " %E3%83%9A%E3%83%BC%E3%82%B8%E7%9B%AE%E3%81%B8";
list lstSource = []; // リスト
integer CHANNEL = -13; // ダイアログ応答チャンネル
// リスト初期化
init_list()
{
lstSource = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"];
}
////
// ページを指定してリストの項目をダイアログに表示する
// ページを指定してCallされる
// 最初のページは"1"
// "0"の時は12個までを表示
// 24文字以上はダイアログ表示できないので24文字以上は切り詰める
// リストのインデックスが文字列の頭に埋め込まれる
////
create_listdlg(integer page)
{
integer nListCount = llGetListLength(lstSource);
list l = [];
integer nSrcCurrent = 0 + (10 * (page - 1));
integer nDstCurrent = 0;
// 0の時は12個まで表示
if(page == 0) {
integer i = 0;
integer cnt = nListCount;
if(cnt > 12) cnt = 12;
for(i = 0; i < cnt; i++) {
// リストインデックスを埋め込んで、24文字以上は切り詰める
string strBuf = llGetSubString((string)i + ":" + (llList2String(lstSource, i)), 0, 23);
l = l + [ strBuf ];
}
} else {
// 表示用リスト作成する
for(nDstCurrent; nDstCurrent < 12; nDstCurrent++) {
// 1番目と3番目はページ送る戻る
if(nDstCurrent == 0) {
if(page != 1)
l = l + [ (string)(page - 1) + llUnescapeURL(strPage) ];
else
l = l + [ "-" ];
// l = l + [ (string)(page) + llUnescapeURL(strPage) ];
} else if(nDstCurrent == 2) {
if(page <= nListCount / 10)
l = l + [ (string)(page + 1) + llUnescapeURL(strPage) ];
else
l = l + [ "-" ];
// l = l + [ (string)(page) + llUnescapeURL(strPage) ];
} else {
// 項目追加
if(nSrcCurrent == nListCount) {
// 最後まで追加したので抜ける
nDstCurrent = 1024;
} else {
// リストインデックスを埋め込んで、24文字以上は切り詰める
string strBuf = llGetSubString((string)nSrcCurrent + ":" + (llList2String(lstSource, nSrcCurrent)), 0, 23);
l = l + [ strBuf ];
nSrcCurrent++;
}
}
}
}
llDialog(llGetOwner(), strDlgTitle, l, CHANNEL);
}
default
{
state_entry()
{
init_list();
}
on_rez(integer i)
{
llResetScript();
}
touch_start(integer total_number)
{
llListen(CHANNEL, "", llDetectedKey(0), "");
init_list();
integer nListCount = llGetListLength(lstSource);
if (nListCount == 0) return;
if (nListCount <= 12) {
// 12個以下の場合は全て一度に表示する
create_listdlg(0); // 全て一度に表示する
} else {
// 12個以上ある場合は10個ずつ表示(2つのボタンはNextとBack)
create_listdlg(1); // 最初のページを表示
}
}
listen(integer ch, string name, key id, string message)
{
if(ch == CHANNEL)
{
// 次へ
if(llSubStringIndex(message, llUnescapeURL(strPage)) != -1) {
// ページ数取得
integer nNestPage = (integer)llGetSubString(message, 0, llSubStringIndex(message, " "));
create_listdlg(nNestPage);
return;
}
// 埋め込んであるリストインデックス取得
if(llSubStringIndex(message, ":") != -1) {
integer nSelectIndex = (integer)llGetSubString(message, 0, llSubStringIndex(message, ":"));
// 選択されたリスト項目の文字列を取得
string strSrc = llList2String(lstSource, nSelectIndex);
llOwnerSay("Selected : " + strSrc);
}
}
}
}
Posted by Noki Kamachi at 15:36│Comments(6)
│LSL
この記事へのコメント
ものすごい勢いで改行…。
しょぼん。
しょぼん。
Posted by Noki Kamachi at 2007年05月15日 16:07
汎用的なソースはとっても嬉しいデス('-'*)
ダイアログ物を造る時に使わせて頂きますw
ソースのカラー化、誰でも利用できる様にしたいんですけどね〜
ダイアログ物を造る時に使わせて頂きますw
ソースのカラー化、誰でも利用できる様にしたいんですけどね〜
Posted by Nitaro at 2007年05月15日 17:20
Noki Kamachiさん
5号@SLMaMeスタッフです。
すみません、折角の有益な情報に無駄な行間が空いてしまって・・・
こちら管理画面の「デザイン」タブから「オリジナルデザインの登録」をクリックして「スタイルシート」と記述のある箇所に
pre{
line-height:80%;
}
を入れてみてください。
80%というのは適当な数値ですので、お好みに合わせてご変更下さい。
宜しくお願いいたします!
5号@SLMaMeスタッフです。
すみません、折角の有益な情報に無駄な行間が空いてしまって・・・
こちら管理画面の「デザイン」タブから「オリジナルデザインの登録」をクリックして「スタイルシート」と記述のある箇所に
pre{
line-height:80%;
}
を入れてみてください。
80%というのは適当な数値ですので、お好みに合わせてご変更下さい。
宜しくお願いいたします!
Posted by 5号@SLMaMeスタッフ at 2007年05月15日 17:26
>Nitaro
コメントありがとう御座いますー。
てわざわざ記事で名指ししてましたね(笑)
アニメを列挙してダイアログで選択してStart、みたいなHUDを作っていたのの副産物です。
動的に項目を作る時には使えるかなーとまとめてみました。
LSLの記事を書いている方への恩返しです。
カラー化はCSSとかでできてるのですかねー。
Web関係はさっぱりなのですごいなーと思います。
//+++
>5号@SLMaMeスタッフ
おわわ、スタッフの方が書いてくださるとはっ。
わざわざありがとう御座います!
驚きました(笑)
設定してみました!きちんと改行されてます!
ありがとうございましたー。
またBlogの方見させていただきますね(笑)
コメントありがとう御座いますー。
てわざわざ記事で名指ししてましたね(笑)
アニメを列挙してダイアログで選択してStart、みたいなHUDを作っていたのの副産物です。
動的に項目を作る時には使えるかなーとまとめてみました。
LSLの記事を書いている方への恩返しです。
カラー化はCSSとかでできてるのですかねー。
Web関係はさっぱりなのですごいなーと思います。
//+++
>5号@SLMaMeスタッフ
おわわ、スタッフの方が書いてくださるとはっ。
わざわざありがとう御座います!
驚きました(笑)
設定してみました!きちんと改行されてます!
ありがとうございましたー。
またBlogの方見させていただきますね(笑)
Posted by Noki Kamachi at 2007年05月15日 17:38
すごいのはHarayokiさんですヨw
コバンザメ、コバンザメ。。。('-';
ワタクシ、ソース見るのが習慣でしてw
コバンザメ、コバンザメ。。。('-';
ワタクシ、ソース見るのが習慣でしてw
Posted by Nitaro at 2007年05月15日 17:46
>Nitaro
おぉ、そうなのですね。
HarayokiさんのBlogはよく見させてもらってるんですよー。
技術も高いし面白いですよねー。
あやかりたい…(笑)
おぉ、そうなのですね。
HarayokiさんのBlogはよく見させてもらってるんですよー。
技術も高いし面白いですよねー。
あやかりたい…(笑)
Posted by Noki Kamachi at 2007年05月15日 17:56