HSP3 あれこれ <その他>

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

↑TOP↑

画面の解像度/色数変化のチェック

;	WM_DISPLAYCHANGE (ディスプレイの解像度/色数が変化した時)
	oncmd *jump, $7E

	stop

*jump
	horizontal = lparam & $FFFF
	vertical = lparam >> 16 & $FFFF

	mes "解像度 ("+horizontal+" x "+vertical+" ピクセル)"
	mes "色数 ("+wparam+" ビット)"

	stop

↑TOP↑

システムアイコンの表示

 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

↑TOP↑

クリップボードの監視

 クリップボードにコピーされたテキストをリアルタイムで表示するサンプルスクリプト。クリップボードに変動があると、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

↑TOP↑

「スタート」ボタンの表示名変更

 できるかな〜?、と思って試しにコーディングしてみたら実現できた実用性不明な代物です。動作保障なし。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」などを利用してリソースを直接いじる必要があるみたいです。

↑TOP↑

〜HSP3 あれこれ〜
ウィンドウ | オブジェクト | ファイル | フォルダ | キーボード | マウス | メニュー | システム | 文字列 | COM | その他

Copyright © 2005-2012 . All rights reserved.