・・・こちらの技術でも無理でしたorz
惜しいところまではいけるんですけどあと1歩の状況が埋まりませんね・・・。
無理やりやっても違和感が残る・・・。
何より条件が厳しい。もう少し絞れるならそれに見合ったコードがありそう。
現状のままは厳しい気がする。詳しい方なら解決できるかも?
>>NO.66563
衣日和氏のモジュールはスクロールの検知とスクロールバーの設置であって、
スクロールバーの操作時の処理はモジュールの外部です。
結果、スクロールバーを利用するのならモジュールは使用する方が楽だと思いますよ。
以下、失敗作(モジュール部分はリンク先より補完してください)
//
// 衣日和氏のモジュール部分省略
//
#uselib "user32.dll"
#func SetParent "SetParent" int,int
#func SetWindowPos "SetWindowPos" int,int ,int,int ,int,int ,int
#func SetWindowLong "SetWindowLongA" int,int,int
#cfunc GetWindowLong "GetWindowLongA" int,int
#define WS_POPUP 0x80000000
#define WS_CHILD 0x40000000
#const WS_POPUP_INV 0xFFFFFFFF^WS_POPUP
#define GWL_STYLE 0xFFFFFFF0
#define SWP_NOSIZE 0x01
#define SWP_NOZORDER 0x04
#define SWP_NOACTIVATE 0x10
#define SWP_NOOWNERZORDER 0x0200
#define DIVPOINTY 20
#define MAINWIDTH 320
#define MAINHEIGHT 240
#define ELEMENTWIDTH MAINWIDTH
#define ELEMENTHEIGHT 840
#define SCR_MAIN 0
#define SCR_SCROLLAREA 1
#define SCR_FULLAREA 2
dialog "bmp;*.jpg;*.gif", 16, "画像ファイル"
if stat == 0 : mes "キャンセル" : stop
FileName = refstr
bgscr SCR_FULLAREA,ELEMENTWIDTH,ELEMENTHEIGHT,2,0,-DIVPOINTY
gsel SCR_FULLAREA
picload FileName,1
objsize 120,24,24
repeat ELEMENTHEIGHT/24
button "ボタン"+cnt,*buttonhit
loop
picsizex = ginfo_sx : picsizey = ginfo_sy
barfat = ScrollBar_GetSystemSize()
fullareahwnd = hwnd
SetWindowLong hwnd,GWL_STYLE,GetWindowLong(hwnd,GWL_STYLE)&WS_POPUP_INV|WS_CHILD
screen SCR_MAIN,MAINWIDTH+barfat,MAINHEIGHT
mainhwnd = hwnd
bgscr SCR_SCROLLAREA,MAINWIDTH,MAINHEIGHT-DIVPOINTY,2,0,DIVPOINTY
SetWindowLong hwnd,GWL_STYLE,GetWindowLong(hwnd,GWL_STYLE)&WS_POPUP_INV|WS_CHILD
SetParent hwnd,mainhwnd
SetParent fullareahwnd,hwnd
gsel SCR_FULLAREA,1
gsel SCR_SCROLLAREA,1
gsel SCR_MAIN
gosub *createscrollbar
gosub *onscroll
labeltmp = *onscroll
ScrollBar_SetSubLabel labeltmp
gsel SCR_MAIN,1
stop
*createscrollbar
pos ginfo_winx - barfat, 0
ScrollBar_Create barfat, ginfo_winy , 1
YBarID = stat ;たてスクのHSPオブジェクトID
ScrollBar_SetRange YBarID, DIVPOINTY , picsizey - 1, ginfo_winy
ScrollBar_SetStep YBarID, 24, ginfo_winy
ScrollBar_SetPos YBarID, DIVPOINTY
return
*onscroll
swpprm = SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOOWNERZORDER
SetWindowPos fullareahwnd,0,0,-ScrollBar_GetPos(YBarID),0,0,swpprm
pos 0,0
gcopy SCR_FULLAREA,0,0,ELEMENTWIDTH,DIVPOINTY
return
*buttonhit
dialog "ボタンを押した"
境界線が分かりづらいですね・・・。
見ての通り画面上部にオブジェクトがでません。メインウィンドウに直接張ることで改善できますが、
非スクロールエリアからはみ出すように設置するケースに対応ができません。
どーやって対応するんでしょうかねえ。