|
 |
|
2010/5/6(Thu) 11:35:45|NO.32470
3回目の投稿です。
お世話になってます。
今回また躓いてしまったのでお聞きしたく
また来てしまいました。
宜しくお願い致します○┓ペコッ
前回、ウィンドウ枠のないウィンドウの操作やリストボックスについて
教えていただきました。
今回お聞きしたいのは
リストボックスの項目をWクリックで最初に戻る、
つまりアプリ自体を再読み込みし、もう一度やり直すことができるようにしたいんです。
今の現状、流れとしては
0ウィンドウ(gsel 0, 1)右クリックでポップアップ
項目クリックで別ウィンドウ(gsel 3, 2)リストボックス表示
; A
; B
; C
; 終了
この終了をWクリックしたとき
リストボックスを表示している3ウィンドウを閉じて
最初の0ウィンドウを表示させ右クリックにてポップアップ表示・・・
と、繰り返しできるようにしたいんですが
どうすればよいのでしょうか。
0ウィンドウとは別のスクリプトで
リストボックスを表示させるためのスクリプトは
bgscr 3,125,185,,50,50,,
bgscr 2,300,300,2,100,100,100,158
gsel 3,2
; WM_COMMAND
oncmd gosub *command, $111
onclick gosub *onjump1
objsize 125,170
listbox a, 60, " \n 1R A\n 2R B\n 3R C\n 4R 終了"
hListbox = objinfo(stat, 2)
GetWindowLong hListbox, -16
SetWindowLong hListbox, -16, stat | 1;LBS_NOTIFY
width , , xpos, ypos
stop
*command
if lparam = hListbox {
if HIWORD(wparam) = 2 {
if a == 1 : bgscr 2,300,300,2,100,100,100,158 : picload "A.jpg" ,1 : gsel 2,2
if a == 2 : bgscr 2,300,300,2,100,100,100,158 : picload "B.jpg" ,1 : gsel 2,2
if a == 3 : bgscr 2,300,300,2,100,100,100,158 : picload "C.jpg" ,1 : gsel 2,2
if a == 4 : gosub *exit
width , , xpos, ypos
}
}
return
*onjump1
gsel 2, -1
gsel 3, 2
return
**********************************************************
元のメインとなるスクリプトに
*exit
; 現在のx座標値、y座標値を保存
notesel buf
noteadd "[WINDOW posx] "+ginfo(4), 0, 1
noteadd "[WINDOW posy] "+ginfo(5), 1, 1
notesave "windowpos.ini"
end
と、書いています。
どこをどう載せて説明すればいいのか
わからないのでわかりづらいかもしれませんが、
宜しくお願い致します。

| |
|
2010/5/6(Thu) 11:52:35|NO.32471
****追記です*****
メインとなスクリプトには下記のようになってます。
ジャンプして読み込んだ先が先ほど書いたリストボックス表示になります。
#include "user32.as"
#define ctype HIWORD(%1) (%1 >> 16 & $FFFF)
#define WM_NCLBUTTONDOWN $000000A1
#define HTCAPTION 2
bgscr 0,300,300,0,,,110,20
picload "dekadepth.jpg" ,1
gsel 0,2
onclick gosub *onjump ; マウスクリック時
onexit *exit1
CreatePopupMenu
hMenu.1 = stat
AppendMenu hMenu.1, 0, $1, "AA"
AppendMenu hMenu.1, 0, $2, "BB"
AppendMenu hMenu.1, 0, $3, "CC"
AppendMenu hMenu.1, $800,0, " "
AppendMenu hMenu.1, 0, 0, "終了"
stop
*onjump
if wparam == 1 {
cursel = ginfo_sel : gsel ginfo_act
sendmsg hwnd ,$a1,2,z
gsel cursel
}
gsel 0,2
xpos = ginfo_wx1;ウィンドウの左上X座標
ypos = ginfo_wy2;ウィンドウの右下Y座標
if wparam = 2 {
TrackPopupMenu hMenu.1, $100, ginfo(0), ginfo(1), 0, hwnd, 0
if stat = 0 : goto *exit ; アプリ終了
if stat = $1 : goto *A
if stat = $2 : goto *B
if stat = $3 : goto *C
return
}
return
*A
#include "a.hsp"
*B
#include "b.hsp"
*C
#include "c.hsp"
exist "windowpos.ini"
if strsize != -1 {
; 前回のx座標値、y座標値を読み込む
notesel buf
noteload "windowpos.ini"
noteget posx, 0
noteget posy, 1
}
screen , 200, 200, 2, int(posx), int(posy)
onexit *exit
gsel 0, 1
stop
*exit
; 現在のx座標値、y座標値を保存
notesel buf
noteadd "[WINDOW posx] "+ginfo(4), 0, 1
noteadd "[WINDOW posy] "+ginfo(5), 1, 1
notesave "windowpos.ini"
end
*error
screen 0,250,50,2
dialog "エラーです。下の数字を報告してください。\n"+"\n1 : "+wparam+"\n2 : "+lparam+"\n3 : "+iparam,1,"エラー"
goto *exit
*exit1
; どこのウィンドウにも張り付いていないメニューは明示的に破棄
DestroyMenu hMenu.1
end
希望としては今のこのスクリプトを変えずに
繰り返しする為のスクリプトを足したいです。
宜しくお願い致します。

