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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0802
krgrgスクリーンで・・・スクロールバー5解決


krgrg

リンク

2020/8/2(Sun) 15:20:28|NO.91111

毎度お世話になっています

スクロールバー付きの中にウィンドウの中にメッセージボックス等を置きたいのですが
サンプルでは見当たりません。(見逃してたらごめんなさいですが)

もしかしたら簡易的にはできなくて、自前で実装しなければいけないものでしょうか?



この記事に返信する


あらや

リンク

2020/8/3(Mon) 05:51:04|NO.91117

>スクロールバー付きの中にウィンドウの中にメッセージボックス等を置きたい
申し訳ありませんが、質問の意味がわかりません。。。

『メッセージボックス等』というのはオブジェクトとして
ウィンドウにオブジェクトを配置するのはスクロールバーの有無に関係なく

posでオブジェクトの左上座標を設定し
objsizeでオブジェクトの大きさを設定、
そしてmesboxなどでオブジェクトを設置

という流れで出来るはずですが
これでは出来ないのでしょうか?

ウィンドウにスクロールバーが有るからといって
基本的には特別に何かする事はありません。

もしそれでも出来ないというのであれば、
単純にウィンドウの最大サイズよりも外の位置にメッセージボックスを配置しているか、
ウィンドウの最大サイズ自体を間違って初期化しているとしか考えられません。



krgrg

リンク

2020/8/3(Mon) 06:48:42|NO.91118

読み返したら日本語がおかしかったのと説明がわかりにくくて、すいません

例えば、スクリーン命令でウィンドウを作成後
その中にメッセージボックス(単なる文字列でなければ何でもいいですが)を縦に複数設置するとします
メッセージボックスがスクリーンからはみ出た場合、おっしゃる通りはみ出た部分は描画されないです

その見えない部分をスクロールバーで見えるようにしたい、という質問です



沢渡

リンク

2020/8/3(Mon) 18:23:24|NO.91119

だいぶ長くなってしまいましたが、こんな感じでやってみました。
ユーザーがスクロール操作した際、実際のスクロール処理は
自分でやらなければならないあたりが面倒です。
また、画面に描いた文字や図形はgrollでスクロールできるのですが、
オブジェクトについてはSetWindowPos等を使って
自分で移動させなければいけないようです。

