|
 |
|
2010/7/24(Sat) 20:06:30|NO.33887
お世話になっております。
先日こちらでご助力いただいたおかげで、何とか動けるものを作れました。
しかしながら、通常のボタンを使用していた時には、普通に動いてくれていたものが、
画像ボタンを使用することにより、画面への遷移ができなくなってしまいました。
やりたいこととしては、
○*top(screen0で表示)//トップ画面
├○*greeting(screen0で表示)//挨拶画面
├○*help(screen0で表示)//ヘルプ画面
├○*exit(screen0で終了)//終了処理
├○*titlelist(screen0で表示)//タイトル一覧画面
| └●*title_click(screen3で表示)//画像表示
├●*slide(screen3で表示)//スライドショー表示画面
└●*thumbnail(screen3で表示)//サムネイル表示画面
└●*thumbnail_click(screen4で表示)//画像表示
というような感じになります。
(現在○は画面を表示でき(遷移が可能)、●は遷移できません)
今でも個々の機能ごとには動作しますので、
個々のソースが原因というわけではなさそうです。
(ソースは内容が重複していたり、お見苦しいところも多々あるとは思いますが、
何とか動いておりました。)
以上の理由により、どこが原因でボタン押下時の遷移が行えないのかがわかりません。
ソースがあまり長いものはいけないとのことなので、
画面IDが関わる部分以外は省略致しました。(わかりづらかったら申し訳ありません。)
ソースは
// 初期ウィンドウをディスプレイサイズで作成
screen 0, ginfo_dispx, ginfo_dispy
// 表示サイズを設定
width 800, 600
/***************************
* トップページ *
***************************/
*top
onexit gosub *exit // プログラムの終了処理
cls
// 画像読み込み用バッファ作成を作成
buffer 2 : picload "image1.bmp" // 背景画像
buffer 3 : picload "image2.bmp" // タイトル画像
buffer 4 : picload "image3.bmp" // その他画像
buffer 5 : picload "image4.bmp" // その他画像
buffer 6 : picload "image5.bmp" // ボタン画像
screen 0, 800, 600 // ウィンドウを作成
/* 画像読み込み処理 … 省略 */
/* メッセージ表示処理 … 省略 */
objsize 250, 50 // ボタンサイズ
// 250×50サイズのボタンを、縦に3個、横2列に並べています
repeat 6
if cnt >= 0 & cnt < 3 {
pos btnX, 360 + cnt*50
button "", *btnclick
btnimg cnt, 6, 0, cnt*50, 250, 50
} if cnt >= 3 & cnt <= 5 {
pos btnX + 270, 360+cnt*50-150
button "", *btnclick
btnimg cnt, 6, 0, cnt*50, 250, 50
}
loop
stop
*greeting
/* 省略 */
*help
/* 省略 */
/***************************
* タイトル一覧 *
***************************/
/* タイトル一覧画面を表示 */
*titlelist
onexit gosub *exit // プログラムの終了処理
cls // 画面を初期化
screen 0, 800, 600
/* 画像表示・ポジション処理 … 省略 */
// タイトルリストを表示するポジション
pos x, 50 : gosub *caption // *captionに処理を移す
/* リストボックス表示処理 … 省略 */
// 画像表示用ボタン
objsize 160, 50
button "", *title_click
btnimg 1, 6, 0, 350, 160, 50
stop
/* 「画像を表示」ボタン押下時の処理 */
*title_click
/* 画像読み出し用の桁合わせ処理 … 省略 */
screen 3, 800, 650 // ウィンドウID3を作成
/* キャプション取得処理 … 省略 */
// 画像読込
cvload "image\\" + nResultNum + ".bmp", 2
/* 画像縮小処理 … 省略 */
cvgetimg 2, 0 // 画像を表示
pos 15, 620
mes strListboxText
// 閉じるボタン
pos btnPosBackX + 170, 580
objsize 110, btnSizeH
id = stat
button "", *exit
btnimg cnt, 6, 0, 400, 110, 50
stop
/***************************
* スライドショー *
***************************/
/* スライドショーを表示 */
*slide
// プログラムの終了処理
onexit gosub *exit
// ウィンドウID3を作成
screen 3, 800, 650
// ディレクトリ一覧を作成
dirlist imgFileDir, "image\\*.bmp", 0
// 変数をメモリノートパッド命令のバッファに設定
notesel imgFileDir
repeat notemax //行数分繰り返す
/* 画像縮小・表示処理 … 省略 */
buffer 1, 800, 650 //フェードイン用画面
cvgetimg 0, 0 // ウィンドウ3に画像を表示
color 255 //フェードイン処理
gsel 3
/* フェードイン処理 … 省略 */
wait 200 // 表示間隔を設定
//フェードアウト用画面
buffer 1, 800, 650
gcopy 3, 0, 0, 800, 650
//フェードアウト処理
gsel 3
/* フェードアウト処理 … 省略 */
loop
stop // 処理の停止
/***************************
* サムネイル表示 *
***************************/
/* サムネイル一覧画面を表示 */
*thumbnail
onexit gosub *exit // プログラムの終了処理
onclick goto *thumbnail_click
/* サムネイル表示処理 … 省略 */
// サムネイルウィンドウを初期化
if( bImgSizeY < 600 ) {
screen 3, bImgSizeX, 600, 0
}
else {
screen 3, bImgSizeX, bImgSizeY, 0
}
/* サムネイル表示処理 … 省略 */
// 画像読み込み用バッファ作成
buffer 2, , , 0
i/* サムネイル表示処理 … 省略 */
stop
/* 押下時の処理 */
*thumbnail_click
// サムネイルウィンドウをクリックした場合
if( ginfo_act == 3 ) {
/* サムネイル画像縮小・表示処理 … 省略 */
// 画像表示
if ratioX < ratioY {
screen 4, windowSizeX, ratioX * imgSizeY, 0
}
else {
screen 4, ratioY * imgSizeX, windowSizeY, 0
}
/* サムネイル画像縮小処理 … 省略 */
gsel 3 // 描画先をサムネイルウィンドウに戻す
}
}
}
stop
/***************************
* 共通処理 *
***************************/
/* プログラムの終了処理 */
*exit
/* 省略 */
/* テキストからキャプションを読み込む */
*caption
/* テキストデータ取得処理 … 省略 */
return // 処理を戻す
/* ボタン押下時の処理 */
*btnclick
if stat = 0 : goto *greeting
if stat = 1 : goto *help
if stat = 2 : goto *exit
if stat = 3 : goto *titlelist
if stat = 4 : goto *slide
if stat = 5 : goto *thumbnail
となります。
動かなくなったきっかけとしては、ソースの29行目
// 250×50サイズのボタンを、縦に3個、横2列に並べています
以降の画像ボタンを使用してからになります。
(以前は通常のボタンを使用しておりました)
ボタン押下時は、statの結果により、gotoで遷移させるようにしました。
遷移できない原因は、ウィンドウIDの指定等によるものなのでしょうか。
説明が足りず、わかりづらかったら申し訳ありません。
どうぞよろしくお願い致します。