| |
|
2010/5/6(Thu) 14:25:21|NO.32475
質問の内容が、とても複雑になってますね~。
ちょっと整理したいのですが、よろしいでしょうか?
1.リストボックスを表示させるためのスクリプトと
メインのスクリプトは、別のHSPファイルになっているのでしょうか?
※注意書きにもありますが、スクリプトは、
半角の<pre>~</pre>で囲んだほうがいいです。
そうすれば、以下の例のように囲んだ箇所のテキストカラーが変わり、
スクリプトとスクリプト以外の区別が付きやすくなります。
また別のHSPファイルになっているのであれば、
以下の例のように但し書きを記載したほうがいいかもしれません。
[リストボックスを表示させるためのスクリプトのファイル名.hsp]
リストボックスを表示させるためのスクリプトの内容
[メインのスクリプトのファイル名.hsp]
メインのスクリプトの内容
2.今の状況は、
①タイトルバー(最小化・最適化・終了ボタン)なし・枠なしのウィンドウが表示される
②ウィンドウを右クリックすると、「AA」「BB」「CC」「終了」の
リストボックスが表示される。
③「AA」「BB」「CC」のいずれかを選択すると、
初期のタイトルバー・枠なしのウィンドウが消えて、
タイトルバー(最小化・最適化・終了ボタン)ありのウィンドウが表示される
以上の状況でよろしいでしょうか?
3.質問の内容は、
④上記③の状態で、ウィンドウを右クリックすると、「AA」「BB」「CC」「終了」の
リストボックスが表示される。
⑤「終了」を選択すると、タイトルバー(最小化・最適化・終了ボタン)あり
のウィンドウが消えて、①のタイトルバー(最小化・最適化・終了ボタン)なし・
枠なしのウィンドウを表示したい
ということでよろいでしょうか?
上記の質問内容であれば、
タイトルバー(最小化・最適化・終了ボタン)なしと
タイトルバー(最小化・最適化・終了ボタン)ありの実行ファイルを
別々に作成し、
exec "filename"命令で実行する方法か、
run "filename"命令で指定したファイルに制御を移す方法が
あると思われます。
※run命令で指定するファイル名は、
HSPスクリプトエディタのメニュー「HSP」-「オブジェクトファイル作成」
で作成した拡張子がAXのファイルでなければいけません。
|
|
2010/5/6(Thu) 19:27:19|NO.32494
お返事ありがとうございます。
(メインとなるスクリプト)
#include "user32.as"
#define ctype HIWORD(%1) (%1 >> 16 & $FFFF)
#define WM_NCLBUTTONDOWN $000000A1
#define HTCAPTION 2
bgscr 0,300,300,0,,,110,20
picload "dekadepth.jpg" ,1
gsel 0,2
onclick gosub *onjump ; マウスクリック時
onexit *exit1
CreatePopupMenu
hMenu.1 = stat
AppendMenu hMenu.1, 0, $1, "AA"
AppendMenu hMenu.1, 0, $2, "BB"
AppendMenu hMenu.1, 0, $3, "CC"
AppendMenu hMenu.1, $800,0, " "
AppendMenu hMenu.1, 0, 0, "終了"
stop
*onjump
if wparam == 1 {
cursel = ginfo_sel : gsel ginfo_act
sendmsg hwnd ,$a1,2,z
gsel cursel
}
gsel 0,2
xpos = ginfo_wx1;ウィンドウの左上X座標
ypos = ginfo_wy2;ウィンドウの右下Y座標
if wparam = 2 {
TrackPopupMenu hMenu.1, $100, ginfo(0), ginfo(1), 0, hwnd, 0
if stat = 0 : goto *exit ; アプリ終了
if stat = $1 : goto *A
if stat = $2 : goto *B
if stat = $3 : goto *C
return
}
return
*A
#include "a.hsp"
*B
#include "b.hsp"
*C
#include "c.hsp"
exist "windowpos.ini"
if strsize != -1 {
; 前回のx座標値、y座標値を読み込む
notesel buf
noteload "windowpos.ini"
noteget posx, 0
noteget posy, 1
}
screen , 200, 200, 2, int(posx), int(posy)
onexit *exit
gsel 0, 1
stop
*exit
; 現在のx座標値、y座標値を保存
notesel buf
noteadd "[WINDOW posx] "+ginfo(4), 0, 1
noteadd "[WINDOW posy] "+ginfo(5), 1, 1
notesave "windowpos.ini"
end
*error
screen 0,250,50,2
dialog "エラーです。下の数字を報告してください。\n"+"\n1 : "+wparam+"\n2 : "+lparam+"\n3 : "+iparam,1,"エラー"
goto *exit
*exit1
; どこのウィンドウにも張り付いていないメニューは明示的に破棄
DestroyMenu hMenu.1
end
(別スクリプトでリストボックスを表示させる為のスクリプト)
(#include "a.hsp")
bgscr 3,125,185,,50,50,,
bgscr 2,300,300,2,100,100,100,158
gsel 3,2
; WM_COMMAND
oncmd gosub *command, $111
onclick gosub *onjump1
objsize 125,170
listbox a, 60, " \n 1R A\n 2R B\n 3R C\n 4R 終了"
hListbox = objinfo(stat, 2)
GetWindowLong hListbox, -16
SetWindowLong hListbox, -16, stat | 1;LBS_NOTIFY
width , , xpos, ypos
stop
*command
if lparam = hListbox {
if HIWORD(wparam) = 2 {
if a == 1 : bgscr 2,300,300,2,100,100,100,158 : picload "A.jpg" ,1 : gsel 2,2
if a == 2 : bgscr 2,300,300,2,100,100,100,158 : picload "B.jpg" ,1 : gsel 2,2
if a == 3 : bgscr 2,300,300,2,100,100,100,158 : picload "C.jpg" ,1 : gsel 2,2
if a == 4 : gosub *exit
width , , xpos, ypos
}
}
return
*onjump1
gsel 2, -1
gsel 3, 2
return
と、なっています。
2.今の状況は、
①タイトルバー(最小化・最適化・終了ボタン)なし・枠なしのウィンドウが表示される
②ウィンドウを右クリックすると、「AA」「BB」「CC」「終了」の
リストボックスが表示される。
③「AA」「BB」「CC」のいずれかを選択すると、
初期のタイトルバー・枠なしのウィンドウが消えて、
タイトルバー(最小化・最適化・終了ボタン)ありのウィンドウが表示される
↑確認内容ですが
②の右クリックでリストボックスじゃなくてポップアップが開きます。
③の初期の枠なしウィンドウが消えてとありますが
消えずに最前面のままそのウィンドウの真下に別ウィンドウでリストボックスが開きます。
質問内容としまして、
そのリストボックスの項目にある終了をWクリックしたとき、
今のスクリプトだとジャンプ先にendとありますので
アプリ自体が終わってしまいます。
それを終わらせずにリストボックスが消えて最初の枠なしのウィンドウだけの状態にし
尚且つそのウィンドウを右クリックにてポップアップ・・・
と、繰り返せるようにしたいんです。

| |
|
2010/5/13(Thu) 10:16:22|NO.32633
おはようございます。
自分なりに考えてやってみた結果なんとかできましたので
お伝えしたく参りました。
別スクリプトのリストボックス項目Wクリック判定の中の
*command
if lparam = hListbox {
if HIWORD(wparam) = 2 {
if a == 1 : bgscr 2,300,300,2,100,100,100,158 : picload "A.jpg" ,1 : gsel 2,2
if a == 2 : bgscr 2,300,300,2,100,100,100,158 : picload "B.jpg" ,1 : gsel 2,2
if a == 3 : bgscr 2,300,300,2,100,100,100,158 : picload "C.jpg" ,1 : gsel 2,2
if a == 4 : gosub *exit
の4項目
if a == 4 : gosub *exit
を
if a == 4 : gsel 2, -1 : gsel 3, -1 : gsel 0, 2 : goto *12345
と、して
メインスクリプトの最初の部分、
#include "user32.as"
#define ctype HIWORD(%1) (%1 >> 16 & $FFFF)
#define WM_NCLBUTTONDOWN $000000A1
#define HTCAPTION 2
bgscr 0,300,300,0,,,110,20
picload "aaaaa.jpg" ,1
のウィンドウ配置する部分bgscr前に、
#include "user32.as"
#define ctype HIWORD(%1) (%1 >> 16 & $FFFF)
#define WM_NCLBUTTONDOWN $000000A1
#define HTCAPTION 2
*12345;ここへ飛ばす
bgscr 0,300,300,0,,,110,20
picload "dekadepth.jpg" ,1
としたら、できました。
ありがとうございました。
|
|