#include "user32.as" #const SM_CXVSCROLL 2 #const SM_CYHSCROLL 3 #const WS_HSCROLL 0x100000 #const WS_VSCROLL 0x200000 #const SB_HORZ 0 #const SB_VERT 1 #const SB_BOTH 3 #const SIF_ALL 0x17 #const SIF_DISABLENOSCROLL 0x8 #const SWP_NOSIZE 0x1 #const SWP_NOMOVE 0x2 #const SWP_NOZORDER 0x4 #const SWP_FRAMECHANGED 0x20 #const WM_HSCROLL 0x114 #const WM_VSCROLL 0x115 #const scr_wid 800 //スクリーン全体の(表示されていない部分も含めた)横幅 #const scr_hei 600 //スクリーン全体の(表示されていない部分も含めた)縦幅 #const win_wid0 640 //ウィンドウの横幅 #const win_hei0 480 //ウィンドウの縦幅 #const roll_arr 16 //スクロールバーの矢印を押した時の移動量 #const roll_spc 64 //スクロールバーの空白部分を押した時の移動量 GetSystemMetrics SM_CXVSCROLL //縦スクロールバーの横幅を求める w_adj=stat GetSystemMetrics SM_CYHSCROLL //横スクロールバーの縦幅を求める h_adj=stat screen 0,scr_wid,scr_hei,0,,,win_wid0,win_hei0 //スクロールバーを有効に GetWindowLong hwnd,-16 SetWindowLong hwnd,-16,stat|WS_HSCROLL|WS_VSCROLL win_wid=win_wid0-w_adj win_hei=win_hei0-h_adj dim scrinfo_h,7 //横スクロールバーの設定 scrinfo_h=7*4,SIF_ALL|SIF_DISABLENOSCROLL,0,scr_wid,win_wid,0,0 SetScrollInfo hwnd,SB_HORZ,varptr(scrinfo_h),1 //縦スクロールバーの設定 dim scrinfo_v,7 scrinfo_v=7*4,SIF_ALL|SIF_DISABLENOSCROLL,0,scr_hei,win_hei,0,0 SetScrollInfo hwnd,SB_VERT,varptr(scrinfo_v),1 //スクロールバーを表示 SetWindowPos hwnd,0,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED oncmd gosub *h_scr,WM_HSCROLL oncmd gosub *v_scr,WM_VSCROLL //画面に何か描く pos 0,0 : mes "あいうえお" //画面にオブジェクトを配置 dum1="" : dum2="" x_mb1=0 : y_mb1=30 //一個目のオブジェクトの座標 pos x_mb1,y_mb1 mesbox dum1,800,270,1 h_mb1=objinfo(stat,2) //一個目のオブジェクトのハンドル x_mb2=0 : y_mb2=300 //二個目のオブジェクトの座標 pos x_mb2,y_mb2 mesbox dum2,800,300,1 h_mb2=objinfo(stat,2) //二個目のオブジェクトのハンドル stop *h_scr //横スクロール type=0 s_pos=scrinfo_h(5) goto *scr *v_scr //縦スクロール type=1 s_pos=scrinfo_v(5) *scr flag=1 //移動させたフラグ switch wparam&0xFFFF case 0 //左(上)矢印を押した s_pos-=roll_arr swbreak case 1 //右(下)矢印を押した s_pos+=roll_arr swbreak case 2 //左(上)空白を押した s_pos-=roll_spc swbreak case 3 //右(下)空白を押した s_pos+=roll_spc swbreak case 6 //左端(上端)へ s_pos=0 swbreak case 7 //右端(下端)へ s_pos=65535 swbreak case 4 //ドラッグ終了 case 5 //ドラッグ中 s_pos=(wparam>>16)&0xFFFF swbreak default flag=0 swbreak swend if flag { if type { //縦スクロール s_pos=limit(s_pos,0,scr_hei-win_hei) //最終的な移動量 s_pos2=s_pos-scrinfo_v(5) if s_pos2 { //オブジェクトの座標を変更 y_mb1-=s_pos2 y_mb2-=s_pos2 //スクロールバーを移動 scrinfo_v(5)=s_pos SetScrollInfo hwnd,SB_VERT,varptr(scrinfo_v),1 } else { flag=0 } } else { //横スクロール s_pos=limit(s_pos,0,scr_wid-win_wid) //最終的な移動量 s_pos2=s_pos-scrinfo_h(5) if s_pos2 { //オブジェクトの座標を変更 x_mb1-=s_pos2 x_mb2-=s_pos2 //スクロールバーを移動 scrinfo_h(5)=s_pos SetScrollInfo hwnd,SB_HORZ,varptr(scrinfo_h),1 } else { flag=0 } } } if flag { //画面(オブジェクト以外)をスクロール groll scrinfo_h(5),scrinfo_v(5) //オブジェクトを移動 SetWindowPos h_mb1,0,x_mb1,y_mb1,0,0,SWP_NOSIZE | SWP_NOZORDER| SWP_FRAMECHANGED SetWindowPos h_mb2,0,x_mb2,y_mb2,0,0,SWP_NOSIZE | SWP_NOZORDER| SWP_FRAMECHANGED } return



ふじこlp

リンク

2020/8/3(Mon) 18:33:04|NO.91120

探したら、こんなのがありました。
http://quasiquote.org/hspwiki/%E3%82%A6%E3%82%A4%E3%83%B3%E3%83%89%E3%82%A6%E3%81%AB%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%90%E3%83%BC%E3%82%92%E4%BB%98%E3%81%91%E3%82%8B
これをもとに頑張ればうまくいくかもしれませんよ!



krgrg

リンク

2020/8/3(Mon) 21:27:55|NO.91121

皆さんありがとうございます
沢渡さん、わざわざスクリプトまでありがとうございます
ふじこlpさん、そのスクリプトは見つけて試しましたが
使い方が悪いのか、単純に入れたはずなのに何故か肝心の縦スクロールバーが消えてしまい
ここに至ったわけですが、わざわざ資料をありがとうございます

少ししか調べてなくて質問するのは恐縮だとは思ったんですが・・・
やはり手動なんですねぇ。

沢渡さんを参考に頑張ってみます!!



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