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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0405
スクロールバーをつけた時に、inputも動かせるようにしたい。1解決


リンク

2017/4/5(Wed) 21:34:45|NO.78937

http://hsp.tv/play/pforum.php?mode=pastwch&num=31812
このURLから取ってきたスクリプトでスクロールバーをつけたのですが、inputで作った入力ボックスが動きません。
入力ボックスも一緒に動くようにするにはどうしたら良いですか?



#include "hsp3util.as" #include "user32.as" ; ウィンドウスタイル #define WS_CHILD $40000000 #define WS_VISIBLE $10000000 ; スクロールバースタイル #define SBS_HORZ $00000000 ;水平スクロールバー #define SBS_VERT $00000001 ;垂直スクロールバー ; スクロールバー通知コード #define SB_LINELEFT $00000000 ;左の矢印を押した #define SB_LINEUP $00000000 ;上の矢印を押した #define SB_LINERIGHT $00000001 ;右の矢印を押した #define SB_LINEDOWN $00000001 ;下の矢印を押した #define SB_PAGELEFT $00000002 ;つまみの左側を押した #define SB_PAGEUP $00000002 ;つまみの上側を押した #define SB_PAGERIGHT $00000003 ;つまみの右側を押した #define SB_PAGEDOWN $00000003 ;つまみの下側を押した #define SB_THUMBPOSITION $00000004 ;つまみを離した #define SB_THUMBTRACK $00000005 ;つまみを押した(ドラッグ) #define SB_ENDSCROLL $00000008 ;スクロール終了 ; スクロールバー識別子 #define SB_CTL $00000002 ;作成したコントロールスクロールバー ; SCROLLINFO構造体 定数 #define SIF_ALL $00000017 #define SIF_DISABLENOSCROLL $00000008 #define SIF_PAGE $00000002 #define SIF_POS $00000004 #define SIF_RANGE $00000001 #define SIF_TRACKPOS $00000010 ; sendmsg用送信メッセージ #define SBM_GETPOS $000000E1 #define SBM_GETRANGE $000000E3 #define SBM_GETSCROLLINFO $000000EA #define SBM_SETPOS $000000E0 #define SBM_SETRANGE $000000E2 #define SBM_SETRANGEREDRAW $000000E6 #define SBM_SETSCROLLINFO $000000E9 ; スクロールバーメッセージ #define WM_HSCROLL $00000114 ;水平スクロールメッセージ #define WM_VSCROLL $00000115 ;垂直スクロールメッセージ screen 0, 1280, 960, , , ,640, 480 gradf 0, 0, 1280, 960, 0, $ffffff, $ff9999 color 255 redraw 0 repeat 1280 line 0, 0, cnt, 960 loop redraw 1 pos 0, 460 ;scrollbar 640, 20 ;↓と同じ winobj "SCROLLBAR", "", 0, WS_CHILD|WS_VISIBLE|SBS_HORZ, 620, 20 ;横スクロールバー scb_hwnd=objinfo(stat, 2) pos 620, 0 winobj "SCROLLBAR", "", 0, WS_CHILD|WS_VISIBLE|SBS_VERT, 20, 460 ;縦スクロールバー scb_hwnd2=objinfo(stat, 2) nPage=32 dim SCROLLINFO, 7 ;SCROLLINFO構造体 SCROLLINFO(0)=28 ;cbSize 構造体のサイズ SCROLLINFO(1)=SIF_ALL ;fMask SCROLLINFO(2)=0 ;nMin スクロール幅の最小値 SCROLLINFO(3)=ginfo(12) ;nMax スクロール幅の最大値 SCROLLINFO(4)=nPage ;nPage スクロールする値 SCROLLINFO(5)=0 ;nPos スクロール位置 SCROLLINFO(6)=0 ;nTrackPos つまみの位置 sendmsg scb_hwnd, SBM_SETSCROLLINFO, 1, varptr(SCROLLINFO) ; SetScrollInfoでも同じ処理 ;SetScrollInfo scb_hwnd, SB_CTL, varptr(SCROLLINFO), 1 SCROLLINFO(3)=ginfo(13) ;nMax SCROLLINFO(4)=nPage ;nPage sendmsg scb_hwnd2, SBM_SETSCROLLINFO, 1, varptr(SCROLLINFO) pos 620, 460 statictext "", 20, 20 ;右下の空白部分を埋めるだけのオブジェクト oncmd gosub *SCB_ROLL, WM_HSCROLL oncmd gosub *SCB_ROLL, WM_VSCROLL stop *SCB_ROLL oncmd 0 ip=iparam ;メッセージID wp=wparam ;通知コード lp=lparam ;スクロールしているスクロールバーのハンドル bar_pos=(wp>>16)&$ffff ;wparamの上位ワード(スクロール位置情報) wp=wp&$ffff ;wparamの下位ワード(通知コード) SCROLLINFO(1)=SIF_ALL sendmsg lp, SBM_GETSCROLLINFO, 0, varptr(SCROLLINFO) ;GetScrollInfo scb_hwnd, SB_CTL, varptr(SCROLLINFO) switch wp case 0 ;SB_LINELEFT or SB_LINEUP SCROLLINFO(5)-=1 swbreak case 1 ;SB_LINERIGHT or SB_LINEDOWN SCROLLINFO(5)+=1 swbreak case 2 ;SB_PAGELEFT or SB_PAGEUP SCROLLINFO(5)-=SCROLLINFO(4) swbreak case 3 ;SB_PAGERIGHT or SB_PAGEDOWN SCROLLINFO(5)+=SCROLLINFO(4) swbreak case 5 ;SB_THUMBTRACK ;4(SB_THUMBPOSITION)にするとつまみを放した時だけスクロール処理を行う SCROLLINFO(5)=bar_pos swbreak swend SCROLLINFO(1)=SIF_POS ;SIF_ALL以外の場合、使う関数や送信メッセージが変わるので注意 SCROLLINFO(5)=limit(SCROLLINFO(5), SCROLLINFO(2), SCROLLINFO(3)) title "スクロールしている位置="+SCROLLINFO(5)+" メッセージID="+ip+" 通知コード="+wp+" スクロールバーのハンドル="+lp ;SetScrollInfoの代わりにsendmsgを使う場合、wparamかlparamは再描画フラグになる。 ;sendmsg lp, SBM_SETSCROLLINFO, 1, varptr(SCROLLINFO) ;wparamが再描画フラグ sendmsg lp, SBM_SETPOS, SCROLLINFO(5), 1 ;lparamが再描画フラグ ;SetScrollInfo scb_hwnd, SB_CTL, varptr(SCROLLINFO), 1 ; スクロール位置の調整 if ip=WM_HSCROLL { bar_x=limit(SCROLLINFO(5), 0, SCROLLINFO(3)-SCROLLINFO(4)) } else { bar_y=limit(SCROLLINFO(5), 0, SCROLLINFO(3)-SCROLLINFO(4)) } groll bar_x, bar_y oncmd 1 return



この記事に返信する


リンク

2017/4/6(Thu) 18:41:19|NO.78976

使わなくて済みそうなので閉じます。 



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