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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0406
kerupani (投稿者削除)4解決


kerupani

リンク

2010/4/6(Tue) 19:48:29|NO.31825

この記事は投稿者により削除されました。
2010/6/12(Sat) 20:48:51



この記事に返信する


なたで

リンク

2010/4/7(Wed) 00:24:49|NO.31830

>サブルーチン「*OnNavigateComplete2」でリンクによる移動かどうか取得する
はちょっと分かりませんが、「進む」「戻る」の実装なら。


#define DIID_DWebBrowserEvents2 "{34A715A0-6587-11D0-924A-0020AFC7AC4D}" #define DISPID_COMMANDSTATECHANGE 105 #define CSC_NAVIGATEFORWARD 1 #define CSC_NAVIGATEBACK 2 objsize 200,20 pos 0,0:button gosub "戻る",*back:back_id = stat pos 200,0:button gosub "進む",*forward:forward_id = stat pos 0,20:axobj ie, "Shell.Explorer.2",640,460 ie -> "Navigate" "http://www.google.com/" comevent ie_event, ie, DIID_DWebBrowserEvents2, *event stop *event dispid = comevdisp(ie_event) if(dispid == DISPID_COMMANDSTATECHANGE) { gosub *OnCommandStateChange } return *OnCommandStateChange comevarg command, ie_event, 0 comevarg isenable, ie_event, 1 if(command == CSC_NAVIGATEFORWARD) { objenable forward_id, isenable } else:if (command == CSC_NAVIGATEBACK) { objenable back_id, isenable } return *forward ie -> "GoForward" return *back ie -> "GoBack" return



backdrop

リンク

2010/4/8(Thu) 10:23:39|NO.31854

さすがに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まで動作させるにはこちらのほうがよいでしょう)



backdrop

リンク

2010/4/8(Thu) 10:34:16|NO.31855

ただ、↑のスクリプトやnetrequest_getを使う手法だと文字コードが限定されてしまうので、
VC++の力を借りてencodeするしかないです。
Visual C++ 2008 Expressでヘッダファイルにフォームを追加すれば、CLIで使えるSystem名前空間が
ネイティブでも使えるようになります。

//ここはVC++の記述 //関数名は適当に、ヘッダーにフォームを追加するのを忘れないでください。 //ENCODE.DLL #include "ヘッダーフォーム.h" System::String^ encodeSJIS( System::String^ p ){ System::IO::StreamWriter^ writer = gcnew System::IO::StreamWriter( "tmp.txt", false, System::Text::Encoding::GetEncoding("shift_jis") ); writer->Write( p ); writer->Close(); System::IO::StreamReader^ reader = gcnew System::IO::StreamReader( "tmp.txt", System::Text::Encoding::GetEncoding("shift_jis") ); System::String^ s = ""; while(( ln = reader->ReadLine()) != nullptr ){ s += ln; } return s; }

;んでもって↑のDLLをインポート #uselib "ENCODE.DLL" #cfunc encodeSJIS "encodeSJIS" sptr



kerupani

リンク

2010/5/6(Thu) 18:32:20|NO.32483

みなさん、ありがとうございます。



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