|
|
2019/4/15(Mon) 20:48:31|NO.87181
grollを使ったスクロールでボタンも文字と同じように
スクロールさせようと考えているのですが,
スクロールしません.
改善策がありましたら,教えていただけませんか.
screen 0,1200,3000,0,0,0,1200,800
pos 400, 0:mes "0"
pos 400, 100:mes "1"
pos 400, 200:mes "2"
pos 400, 300:mes "3"
pos 400, 400:mes "4"
pos 400, 500:mes "5"
pos 400, 600:mes "6"
pos 400, 700:mes "7"
pos 400, 800:mes "8"
pos 400, 900:mes "9"
pos 400, 1000:mes "10"
pos 400, 1100:mes "11"
pos 400, 1200:mes "12"
PosX = 400 //初期のスクロール左上横座標 (ginfo(8) と同等)
PosY = 400 //初期のスクロール左上縦座標 (ginfo(9) と同等)
groll PosX,PosY //初期のビュー座標変更
pos PosX,PosY
button "", *click
*main
await 10
if(mousey<120)&(PosY > 0){
PosY=PosY-10 : groll PosX,PosY
}
if(mousey>500)&(PosY < 800) {
PosY=PosY+10 : groll PosX,PosY
}
goto *main
*click
dialog "Button was clicked!"
goto *main
|
|
2019/4/15(Mon) 21:32:17|NO.87182
ボタンの移動はWin32APIのSetWindowPos関数かMoveWindow関数を使えばいいと思いますが。
#uselib "USER32.DLL"
#func SetWindowPos "SetWindowPos" int,int,int,int,int,int,int
#define SWP_NOSIZE 0x0001
button "",*dummy
obj_hwnd=objinfo_hwnd(stat)
wait 100
SetWindowPos obj_hwnd,0,50,50,0,0,SWP_NOSIZE
*dummy
|
|
2019/4/16(Tue) 09:56:04|NO.87185
返信ありがとうございました.
その関数を使ってもうまくいきませんでした.
ボタンが画面の同じ場所にいて,スクロールできませんでした.
また,スクロールはマウスの位置が画面の上にあるとき,上にスクロール,
下にあるとき,下にスクロールとなっております.
|
|
2019/4/16(Tue) 11:18:35|NO.87187
こんな感じでいいのかな?
#include "user32.as"
screen 0,1200,3000,0,,,1200,800
pos 400, 0:mes "0"
pos 400, 100:mes "1"
pos 400, 200:mes "2"
pos 400, 300:mes "3"
pos 400, 400:mes "4"
pos 400, 500:mes "5"
pos 400, 600:mes "6"
pos 400, 700:mes "7"
pos 400, 800:mes "8"
pos 400, 900:mes "9"
pos 400, 1000:mes "10"
pos 400, 1100:mes "11"
pos 400, 1200:mes "12"
PosX = 400 //初期のスクロール左上横座標 (ginfo(8) と同等)
PosY = 400 //初期のスクロール左上縦座標 (ginfo(9) と同等)
BtnSizeX = 100 //初期ボタンのサイズ(X)
BtnSizeY = 24 //初期ボタンのサイズ(Y)
groll PosX,PosY //初期のビュー座標変更
objsize BtnSizeX,BtnSizeY //ボタンのサイズ変更
pos PosX,PosY
button "", *click
BtnHWND = objinfo(stat,2)
BtnX = PosX : BtnY = PosY
*main
await 10
if(mousey<120)&(PosY > 0){
PosY=PosY-10 : groll PosX,PosY
MoveWindow BtnHWND,PosX,BtnY - ginfo(9),BtnSizeX,BtnSizeY,1
}
if(mousey>500)&(PosY < 800) {
PosY=PosY+10 : groll PosX,PosY
MoveWindow BtnHWND,PosX,BtnY - ginfo(9),BtnSizeX,BtnSizeY,1
}
goto *main
*click
dialog "Button was clicked!"
goto *main
|
|
2019/4/16(Tue) 13:39:34|NO.87188
返信ありがとうございました.
ボタンがスクロールされていることが確認できました.
しかし,このスクリプトを実行するとスクロールするまでの
ボタンの座標が,(x,y)=(400,800)となってしまい,スクロールすると,
ボタンの座標が,(x,y)=(PosX,PosY)=(400,400)となってずっと,
(x,y)=(400,400)の位置にいません.
ボタンの座標に変な値が入っているのでしょうか?
あと,MoveWindow関数の意味は,
MoveWindow p1, p2, p3, p4, p5, p6
p1:ウィンドウオブジェクトID
p2:移動後の絶対x座標
p3:移動後の絶対y座標
p4:オブジェクトのサイズ(x座標)
p5:オブジェクトのサイズ(y座標)
p6:?
であってますでしょうか?
|
|
2019/4/16(Tue) 14:35:24|NO.87190
多分、この行
groll PosX,PosY //初期のビュー座標変更
objsize BtnSizeX,BtnSizeY //ボタンのサイズ変更
pos PosX , PosY - ginfo(9) //初期の位置をスクロール分ずらす
ここで初期の数値を考慮してないからだと思うよ。(上記のスクリプトはすでに対処済み)
ボタンのスクロールは、if 内での処理だけしかしてないからね。
[オブジェクトのウィンドウハンドル]
オブジェクトを作成した後に、システム変数(stat)に作成されたオブジェクトのIDが設定される。
button "テスト",*Test で作成した直後の stat 値ね。
その値は、オブジェクトIDなので、それを objinfo のオブジェクトIDとして渡す。
ObjHWND = objinfo(stat,2) // これオブジェクトIDからウィンドウを取得する関数
取得できたオブジェクトのウィンドウハンドルを今度 MoveWindow の関数の引数第一に渡さないといけない。
MoveWindow の引数は、
MoveWindow p1, p2, p3, p4, p5, p6
p1:オブジェクトのウィンドウハンドル(HWND) : HWND = objinfo(オブジェクトID,2)
p2:移動後の絶対x座標(ウィンドウ内部クライアント座標X)
p3:移動後の絶対y座標(ウィンドウ内部クライアント座標Y)
p4:オブジェクトのサイズ(x座標)
p5:オブジェクトのサイズ(y座標)
p6:ウィンドウが移動された後にそのウィンドウを再描画するかのフラグです。 0 で再描画しない 1 で再描画する
|
|
2019/4/16(Tue) 14:57:10|NO.87191
>>MillkeyStarsさん
返信ありがとうございます.
問題が解決しました.
確かに初期の数値を考慮していなかったことが原因でした.
とても親切で的確な指摘と丁寧な説明ありがとうございました.
|
|
2019/4/16(Tue) 22:49:23|NO.87192
解決済みですが、子ウィンドウを使うのはどうでしょう。
#include "user32.as"
oya=hwnd
bgscr 1
chi=hwnd
button "",*aaa
SetParent chi, oya
repeat 500
width ,,0,cnt
wait 3
loop
stop
*aaa
|
|