さすがにweb.hspでは限界があるので一から作ってみるのも、意外と面白い!?
次は、現在制作中のブラウザサンプル↓
;BROWSER SAMPLE
#uselib "USER32.DLL"
#define SB_HORZ 0x00 ;水平バー
#define SB_VERT 0x01 ;垂直バー
#define SIF_ALL $00000017 ;オールマスク(解説は省略)
#define WM_HSCROLL $00000114 ;横スクロールイベント
#define WM_VSCROLL $00000115 ;縦スクロールイベント
#func SetScrollInfo "SetScrollInfo" int,int,sptr,int;バー値セット
#func ShowScrollBar "ShowScrollBar" int,int,int ;バー表示
#func GetScrollInfo "GetScrollInfo" sptr,sptr,sptr ;バー値取得
screen 0,1120,640,,,,480,160
randomize
dim SCROLLINFO, 7 ;SCROLLINFO構造体
SCROLLINFO(0)=28 ;cbSize 構造体のサイズ
SCROLLINFO(1)=SIF_ALL ;fMask
SCROLLINFO(2)=0 ;nMin スクロール幅の最小値
SCROLLINFO(3)=640 ;nMax スクロール幅の最大値
SCROLLINFO(4)=0 ;nPage スクロールする値
SCROLLINFO(5)=0 ;nPos スクロール位置
SCROLLINFO(6)=0 ;nTrackPos つまみの位置
dim SCROLLINFO2, 7 ;SCROLLINFO構造体
SCROLLINFO2(0)=28 ;cbSize 構造体のサイズ
SCROLLINFO2(1)=SIF_ALL ;fMask
SCROLLINFO2(2)=0 ;nMin スクロール幅の最小値
SCROLLINFO2(3)=480 ;nMax スクロール幅の最大値
SCROLLINFO2(4)=0 ;nPage スクロールする値
SCROLLINFO2(5)=0 ;nPos スクロール位置
SCROLLINFO2(6)=0 ;nTrackPos つまみの位置
groll 1120/2-240,640/2-80
curposx=0
title "しばらくお待ちください..."
;▼URLを指定
sURL = "http://backdrop.sakura.ne.jp/"
;▼セーブする場合のHTML名 (任意)
sDest = dirinfo(0)+"\\dsthtml.htm"
;▼CharCodeを指定
charcode = "Shift_JIS"
;charcode = "UTF-8"
newcom objXMLHTTP, "Microsoft.XMLHTTP"
objXMLHTTP->"Open" "GET", sURL, 0
objXMLHTTP->"Send"
;▼status OKならHTMLテキストファイルを指定のCharCodeで取得
if objXMLHTTP("status") = 200 {
newcom objRS,"ADODB.Stream"
if stat!0 : dialog "ADODB.Streamがサポートされていません。",0 : end
objRS("Type") = 1
objRS->"Open"
sHtml=objXMLHTTP("ResponseBody")
objRS->"Write" sHtml
objRS("Position") = 0
objRS("Type") = 2
objRS("Charset") = charcode
ReturnHTML=objRS("ReadText")
if ReturnHTML = "": title "接続に失敗致しました。":stop
;ファイルとして保存する場合
;objRS->"Savetofile" sDest,adSaveCreateOverWrite
objRS->"Close"
}else{
title "接続に失敗致しました。":stop
}
*top
;バーセット
notesel ReturnHTML
pfH = notesize > 6000000
if pfH{
screen 0,notesize/15,notesize/55,,5,10,800,600
}else{
screen 0,notesize*2,notesize/5,,5,10,800,600
}
font "Meiryo UI", 14
mes ReturnHTML
ShowScrollBar hwnd, SB_HORZ, 1
if pfH : SCROLLINFO(3) = notesize / 15-800 : else : SCROLLINFO(3) = notesize*2-800
SetScrollInfo hwnd, SB_HORZ, varptr(SCROLLINFO) ,1
ShowScrollBar hwnd, SB_VERT, 1
if pfH : SCROLLINFO2(3) = notesize / 55-600 : else : SCROLLINFO2(3) = notesize / 5 - 600
SetScrollInfo hwnd, SB_VERT, varptr(SCROLLINFO2) ,1
*main
;タイトルを取得
titi = instr( ReturnHTML, 0, "<title>" )
tits = ""
getstr tits, ReturnHTML, titi+7, '/';終了タグ"/"まで取り出し
tits2 = instr( tits, 0, "<" )
title "BKD BROWSE - " + strmid( tits, 0, tits2 );1文字減らす
oncmd gosub *pe, WM_HSCROLL;横スクロールでジャンプ
oncmd gosub *pf, WM_VSCROLL;縦スクロールでジャンプ
mode =0
repeat
stick kk,15
x = ginfo( 8 ) : y = ginfo( 9 )
if kk & 1 : x-=3
if kk & 2 : y-=3
if kk & 4 : x+=3
if kk & 8 : y+=3
SCROLLINFO(6) = x : gosub *pemove
SCROLLINFO2(6) = y : gosub *pfmove
groll x, y
;座標表示
await 5
loop
*pe
GetScrollInfo hwnd, SB_HORZ, varptr( SCROLLINFO )
gosub *pemove
return
*pemove
;横移動処理
SCROLLINFO(5)=SCROLLINFO(6)
;sendmsg scb_hwnd, SBM_SETSCROLLINFO, 0, varptr(SCROLLINFO)
SetSCROLLINFO hwnd, SB_HORZ, varptr(SCROLLINFO), 1
groll SCROLLINFO(5), ginfo(9)
return
*pf
GetScrollInfo hwnd, SB_VERT, varptr( SCROLLINFO2 )
gosub *pfmove
return
*pfmove
;縦移動処理
SCROLLINFO2(5)=SCROLLINFO2(6)
;sendmsg scb_hwnd, SBM_SETSCROLLINFO, 0, varptr(SCROLLINFO)
SetSCROLLINFO hwnd, SB_VERT, varptr(SCROLLINFO2), 1
groll ginfo(8), SCROLLINFO2(5)
return
完全に「生」のHTMLを表示します。
ページサイズに合わせて初期化ウィンドウサイズが自動調整されます。
(hspinet.asのnetrequest_getや*_postを使ってもいいです。CGIまで動作させるにはこちらのほうがよいでしょう)