| |
|
2010/7/24(Sat) 21:45:12|NO.33902
>しかしながら、通常のボタンを使用していた時には、普通に動いてくれていたものが、
>画像ボタンを使用することにより、画面への遷移ができなくなってしまいました。
質問内容が遷移ができないということですので、
#include "llmod3/llmod3.hsp"
#include "llmod3/misc.hsp"
#include "hspcv.as"
↑をインクルードしてないことで、
エラーが発生するということではないようですね。
原因が↓の処理以降を追加したことみたいなので、
// 250×50サイズのボタンを、縦に3個、横2列に並べています
repeat 6
if cnt >= 0 & cnt < 3 {
pos btnX, 360 + cnt*50
button "", *btnclick
btnimg cnt, 6, 0, cnt*50, 250, 50
} if cnt >= 3 & cnt <= 5 {
pos btnX + 270, 360+cnt*50-150
button "", *btnclick
btnimg cnt, 6, 0, cnt*50, 250, 50
}
loop
if文の条件を括弧で括っていないことで、
意図しない条件で処理しているかもしれません。
if (cnt >= 0) & (cnt < 3) {
pos btnX, 360 + cnt*50
button "", *btnclick
btnimg cnt, 6, 0, cnt*50, 250, 50
}
if (cnt >= 3) & (cnt <= 5) {
pos btnX + 270, 360+cnt*50-150
button "", *btnclick
btnimg cnt, 6, 0, cnt*50, 250, 50
}
あと過去スレのNO.20594でですが、
Windows Vista環境でllmod3のbtnimgが使えないというスレがありました。
原因としてmisc.hspにバグがあるようです。
私も、Windows Vista環境でバッチリとエラーがでました。
Windows Vista以外の端末で、引き続き調べようと思います。
|
|
2010/7/25(Sun) 01:27:45|NO.33909
テック 様
こんばんは。
ご返答ありがとうございます。
includeに関しては、処理的に必要な以下のもの
#include "hspcv.as"
#include "scrlbar.hsp"
#include "llmod3\\llmod3.hsp"
#include "llmod3\\misc.hsp"
#include "obj.as"
を指定しております。(エラーも発生しておりません)
btnimgについては、こちらの掲示板の過去ログも検索しましたので、
Vista環境でエラーが発生するということは存じてはおります。
当方の環境はXPなのですが、うまく遷移が行えず…
当方で試したものとしては、btnimgを使用する際、screen0、3、4の3種の簡易画面を作り、
mesで表示させただけの画面で遷移が行えるか試してみましたが、やはり遷移が行えませんでした。
btnimgを使用する際、
ttp://quasiquote.org/hspwiki/HSPHelp:btnimg
ttp://hsp.tv/play/pforum.php?mode=pastwch&num=5998
ttp://hsp.tv/play/pforum.php?mode=pastwch&num=20594
ttp://www.onionsoft.net/hsp/bbs/log/86.html(12041・12043・12052)
などを参考に致しました。
ウィンドウIDも4までになるので、問題ないとは思うのですが…
尚、一応ソースをscreenとmesくらいにして、簡潔なプログラムで実験してみました。
#include "hspcv.as"
#include "scrlbar.hsp"
#include "llmod3.hsp"
#include "misc.hsp"
#include "obj.as"
// 初期ウィンドウをディスプレイサイズで作成
screen 0, ginfo_dispx, ginfo_dispy
// 表示サイズを設定
width 800, 600
// ポジション
btnPosBackX = 500
btnPosBackY = 510
// ボタンサイズを指定
btnSizeW = 250
btnSizeH = 50
*top
onexit gosub *exit // プログラムの終了処理
cls
// 画像読み込み用バッファ作成を作成
buffer 6 : picload "image.bmp" // ボタン画像
screen 0, 800, 600
objsize 250, 50
repeat 6
if cnt >= 0 & cnt < 3 {
pos btnX, 360 + cnt*50
button "", *btnclick
btnimg cnt, 6, 0, cnt*50, 250, 50
} if cnt >= 3 & cnt <= 5 {
pos btnX + 270, 360+cnt*50-150
button "", *btnclick
btnimg cnt, 6, 0, cnt*50, 250, 50
}
loop
stop
*greeting
onexit gosub *exit
cls
mes "*greeting"
// 前画面遷移
pos btnPosBackX, btnPosBackY
objsize btnSizeW, btnSizeH
button "", *top
btnimg cnt, 6, 0, 300, 250, 50
stop
*help
onexit gosub *exit
cls
mes "*help"
// 前画面遷移
pos btnPosBackX, btnPosBackY
objsize btnSizeW, btnSizeH
button "", *top
btnimg cnt, 6, 0, 300, 250, 50
stop
*titlelist
onexit gosub *exit
cls
screen 3, 800, 600
mes "*titlelist"
// 画像表示用ボタン
objsize 160, 50
id = stat
button "", *title_click
btnimg cnt, 6, 0, 350, 160, 50
// 前画面遷移
pos btnPosBackX, btnPosBackY
objsize btnSizeW, btnSizeH
id = stat
button "", *top
btnimg cnt, 6, 0, 300, 250, 50
stop
*title_click
onexit gosub *exit // プログラムの終了処理
screen 4, 800, 650 // ウィンドウID3を作成
mes "*titlelist"
// 閉じるボタン
pos btnPosBackX + 170, 580
objsize 110, btnSizeH
id = stat
button "", *exit
btnimg cnt, 6, 0, 400, 110, 50
mes ginfo_act : stop
stop
*slide
onexit gosub *exit
screen 3, 800, 650
mes "*slide"
stop
*thumbnail
onexit gosub *exit
onclick goto *thumbnail_click
screen 3, 800, 600
mes "*thumbnail"
// 画像表示用ボタン
objsize 160, 50
id = stat
button "", *thumbnail_click
btnimg cnt, 6, 0, 350, 160, 50
stop
*thumbnail_click
screen 4, 800, 600
mes "*thumbnail_click"
stop
*exit
// ウィンドウIDが0以外はウィンドウを非表示
if ginfo_act = 0 {
end
} else : if ginfo_act = 3 {
gsel wparam, -1
} else : if ginfo_act = 4 {
wait 20 : gsel wparam, -1 : gsel 3 : return
}
/* ボタン押下時の処理 */
*btnclick
if stat = 0 : goto *greeting
if stat = 1 : goto *help
if stat = 2 : goto *exit
if stat = 3 : goto *titlelist
if stat = 4 : goto *slide
if stat = 5 : goto *thumbnail
その結果、ウィンドウは表示されるようになりました。
しかし、上記ソース内に、実際のメソッドを入れると、やはり画面の遷移ができなくなってしまいます。
とりあえず補足させていただきました。
まずは、
if文の条件を括弧で括っていないことで、
意図しない条件で処理しているかもしれません。
if (cnt >= 0) & (cnt < 3) {
pos btnX, 360 + cnt*50
button "", *btnclick
btnimg cnt, 6, 0, cnt*50, 250, 50
}
if (cnt >= 3) & (cnt <= 5) {
pos btnX + 270, 360+cnt*50-150
button "", *btnclick
btnimg cnt, 6, 0, cnt*50, 250, 50
}
のようにして、動かしてみたいと思います。
ありがとうございます。

