【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
「H2Viewer」開発に大きな問題…
「HSP(Hot Soup Processor)」のヘルプビューワ「H2Viewer」を開発中です。Ubuntu上の「Wine」で純正のヘルプビューワが動作しないのが開発のきっかけ。仕事で使っているWindows98での開発がある程度進んだので、WineでHSPを動作させて開発中のソースを実行してみたら…とんでもないエラーが発生したのです。そんなお話。
エラーとは、苦労して導入したWindowsAPIを使ったスプリットウィンドウが、Wine上では動作しないという問題。今までに取り組んだことななかったので難儀しつつようやく実装したというのに(泣)。
仕方がないので、スプリットウィンドウを使わないバージョンも作ることにしました。とりあえず表示の問題は後回しにして、ほぼ組み上がっている検索機能の完成を急ぐとともに、検索オプションの付与と、データベースの登録したHSファイル毎に若干異なる記述の違いを吸収する処理を追加することにします。
本当はすぐにでもUbuntu上でHSPアプリを開発したい理由があったのだけれど…ヘルプが見られないのでは仕方がありませんね。
開発中の「H2Viewer」について
Windowsで動作するインタプリタ型プログラム言語「HSP(Hot Soup Processor)」のヘルプビューワ「H2Viewer」を開発中です。想定外の使用法なので仕方ないのだけれど…Ubuntu上の「Wine」では純正のヘルプビューワが動作しないので「だったら自分で作るしかないじゃないか…」と開発を始めたのでした。ただ優先順位が高い作業ではないため他の仕事に追われ、ついつい手をつけずにおりましたけれども、開発を再開しました。そんなお話…。
Ubuntu上の「Wine」でHSP純正のヘルプビューワが動作しないのは、IEがネックになっているからです。そこで私はブラウザに依存しないヘルプビューワを開発しているのです。
純正より不便な部分が多いのだけれど、検索機能だけは強力です。検索機能としては当たり前のはずの複数単語での検索が可能なだけでなく「and検索」「or検索」にに対応。結果表示も高速です。純正ヘルプビューワの用にF1キーを押すだけでキーワード検索ができるような機能はないですが、できるだけ使い勝手の良いものを…と思っております。
今までに開発したのは、ヘルプビューワ用のHSファイルをチェックして簡易データベースを作成・管理するツールと、HSファイルのリストから目的のHSファイルを選択することで左側のリストビューに命令一覧を表示。一覧から命令を選ぶと右側のメッセージボックス内にテキストを表示する機能です。
特に苦労したのはWindowsAPIを使ったスプリットウィンドウの処理。これは今までに取り組んだことななかったので難儀しましたが、なんとか実装できました。
ここ数日、手掛けているのは検索機能。インプットボックスにキーワードを入れると、簡易データベース中のキーワードを検索するのだけれど…私が作った簡易データベースに問題があるらしく、csvを扱えるHSPの純正プラグインの検索命令が動いてくれません(泣)。問題が改行コードにあることは何となく察していたので、これまでHSファイル毎に1行にまとめていた簡易データベースを、命令毎に改行するように変更したところ、無事に動作しました(笑)。
簡易データベースの仕様変更によって、すでに出来上がっているHSファイル選択、命令選択でヘルプデータを表示する機能に問題がでるかも…と懸念しましたが、簡易データベースはXMLデータの形式をとっているので、目的の命令を取得する際にはタグとタグの間を抜き出しております。ですのでタグとタグの間にいくら改行が入っていようとも、問題はないのでした。良かった。
明日からは検索結果を左側命令リストに追加する処理に入ります。
HSPでのテキスト結合・整形アプリ…
サイトの仕事がひと段落つきまして、現在は校正待ちの状態。その間に春から秋まで限定のテキスト処理アプリを開発し直そうと思って手を入れ始めたのですが…今日はWindowsで動作するインタプリタ型のプログラム言語「HSP(Hot Soup Processor)」のお話。
まぁ仕事柄、色々なテキスト処理が必要なのだけれど…いちいち手作業でやっていられないので、HSPにてちょこちょことテキスト整形アプリを作っているわけです。この春から秋までのテキスト処理アプリもそのひとつ。これは2006年に作ったもので毎年、仕様がちょっとづつ変わるのでそれに対応しながら使い続けてきたのだけれど…HSP3.3にしてから従来の外部プラグインが使えなくなってソースからコンパイルおよび実行ができなくなってしまいました。
実はこのテキスト整形アプリ、複数のテキストをひとつにまとめるアプリと、すでに処理済みのテキストをXML化したものを参照し、一定期間が経過したデータを削除、新しいデータ整形して追加するアプリの2つに分けれております。幸いにしてEXE化した実行ファイルはともに動作するのだけれど、2つあるうちのひとつ、複数のテキストをまとめるアプリが仕様変更に耐えられない作りになっているのです。だから、ここ1ヵ月は手作業でテキストをまとめておりました。
2つめの整形してXMLに追加するほうのアプリは、整形するために使用する対象ワードと変換ワードの対応表を別ファイルで管理しているため、テキストの仕様変更があっても対応表を編集すれば対応できるようになっております。
とは言え、別々に開発したとは言え2つで1つのアプリ。その関係はまるで…金剛力士像で言えば「阿形(あぎょう)と吽形(うんぎょう)」、菊田一夫の「君の名は」で言えば「春樹と真知子」、ほかにも「マリオとルイージ」「ヤン防とマー防」「ガリガリ君とガリ子ちゃん」みたいなものです。きっと(笑)。
だからHSP3.3にて外部プラグインを使わず、文字処理に特化した自前のモジュール集「kurage_mod」を使って2つとも開発し直すことにしたのです。
まずはひとつ目のテキスト結合アプリ。これは外部プラグインに依存していた処理を純正の命令で置き換えつつ、ひとすじ縄ではいかない部分は「kurage_mod」を使って処理。完成ではないものの、とりあえず最低限の動作ができるところまでこぎつけました。
そして今日から、もうひとつのアプリであり本命とも言えるテキスト整形アプリに手を入れ始めたのだけれど…あっという間に終わってしまって拍子抜けしました。と言うのも外部プラグインを呼び出しているものの、その命令をほとんど使っていなかったのでした(笑)。
とりあえず、プロトタイプながら2つのアプリが相次いで完成。いくつか付けたい新機能もありますけれども、それはおいおい。後は日々運用しながら精度を上げていく作業が待っておりますが、来年にはまた仕様が変わったりするんだよなぁ(笑)。
仕事がひと段落…
5月から始める仕事の新コンテンツのためにHSP(HotSoupProcessor)にて開発しておりましたテキスト整形のプログラムが無事に完成し、午前中に公開の運びとなりました。すでにWEBサーバ上にある膨大なテキストデータを「キーワード」検索してデータを引っ張りだすのは氷翠さんのPHPプログラム。私はローカルに落としたテキストファイルから必要なデータを選び出し、HTMLファイルに整形する処理を担当しました。テキストファイルに画像が付属している場合がありまして、その際はサーバーから一端ダウンロードしてHSPの隠しウィンドウに読み込むと画像サイズが取得できるので、それを元にイメージタグのパラメータを設定したりしております。今後はこのコンテンツを充実させていき、売り上げ増に繋がっていけば良いと思います。まずはひと仕事終えて「ホッとしている」と言いたいところなのだけれど、次はサイト作成のお仕事が待っております。頑張らねば…。