llmod3のlistview/treeboxについて
LuLu 2013/5/4(Sat) 08:04:53|NO.53786
llmod3について質問と確認です。
listget のサンプルに手を加えたスクリプト。
(ちなみに、listget のサンプルをそのまま実行するとエラーが出ます。たぶん)
#include "llmod3/llmod3.hsp"
#include "llmod3/img.hsp"
#include "llmod3/listview.hsp"
listview ginfo_winx-6, ginfo_winy/2, 1
lv = stat
listaddcl 0, "name"
repeat 30
listadd cnt, "アイテム No."+cnt
loop
button "check", *check
alloc bf, 1024*32
bf = ""
mesbox bf, ginfo_winx-6, ginfo_winy-ginfo_cy-26
mb_id = stat
_objsel lv
stop
*check
bf = ""
notesel bf
start = -1 ;先頭から検索
repeat -1
listget chk, start, 0, 2 ;選択状態のアイテムを探す
if chk = -1 : break ;見つからない場合-1が代入される
listget s, chk, 5 ;見つかったアイテムのテキストを取得
noteadd ""+ s +"は選択されています"
start = chk
loop
objprm mb_id, bf
stop
listviewのアイテムテキストを取得したいと思っているのですが、
実行すると数字の数値が取得されます。どれを選んでも変化しません。
何か変換処理が必要なのでしょうか?
それとも、アイテムテキストって別の何か示してますか?
(treeboxの treeget も同じ結果になります)
------
treeboxの treeget 、-1 ルートを取得 とは
どういった結果が得られるのが正しいのでしょうか?
こちらも数字が得られるのですが……
------
回答お待ちしています。
どこぞのだれか 2013/5/4(Sat) 09:27:52|NO.53788
listget s, chk, 5 の前に
sdim s で文字列型に初期化。
treeget も同様に。
y.tack 2013/5/4(Sat) 10:10:36|NO.53789
なんか前にもllmod3の中の命令が動かないって書いてましたよね
僕も以前strtointが動かなくてググッてAPI使いました
以下、ほぼサンプルスクリプトより
#include "llmod3/llmod3.hsp"
#include "llmod3/misc.hsp"
strtoint "111101",2 ;2進数とみなして変換
mes stat
; 結果:0 変換されてない
strtoint "0x1F" ;先頭が"0x"だと16進数とみなされる(Base省略時)
mes stat
; 結果:0 変換されてない
strtoint "0376" ;先頭が"0"だと8進数とみなされる(Base省略時)
mes stat
; 結果:0 変換されてない
strtoint "23413",7 ;7進数とみなして変換
mes stat
; 結果:0 変換されてない
strtoint "za",36 ;36進数とみなして変換
mes stat
; 結果:0 変換されてない
stop
なんか一回全部llmod3の命令は動作確認した方がいいかもしれません
とはいえ、僕もサンプルスクリプトだけでも動作確認しようかな?と思いましたが
ちゃんと命令のHELPを読んでどんな動作を期待したサンプルスクリプトなのか理解しなきゃいけない気がしてやめました
llmod3の命令は80個もありますし
皆でやろう。だなんて僕が言っても仕方ないし
現状ではllmod3の命令で動作しない命令が数個報告されていることを頭に入れて
他の方法を探すことも視野に入れるくらいでしょうか
LuLu 2013/5/4(Sat) 10:56:53|NO.53790
>どこぞのだれか さん
回答ありがとうございます。確認出来ました。
文字列が代入されるはずと認識していたのに……初期化って大切ですね。
つい、初期化とか変数宣言を省いてしまいます。これからは気を付けます。
-----
> treeboxの treeget 、-1 ルートを取得
#include "llmod3/llmod3.hsp"
#include "llmod3/img.hsp"
#include "llmod3/treebox.hsp"
style=1|2|4|$20
treebox ginfo_winx-6, ginfo_winy/2, style
tb_id = stat
treeadd 0, "test1"
itm0 = stat
treeadd 0, "test2"
itm1 = stat
repeat 10
treeadd itm0, "test1`s child "+cnt
loop
if all_test : treeadd itm0, "test1`s child (goto next)" : gt_nxt=stat
button "check", *check
alloc bf, 1024*32
bf = ""
mesbox bf, ginfo_winx-6, ginfo_winy-ginfo_cy-26
mb_id = stat
_objsel tree_id
stop
*check
bf = ""
notesel bf
itm_Text = ""
// itm_root = ""
treeget itm
treeget itm_Text, 6, itm ; 6 アイテムのテキスト取得
noteadd itm_Text
treeget itm_root, -1 ; -1 ルートを取得
// noteadd itm_root
// noteadd str(itm_root)
objprm mb_id, bf
stop
こちらは初期化で解決出来ませんでした。
文字列ではなく数値が返されるみたいで、「パラメータの型が違う」とエラーです。
初期化してstrにしてもintに戻る……。とんちんかんなことしてますか?
引き続き回答お待ちしてます。
LuLu 2013/5/4(Sat) 11:49:31|NO.53791
>y.tack さん
> サンプルについて - HSPTV!掲示板
> http://hsp.tv/play/pforum.php?mode=all&num=52868
こちらですね。HSP3.4β1で修正されたみたいですが。
気合い入れて挑めばAPIという選択肢もありますから、利用者少ないのでしょうかね?
そういう私は、この修正で llmod3 に気づきました。
-----
こんな基本的な質問している知識も技術もない者が、
なんとなくサンプルだけざっくり試して気になったところを上げてみました。
y.tack さんの
> ちゃんと命令のHELPを読んでどんな動作を期待した
> サンプルスクリプトなのか理解しなきゃいけない
という意見も確かですが、動作しないのもあるみたいなので。
すべてを確認したわけではありません。参考程度に見て頂けたらと思います。
---
リファレンス内サンプル
_makewnd ※※
verinfo ※
error 7 : ラベル名はすでに使われています --> *get_verinfo
// gosubのラベルにアスタリスクを付ける
#Error 6 -->パラメータの型が違います
s = windir + "\\system\\" + file
↑を↓に変更
s = dir_win + "\\system32\\" + file
// 当方のXP環境では C:\WINDOWS\system32 にありました
何も表示しませんでした
winver ※※
btnimg ※※
#Error 3 in 65 (llmod3/misc.hsp) -->パラメータ値が異常です
// モジュール内エラーのようなので調べてません
listget ※
llmod3/listview.hsp(688) : error 2 : 文法が間違っています (688行目)
// #include "llmod3/img.hsp" を追加
listview winx-6, winy/2, 1
↑を↓に変更
listview ginfo_winx-6, ginfo_winy/2, 1
mesbox bf,winx-6,winy-csry-26
↑を↓に変更 // csry はカレントでは無いかも
mesbox bf, ginfo_winx-6, ginfo_winy-ginfo_cy-26
変数s を初期化
button に objprm で指定した内容が表示されるので、
mesboxのidを取得して、objprmの指定をする
listicon ※
アイコン表示されません
msgdlg ※※
multiopen ※※
error 4 : パラメーター式の記述が無効です
notemax mx
↑を↓に変更
mx = notemax
error 4 : パラメーター式の記述が無効です
if mx=1 : mes "拡張子は"+info : else mes "フォルダ "+info
progset ※※
goto lp
↑を↓に変更
goto *lp
// そのまま実行すると、他の操作ができなくなりました
// タスクマネージャーからプロセス終了させました
resizeobj ※※
button "width*2", wx2
button "height*2", hx2
↑を↓に変更
button "width*2", *wx2
button "height*2", *hx2
// 実行すると
#Error 7 in 193 (llmod3/obj.hsp) -->配列の要素が無効です
// モジュール内エラーのようなので調べてません
strtoint ※※
全部、0と表示されます
tooltip ※※
button "test", label
↑を↓に変更
button "test", *label
treeicon ※
dd_accept ※
goto @b
↑を↓に変更
goto *@b
// sample\llmod3\test7.hsp はエラー無く動く
dllproc ※※
imeinit ※
imeopen ※
imesend ※
imestr ※
mesbox buf, winx, winy, 1
↑を↓に変更
mesbox buf, ginfo_winx, ginfo_winy, 1
keybd_event ※
#Error 41 -->関数を命令として記述しています。
(HSP2から関数化された名前を使用している可能性があります)
strlen L,s
↑を↓に変更 // 2カ所
L = strlen(s)
peek c,s,cnt
↑を↓に変更 // 2カ所
c = peek( s, cnt)
linesel ※
mouse_event ※
error 8 : ラベル名は指定できません
goto lp
↑を↓に変更
goto *lp
#Error 16 -->パラメータの数が多すぎます。
if kSHIFT : Lbtn=$2 : else : Lbtn=0
p_scrwnd ※※
#Error 41 -->関数を命令として記述しています。
(HSP2から関数化された名前を使用している可能性があります)
// どうなればいいのか分からないので、確認出来ません
selget ※
from_uni ※※
to_uni ※※
llmod3/unicode.hsp(120) : error 2 : 文法が間違っています (120行目)
---
サンプルスクリプト
sample\llmod3\test2.hsp
49行目 正しく表示されません
変数txt を初期化
sample\llmod3\test3.hsp
35行目 文字列一行分足さないと「選択されたファイル数」がmesboxで隠れます
sample\llmod3\test6.hsp
mesbox内、3行目の「1234」は行変換で「んかくも」という文字に変換される
他は選択はされるが変換はされない
ところどころ、2.xでの記述があるようです。サンプルスクリプトの方も。
---
ついでに要望。
リファレンス内サンプルでインクルード記述が有ったり無かったりするのがあるので、
どちらかに統一して頂けると有り難いです。
そのままコピーして試すことを考えると、有ると良いのですが。
llmod3モジュールの場合、#include "llmod3.hsp" と表記されているのもあります。
#include "llmod3/llmod3.hsp" にして頂けると幸いです。
※印があるのは、"llmod3.hsp"表記されているサンプルです
※※印があるのは、インクルード記述がないサンプルです listadd treeadd を除く
リファレンス内のサンプルは、記述サンプルであって、
動作サンプルではないということでしたら無視してください。
-----
長い上に読みにくそう。後から編集できないのが困りますね。
偉そうに修正指摘してますが、あれやこれやと試してこうしたら動いたと言う感じです。
途中放棄してます。参考の参考の参考ぐらいでお願いします。
(放り投げるぐらいの気持ちで別スレ立てれば良かったかな?)
y.tack 2013/5/4(Sat) 17:06:55|NO.53794
>>LuLuさん
あまり考えず、llmod3の全ての命令を一回動作させてみる必要があります
とか書いてしまい申し訳ない
本当にほぼ全部サンプルスクリプトを検証するとは驚きました
動かないのをリストアップするなら動くのもリストアップしたらどうか?と思ったんですが
error情報書いてないのは動く命令なんですねって
こちらでもリストアップして気付きました
+/_makewnd
-\ss_chgpwd
-\ss_chkpwd
-\ss_running
+*verinfo
+/winver
-\_clrobj
-\_cls
-\_objsel
+*btnimg
-\getobjsize
+*listadd
-\listaddcl
-\listdel
-\listdelcl
+*listget
-\listhit
+?listicon
-\listmax
-\listsel
-\listview
+/msgdlg
+*multiopen
-\objgray
-\progrng
+*progset
+*resizeobj
-\sel_listview
-\sel_progbox
-\sel_treebox
+*strtoint
+?tooltip
+?treeadd
-\treebox
-\treedel
-\treeget
-\treehit
+/treeicon
-\treemax
-\treesel
-\treesort
-\getptr
-\console
-\console_color
-\console_end
-\console_pos
+?dd_accept
-\gets
-\puts
-\sel_trackbox
-\sel_udbtn
-\trackbox
-\trackmrk
-\trackpos
-\trackrng
-\tracksel
-\udbtn
-\udget
-\udset
-\about
-\dd_reject
+/dllproc
-\draw_icon
-\get_fileicon
-\get_icon
+/imeinit
+/imeopen
+/imesend
+/imestr
+?keybd_event
+/linesel
+*mouse_event
+*p_scrwnd
+!p_wndscr
error 2 : 文法が間違っています (3行目)
--> p_wndscr x
-progbox
+/selget
-\charlower
-\charupper
+/from_uni
+*to_uni
一文字目の-はサンプルスクリプト無し
+はサンプルスクリプトあり
2文字目の¥はサンプルスクリプト無し
/はLuLuさんの環境では正常に動作
*はLuLuさんの環境ではerror
?は動作するか不明です
ってLuLuさんの情報におんぶにだっこな訳ですが
でもやっぱりサンプルスクリプトなし多いですねぇ
サンプルスクリプトがないと
正常な使い方ではないのか
バグで動かないのか
判別が困難そうで大変そうですね