Last Update : 2008/04/xx
COMオブジェクト、ActiveXコントロールのサンプルはコチラへ移転しました。
HSPのdialog命令(モード32、33)で利用できる色選択ダイアログ。ダイアログを開いた時点での選択色は、灰色固定です。また、ダイアログの右側にあるカラーマトリックス(色作成機能)で作成できるカスタムカラー一覧は、黒一色になっています。
HSPの色選択ダイアログは、内部でChooseColor関数を呼び出しているので、これを直で利用してみます。以下はモジュール形式でこしらえてあります。
/*----------------------------------------------------------------------- 拡張 色選択ダイアログ モジュール by 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」などを利用してリソースを直接いじる必要があるみたいです。
Copyright © 2005-2012 Kpan. All rights reserved.