Last Update : 2008/04/xx
XREA.COMのs206サーバー内のサイトは、Yahoo!検索からペナルティを受け、検索結果で常に下位にランク付けされてしまうので、Yahoo!経由向けに用意したHSPミニ講座内のページです。このページは「http://lhsp.s206.xrea.com/hsp_other.html」の昔のものです。
HSP3からActiveXコントロールを標準で利用できるようになりました。axobj命令の説明にあるように、「ATL.dll」(または 「ATL71.dll」)がシステムに導入されている必要があります。Windows 98環境では含まれてない可能性があり、その場合はIE6以降が必要なようです。
Macromedia(現Adobe)のFlash「swfファイル」の単純再生。
onexit *exit sdim filepath, 128 dialog "swf", 16, "Flash ファイル" if stat = 0 : end filepath = refstr axobj flash, "ShockwaveFlash.ShockwaveFlash", 400, 400 flash->"loadMovie" 0, filepath flash->"play" stop *exit delcom flash end
アニメーションGIFファイルの単純再生。IEコンポーネント上での動作となってます。picload命令ではアニメーションとして機能しません。(→ 参照、mci命令でアニメーションGIF再生表示)
onexit *exit pos 50, 50 ; Cドライブ直下にアニメーションGIFファイルがあるとして axobj gif, "C:\\hogehoge.gif", 200, 200 stop *exit delcom gif end
Microsoft Windows Media PlayerのActiveXコントロール。
; Windows Media Player 6.4版(by Kpan) ; かなりテキトー、WMP10以降は利用不可? 詳細はMSDNページへ onexit *exit pos 50, 50 axobj wmp, "{22D6F312-B0F6-11D0-94AB-0080C74C7E95}", 300, 300 ; 他にもたーくさんあり。以下は部品表示オン/オフ。 wmp("ShowControls") = 1 wmp("ShowDisplay") = 1 wmp("ShowStatusBar") = 1 wmp("ShowAudioControls") = 1 ; リピート数 (0は無限ループ) wmp("PlayCount") = 0 ; 再生する音楽や動画のファイルパスやURLアドレス wmp("FileName") = "sample\\demo\\GX3_.MID" stop *exit delcom wmp end
; Windows Media Player 7以降(by Kpan) ; 最新WMPに相当、詳細はMSDNページへ onexit *exit pos 50, 50 axobj wmp, "{6BF52A52-394A-11d3-B153-00C04F79FAA6}", 300, 300 ; WMPバージョン(「*.0.0.****」形式) mes wmp("versionInfo") ; プレーヤー部品表示 ("none"/"mini"/"full"の3種、WMP9以降で非表示の"invisible") wmp("uiMode") = "full" ; 右クリックメニュー表示(0=オフ、1=オン・デフォ) wmp("enableContextMenu") = 0 ; Settingsオブジェクト取得 wmpset = wmp("settings") ; 自動再生(0=オフ、1=オン・デフォ) wmpset("autoStart") = 0 ; ボリューム設定(0〜100) wmpset("volume") = 100 ; 消音ミュート(0=オフ・デフォ、1=オン) wmpset("mute") = 0 ; 再生回数 (1〜) // wmpset("playCount") = 1 ; 無限ループ再生(0=オフ・デフォ、1=オン) wmpset->"setMode" "loop", 0 ; 再生する音楽や動画のファイルパス、URLアドレスもOK wmp("URL") = "sample\\demo\\se_tyuiin.wav" ; Controlsオブジェクト取得 wmpcnt = wmp("controls") button "PLAY", *wmpplay stop *wmpplay wmpcnt->"play" ; その他・・・ // wmpcnt->"pause" // wmpcnt->"stop" // wmpcnt->"next" // wmpcnt->"previous" stop *exit wmp->"close" delcom wmpcnt delcom wmpset delcom wmp end
りんごのQuickTimeコントロール。
// QuickTime テスト (by Kpan) onexit *exit axobj qt, "QTOControl.QTControl.1", 300, 300 if stat = -1 : dialog "error" : end button "", *play stop *play dialog "", 16 if stat = 0 : stop wait 1 qt("URL") = refstr stop *exit delcom qt end
HSPのdialog命令(モード32、33)で利用できる色選択ダイアログ。ダイアログを開いた時点での選択色は、灰色固定です。また、ダイアログの右側にあるカラーマトリックス(色作成機能)で作成できるカスタムカラー一覧は、黒一色になっています。
HSPの色選択ダイアログは、内部でChooseColor関数を呼び出しているので、これを直で利用してみます。以下はモジュール形式でこしらえてあります。
/*----------------------------------------------------------------------- 拡張 色選択ダイアログ モジュール by Kpan (Let's HSP!) dialog_color p1, p2, p3 p1 = ダイアログタイプ $0 : カラーマトリックス非表示+「色の作成」ボタン有効 $2 : カラーマトリックス表示 $4 : カラーマトリックス非表示+「色の作成」ボタン無効 p2 = 初期選択色 (0xRRGGBB形式、無指定の場合は黒) p3 = カスタムカラーの配列リスト (16個分、varptr関数で渡す) statに0=キャンセル、1=成功。ginfo(16)〜ginfo(18)、または ginfo_r/ginfo_g/ginfo_b に選択したRGB値が返ります。 -----------------------------------------------------------------------*/ #module #uselib "comdlg32" #cfunc ChooseColor "ChooseColorA" int #deffunc dialog_color int p1, int p2, int p3 dim sCHOOSECOLOR, 9 if p3 : lpCustColor = p3 : else : lpCustColor = varptr (hoge) sCHOOSECOLOR = 36, hwnd, 0, p2, lpCustColor, $1 | p1 if ChooseColor (varptr (sCHOOSECOLOR)) { mref BMSCR, 67 BMSCR.40 = sCHOOSECOLOR.3 } return stat #global // <以下、サンプル> // エディタの[HSP]→[HSP拡張マクロを使用する]を要有効 ; RGBカラーコードを 0xRRGGBB形式 に変換するマクロ #define ctype RGB(%1,%2,%3) (%1 | %2 << 8 | %3 << 16) button "赤デフォ", *samp1 button "カラーリスト", *samp2 stop *samp1 dialog_color 2, RGB($FF,0,0) mes ""+stat+" ["+ginfo (16)+", "+ginfo (17)+", "+ginfo (18)+"] stop *samp2 color_list = RGB($90,$EE,$90), RGB($AD,$D8,$55), RGB($BA,$55,$D3) dialog_color 4, , varptr (color_list) mes ""+stat+" ["+ginfo (16)+", "+ginfo (17)+", "+ginfo (18)+"] stop
; WM_DISPLAYCHANGE (ディスプレイの解像度/色数が変化した時) oncmd *jump, $7E stop *jump horizontal = lparam & $FFFF vertical = lparam >> 16 & $FFFF mes "解像度 ("+horizontal+" x "+vertical+" ピクセル)" mes "色数 ("+wparam+" ビット)" stop
Windowsのダイアログ表示によくあるシステム定義のアイコンを描画します。HSPでは、dialog命令で表示できる標準・警告のメッセージボックスで見ることができるものです。LoadIcon関数でアイコンハンドルを取得、DrawIconEx関数で描画します。
; システムアイコンの描画 (by Kpan) #uselib "user32" #cfunc LoadIcon "LoadIconA" int, int #func DrawIconEx "DrawIconEx" int,int,int,int,int,int,int,int,int ; LoadIcon関数 ; 32512(アプリアイコン)、32513(停止アイコン)、32514(?アイコン)、 ; 32515(!アイコン)、32516(iアイコン) hIcon = LoadIcon(, 32513) ; DrawIconEx関数 ; 第2・3パラ(XY表示座標位置)、第5・6パラ(表示サイズ) DrawIconEx hdc, 10, 10, hIcon, 16, 16, , , 3 hIcon = LoadIcon(, 32516) DrawIconEx hdc, 10, 50, hIcon, 32, 32, , , 3 ; 実際に描画の反映 redraw
クリップボードにコピーされたテキストをリアルタイムで表示するサンプルスクリプト。クリップボードに変動があると、WM_DRAWCLIPBOARDメッセージがやってきます。ちなみに、テキスト取得はHSP拡張プラグイン「hspext.dll」に放り投げていますが、「クリップボード HSP」なんかで検索すれば、拡張プラグインを使わずWin32 API関数を使ったモジュールがヒットします。
; クリップボードの監視 by Kpan #include "user32.as" #include "hspext.as" onexit gosub *exit oncmd gosub *drawclipboard, $308 sdim buf, 256 ; 自ウィンドウをクリップボード監視対象にする SetClipboardViewer hwnd hWndNewNext = stat stop ; WM_DRAWCLIPBOARD *drawclipboard clipget buf, 256 mes buf return *exit ; 自ウィンドウを監視対象から削除 ChangeClipboardChain hwnd, hWndNewNext end
できるかな〜?、と思って試しにコーディングしてみたら実現できた実用性不明な代物です。動作保障なし。Windowsのタスクバーにある「スタート」ボタンの表示文字列を {表面上} 変更します。プログラムを終了しても元に戻らないので、一応自前で戻してください。タスクバーが再描画されたり、PCを再起動するなりすれば、元に戻りますが。
なお、ボタン自体の横幅サイズが変わらないので、実際に表示できる文字列は最大8バイト(全角4文字)ぐらいです。短っ。。。
; Windowsのスタートボタン変更サンプル (by Kpan) ; !Windows Vistaでは利用不可 #uselib "user32" #cfunc FindWindowEx "FindWindowExA" int, nullptr, str, nullptr ; ボタンのハンドルを取得し、 hStart = FindWindowEx (FindWindowEx( , "shell_traywnd"), "button") ; 文字列変更。(WM_SETTEXT) sendmsg hStart, $C, , "HSP!" ; チェックボックス化・・・。(^^; // sendmsg hStart, $F4 , $3
ちなみに、表面上ではなく実際に文字列を変更する場合は、「Resource Hacker」などを利用してリソースを直接いじる必要があるみたいです。