弐条海月の とはずがたり

そこはかとなく書き綴るブログなるもの

【HSP3】llmod3のlistviewでチェックボックスを取り扱う方法

Windowsで動作するフリーのインタプリタ型プログラム言語「HSP(Hot Soup Processor)」にて、標準同梱されている「llmod3」。HSP2.X時代から使われていたこのモジュールによって、標準命令にはないオブジェクトの配置やコントロールが可能になっておりました。HSPのバージョンアップに伴って使えなくなっていたのですが、開発者ではない方がHSP3.X用に修正したようで、標準同梱されるようになっています。これを利用して作れるオブジェクトにlistview(リストビュー)があるのだけれど、オプションでチェックボックス付きのリストビューを作成すると、そのチェックボックスを後からコントロールできない状態になっていたのです。ヘルプに書かれている内容がHSP2.X時代のもので動作しないのです。今日はそれを動作するように改良したお話…。

現在私がHSPで開発しているのが…仕事上で役立つアプリケーションのうち、最も大きなもの。いくつかのアプリケーションで構成されている、テキストファイルをWEB掲載するためのシステム。そのうちのWEB化するテキストを選択するアプリケーションに手を入れているところです。このアプリにはlistview(リストビュー)が2つ登場します。レイアウト的には2つのリストビューの間にテキストボックスがある感じです。

左側にあるリストビューはテキスト用。そこにあるテキスト名のひとつを選ぶと、隣にあるテキストボックスに中身が表示されます。テキストの内容を見てWEB化するかどうかを判断し、WEB化すると決まればリストビューのテキスト名が選択された状態でスペースバーを押すとチェックボックスにチェックが入る仕組みになっています。

この時、チェックが入ったテキストに関連した画像ファイルがあった場合、テキストボックスを挟んで反対側にある画像用のリストビューにある関連画像ファイル名の横にあるチェックボックスにも自動でチェックが入るようにしたいのだけれど…それを実現できなかったんです。

理由は先述した通り、listview命令のヘルプを見ても古いHSP用の記述になっていて動作しないため。ネットで色々と検索しつつ、Windows APIの勉強などもしてみたり…。そこで少しずつ分かってきたことをもとにして、ようやくチェックボックスの状態をチェックすることと、チェックボックスのオン/オフの切り替えができるようになりました。特にHSP3掲示板、10年以上前の過去ログに、llmod3の前身であるllmod時代のリストビューのモジュールが大いに参考になりました。これを機に私のほうでもモジュール化しておこうと思います。

以下にllmod3で作ったlistview(リストビュー)のチェックボックスの状態を確認する方法と、チェックのオン/オフの切り替え方法について書いておきます。(近くモジュール化し公開します)。

;リストビューのテスト
//2012/09/25    弐条海月作成

   #include "llmod3/llmod3.hsp"
   #include "llmod3/listview.hsp"    //リストビューの作成

   //リストビューコントロールの作成
   listview 180,180,$50009                    //リストビューを作成
   id_listview=stat                        //リストビューのID
   hwnd_listview=objinfo_hwnd(id_listview)    //リストビューのハンドル

   listaddcl 0,"タイトル",160                //リストビューに欄を追加

   //リストビューの中身
   txt_list={"あいうえお.txt
               かきくけこ.txt
               さしすせそ.txt
               たちつてと.txt
               なにぬねの.txt"}

   //リストビューに表示
   sel_listview id_listview    //操作するリストビューを選択
   notesel txt_list : idx=notemax
   repeat idx
           noteget txt_name,cnt
           listadd cnt,txt_name,,,
           await
   loop

   //ボタンの表示
   pos 2,185 : button "状態チェック",*action
   objsize 48,24
   pos 75,185 : button "全選択",*action2
   pos 130,185 : button "全解除",*action3

   stop

//------------------------------------------------------

*action
//dialog "状態チェック"
   a=8,0,0,0,8192|4096    //初期設定
   repeat idx
       a(1)=cnt
       getptr po, a    //sendmsg用のポインタを取得
       sendmsg hwnd_listview, 4101, 0, po
       if a(3) = 8192 {//チェックが入っている
   dialog ""+cnt+"番目のアイテムはチェックされています",0,"a(3)="+a(3)
       }
       if a(3) = 4096 {//チェックが入っていない
   dialog ""+cnt+"番目のアイテムはチェックされていません",0,"a(3)="+a(3)
       }
       await
   loop
stop

//------------------------------------------------------

*action2
//dialog "全選択"
   a=8,0,0,0,8192|4096    //初期設定
   repeat idx
       a(1)=cnt
       getptr po, a            //sendmsg用のポインタを取得
       sendmsg hwnd_listview, 4101, 0, po
       if a(3) = 4096 {//チェックが入っていない
                       //dialog ""+cnt+"番目のアイテムはチェックされていません",0,"a(3)="+a(3)
                       a(3)=8192    //チェックをオンに
                       sendmsg hwnd_listview, 0x1006, 0, po
       }
       await
   loop
stop

//------------------------------------------------------

*action3
//dialog "全解除"
   a=8,0,0,0,8192|4096    //初期設定
   repeat idx
       a(1)=cnt
       getptr po, a            //sendmsg用のポインタを取得
       sendmsg hwnd_listview, 4101, 0, po
       if a(3) = 8192 {//チェックが入っている
                       //dialog ""+cnt+"番目のアイテムはチェックされています",0,"a(3)="+a(3)
                       a(3)=4096    //チェックをオンに
                       sendmsg hwnd_listview, 0x1006, 0, po
       }
       await
   loop
stop


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

固定ページ

最近の投稿

カテゴリー





カレンダー

2012年9月
 12
3456789
10111213141516
17181920212223
24252627282930

過去の日記はこちら

キーワードで検索