HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0415
adボタンがスクロールしない7解決


ad

リンク

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



ad

リンク

2019/4/16(Tue) 09:56:04|NO.87185

返信ありがとうございました.

その関数を使ってもうまくいきませんでした.
ボタンが画面の同じ場所にいて,スクロールできませんでした.


また,スクロールはマウスの位置が画面の上にあるとき,上にスクロール,
下にあるとき,下にスクロールとなっております.



MillkeyStars

リンク

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



ad

リンク

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:?
であってますでしょうか?



MillkeyStars

リンク

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 で再描画する



ad

リンク

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



ONION software Copyright 1997-2023(c) All rights reserved.