【HSP3】Unicodeいろいろ

Unicodeいろいろ

Unicodeいろいろ

  • タグ:
  • タグはありません
#include "user32.as"
#include "gdi32.as"
#define DT_WORDBREAK		0x00000010
#define DT_EDITCONTROL		0x00002000
// http://hsp.tv/play/pforum.php?mode=pastwch&num=41339
#define WS_CHILD		$40000000
#define WS_VISIBLE		$10000000
#define WS_BORDER		$800000
#define WS_TABSTOP		$10000
#define ES_AUTOHSCROLL	$80
#define STYLE			WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL
#define UNKNOWN			$200 ; HSPのインプットボックスに設定されていたEXスタイルの値
#define  WM_SETFONT    0x0030

// オブジェクト生成

	// フォントをメイリオにしておく
	font "メイリオ", 18, 16 : objmode 2, 1
	pos 0, 0
	
	// inputを使うと不具合があるので、winobjをつかう
	;sdim dummy
	;input dummy, 640, 34 : objid_input = stat : hobj_input = objinfo(objid_input, 2)
	objsize 640, 34
	winobj "Edit", "", UNKNOWN, STYLE : objid_input = stat : hobj_input = objinfo(objid_input, 2)
	
	// winobjで作成したオブジェクトのフォントを指定する(後で開放が必要)
	mref BMSCR, 67
	CreateFontIndirect varptr(BMSCR(49))
	hFont = stat
	sendmsg hobj_input, WM_SETFONT, hFont, 1
	
	// 残りを描画
	objsize 320, 34
	button gosub "文字列をセット(その1)", *s1
	button gosub "文字列をセット(その2)", *s2
	button gosub "文字列の取得(その1)", *s3
	button gosub "文字列の取得(その2)", *s4
	
	onexit gosub *exit

stop

*s1
	// 文字をinputにセットする(objprmとかは使用しない)
	string.0 = 0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5
	string.6 = 0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5
	string.12 = 0
	// 反映
	SetWindowTextW hobj_input, varptr(string)
return

*s2
	// 文字をinputにセットする(objprmとかは使用しない)
	sdim s
	cnvstow s, "文字列を代入したよ♪"
	// 反映
	SetWindowTextW hobj_input, varptr(s)
return

*s3
	// 文字列を取得して描画してみる
	sdim uni_word, 1024*2 + 2
	GetWindowTextW hobj_input, varptr(uni_word), 1024
	
	// 真っ白に
	color 255,255,255 : boxf : color
	
	// 表示
	rect = 0, 200, 640, 480
	DrawTextW hdc, varptr(uni_word), -1, varptr(rect), DT_WORDBREAK | DT_EDITCONTROL
	redraw
return

*s4
	// 0xXXXX の形式で取得する
	sdim uni_word, 1024*2 + 2
	GetWindowTextW hobj_input, varptr(uni_word), 1024
	num = stat
	if num == 0 : dialog "失敗したとか?何も代入されていないとか?" : return
	
	// 0xXXXX に変換する
	sdim sf
	repeat num
		sf += strf("0x%04X ", wpeek(uni_word, cnt*2))
	loop
	sf += "\n↑Unicode(UTF-16)"
	
	// 真っ白に
	color 255,255,255 : boxf : color
	
	// 表示
	rect = 0, 200, 640, 480
	DrawTextA hdc, varptr(sf), -1, varptr(rect), DT_WORDBREAK | DT_EDITCONTROL
	redraw
	
return

*exit
	// 終了時に削除
	DeleteObject hFont
	end
return