| |
|
2010/7/26(Mon) 03:02:24|NO.33963
補足させていただきます。
まず、NO.33902でご指示いただいたように、if文の条件を括弧でくくって動作させましたが、
変わりませんでした。
また、NO.33909にてscreenとmes機能のみの簡易ソースで動作させたところ、
動作したとご報告させていただきましたが、
「*slide」「*thumbnail」「*thumbnail_click」の完成済みメソッドを入れたところ、
問題なく動作致しました。
現在表示できないのは、「*titlelist」と「*title_click」ということになります。
やはりbtnimgの関係なのでしょうか?
|
|
2010/7/29(Thu) 22:38:30|NO.34077
お世話になっております。
自分なりに解析してみました。
どうやら、No.33887の15行目からのbufferでの画像呼び込みで、重すぎてその先が動かなくなるようです。
試しに、全て画像を使わない簡易プログラムを書き、その中に完成している
「タイトル一覧」「スライドショー」「サムネイル表示」機能を挿入したところ、
無事に動くことを確認しました。
そこで問題なのが、どうしてもTOP画面に画像を使用しなければなりません。
HSPの参考サイトに、
> ちなみに、バッファ画面は用意すれば用意するだけメモリを消費します。
> 複数の画像ファイルを1つのバッファ画面でやりくりするのと、
> 1つの画像ファイルに対して1つのバッファ画面を用意していくのとでは、
> メモリ消費量が違います。ここらへんはあまり敏感になることはないですが、
> ムダにバッファ画面を乱立させないようにするといいでしょう。
とありましたので、画像を全てひとつのファイルにまとめ、(画像サイズ:1050×1300)
bufferで読み込んだところ、やはりtop画面のボタンから遷移できなくなりました。
bufferの初期化(実際は1×1などで再設定するとのことですが)も考えましたが、
最初にbufferを読み込む時点で、その先の処理に進めなくなりますので、
どうしたらいいか、皆目見当もつきません。
どうかご助力の程、よろしくお願い致します。
|
|
2010/7/31(Sat) 08:47:16|NO.34112
普通のPCで1050x1300程度の画像をロードしたぐらいじゃフリーズしないと思うけどなあ
アイルーさんのPCのスペックってどのくらいですか?
本当にバッファ読み込み時点でフリーズしているかどうか、読み込んだあとにlogmes命令つかって調べてみては?
|
|
2010/8/8(Sun) 16:13:03|NO.34307
nns 様
返信遅くなり申し訳ありません。
自分のPCのスペックですが、
Pentium 4 2.80GHz
2GB RAM
となります。
logmesでログを吐き出しながら処理を行なったところ、
フリーズしているわけではありませんでした。
(画面は真っ白だったので、フリーズしていると思い込んでおりました)
原因はウィンドウIDの競合?ではないかと思います。
(ウィンドウIDがかぶってしまい、うまく表示されなくなっているようでした)
screen IDとbuffer IDをかぶらないようにしたところ、問題なく表示されました。
初歩的な原因でお騒がせいたしました。
ご助言ありがとうございました。
|
|