HSP Tips 10

Last Update : 2007/10/xx

HSPの全般的なプログラミング情報のトピックスをイーロイーロ。(OwO)/

エディットコントロール

 HSPでメッセージボックスオブジェクトを設置するmesbox命令。内部的には、エディトコントロールと呼ばれるコントロールですが、テキストエディタ(テキスト編集ソフト)として利用するには、少々貧弱すぎます。

 HSPから利用できる外部エディットコントロールライブラリ(DLL)を拾ってみーる・・・

コントロール コメント
Rich Edit Windows標準搭載のリッチエディットコントロール。
(→ 参照、MSDN Rich Editちょくとさんのページ
Footy HSP3のスクリプトエディタでも採用されているコントロール。開発終了。
Footy2 国産エディットコントロール。フリーウェア。HSP3からも利用可。
Scintilla 海外製エディットコンポーネント。かなりの高機能でフリーウェア。
英語ドキュメントを読む必要あり。

↑TOP↑

ZGPプラグイン

 ZIGさんが製作されたHSP拡張プラグイン「ZGP」系。2003年始めあたりに活動休止となりファイルの入手が困難となっています。プラグインそのもの(*.hpi)の入手は、他の利用しているプログラムから拝借できなくはないですが、ヘッダー(*.as)などを含む純粋な配布アーカイブとなると・・・。(X_X)

 ひとまず、いくつか転載(再配布)サイトをテキトーに拾ってみる。また、世界中のウェブページをアーカイブしているWebBack Machineに運良く保存されていたZIGさんのサイト内のHTMLファイルも一部閲覧できます(配布アーカイブは全滅?)。

ZGP, ZGPMX ... http://freett.com/sas1978jp/
ZGP ... http://f31.aaa.livedoor.jp/~zgpinfo/
HTML ... http://web.archive.org/web/*/http://web10.freecom.ne.jp/~rak/*
HTML ... http://web.archive.org/web/*/http://isweb39.infoseek.co.jp/computer/code2/*
HTML ... http://web.archive.org/web/*/http://code2.hp.infoseek.co.jp/*

^

オーナードローボタン

 HSP3で「オーナードローボタン」(オーナー描画ボタン)にチャレンジしてみーる。(^w^)/

 HSPでおなじみのbutton命令。これは、フォーカスを得たり(点線枠)、押して凹んだり、というような状態表示をWindowsが内部で行ってくれています。「オーナードロー」というのは、プログラマー(「オーナー」)が描画(「ドロー」)する処理をすべて用意することで、独自の外観を持ったオブジェクトを表示させることができます。(→ オーナードロー 備忘録)

 HSP2では、マウスを監視してボタン風に動くものを自前で作る以外で、これを実現するのは拡張プラグインなどを利用しないと困難でしたが、HSP3では標準命令とWin32 API関数を使って、それなりに実現できるようになっています。

 ものすごいテキトーな処理の流れを書くと、(1)ボタンオブジェクトを設置し、ボタンのウィンドウスタイルに「BS_OWNERDRAW」を指定する。(2)ウィンドウメッセージ「WM_DRAWITEM」が通知されるようになるので、「DRAWITEMSTRUCT構造体」を元に、Win32 API関数を使ってオブジェクト内を描画する、という感じ。

 以下サンプルスクリプトは、グラデーション描画の処理にGradientFill関数を利用しているので、Windows 98以降の環境が必要になります。

//	[HSP3] オーナードローボタン サンプル
//	by Let's HSP!

#include "user32.as"
#include "gdi32.as"

#uselib "msimg32"
#func GradientFill "GradientFill" int, int, int, int, int, int

#define BS_OWNERDRAW $0B

#define ctype MAKELONG(%1,%2) (%1 & $FFFF | %2 << 16)

;	ウィンドウメッセージ
	oncmd gosub *drawitem, $2B

	sdim pszText

	pos 50, 50
	objsize 100, 70

	button "ぼたーん", *jump
	hButton = objinfo(stat, 2)

;	ボタンのスタイル変更 (BM_SETSTYLE)
	sendmsg hButton, $F4, BS_OWNERDRAW

	stop

;	WM_DRAWITEMメッセージ
*drawitem
;	DRAWITEMSTRUCT構造体
	dupptr DIS, lparam, 48

	if DIS.5 = hButton {
;		ボタン内の塗りつぶし色に白ブラシ
		GetStockObject 0
		SelectObject DIS.6, stat

;		ボタン外枠に角の丸い長方形
		RoundRect DIS.6, 0, 0, DIS.9, DIS.10, 6, 6

;		アイテムの状態 ODS_SELECTED
		if DIS.4 & $1 {
			RedGreen = MAKELONG($CC00, $CC00), MAKELONG($F300, $F300)
			BlueAlpha = MAKELONG($CC00, 0), MAKELONG($F300, 0)
		} else {
			RedGreen.0 = MAKELONG($F300, $F300), MAKELONG($DD00, $DD00)
			BlueAlpha.0 = MAKELONG($F300, 0), MAKELONG($DD00, 0)
		}
		TRIVERTEX.0 = 2, 2, RedGreen.0, BlueAlpha.0
		TRIVERTEX.4 = DIS.9 - 2, DIS.10 - 2, RedGreen.1, BlueAlpha.1
		GRADIENT_RECT = 0, 1
		GradientFill DIS.6, varptr(TRIVERTEX), 2, varptr(GRADIENT_RECT), 1, $1

		RECT = 0, 0, DIS.9, DIS.10

;		アイテムの状態 ODS_FOCUS
		if DIS.4 & $10 {
			InflateRect varptr(RECT), -2, -2
			DrawFocusRect DIS.6, varptr(RECT)
		}

;		テキストカラー
		SetTextColor DIS.6, $555555
		SetBkMode DIS.6, 1

;		テキスト取得 (WM_GETTEXT)
		sendmsg DIS.5, $D, 64, varptr(pszText)

;		テキスト描画
		DrawText DIS.6, pszText, -1, varptr(RECT), $20 | $4 | $1

		return 1
	}

	return

*jump

^

<< HSP Tips 9 || HSP Tips 11 >>

Copyright © 2005-2012 . All rights reserved.