CREATEFORMクリエイトフォーム関数

本ページには広告が含まれています。

名前
性別 男性 女性
出身地
ENDTEXTBLOCK

非表示フォームの操作

オプション指定でFOM_FORMHIDEを指定した場合、CTRLWIN関数で表示させるか、ACW関数でx,y座標、もしくは幅・高さのどちらか一方もしくは両方を指定すると表示されます。

UWSC
DIM IE = CREATEFORM("form.html", "", TRUE, FOM_FORMHIDE)

DIM ID = GETID(, "TFormHtm")
CTRLWIN(ID, SHOW)
UWSC
DIM IE = CREATEFORM("form.html", "", TRUE, FOM_FORMHIDE)

DIM ID = GETID(, "TFormHtm")

// 以下のいずれかを実行で表示
ACW(ID, x, y)
ACW(ID,,, 幅, 高さ)
ACW(ID, x, y, 幅, 高さ)

文字化け

文字化けする場合はheadタグ内にmetaタグを追加し、charset属性に文字コードを指定します。

文字コードはテキストファイルと同じ文字コードを指定します。HTMLファイルの文字コードはメモ帳で開いたときのステータスバー右下で確認することできます。

HTML
<head>
	<meta charset="文字コード">
</head>

指定できる文字コードはおもに以下のとおりです。

  • UTF-8
  • SHIFT_JIS
  • EUC-JP

UTF-8を指定する場合は以下のように記述します。

HTML
<head>
	<meta charset="UTF-8">
</head>

以下はHTMLファイルの文字コードをANSI(Shift_JIS)で設定しているが、ブラウザはmetaタグのUTF-8で解釈するので文字化けが発生します。

文字コード ブラウザ 文字化け

このように文字化けが発生する場合は、以下のようにHTMLファイルとmetaタグの文字コードを揃えると文字化けを解消することができます。

文字コード揃える ブラウザ

ウィンドウの操作

指定できる幅・高さはウィンドウサイズではなくクライアント領域のサイズで、初期値は(幅,高さ)=(640,480)です。

X,Y座標を省略した場合、画面中央に表示されます。

CREATEFORM関数で幅・高さ、x座標・y座標の指定がうまく行かない場合は、フォームを生成してからACW関数で位置やサイズを指定することもできます。

UWSC
DIM ID = GETID(, "TFormHtm")
ACW(ID, x, y, 幅, 高さ)

ウィンドウ全体の幅・高さを指定

以下はウィンドウの幅を640、高さを480に設定する例です。

UWSC
DIM IE = CREATEFORM("form.html", "タイトル", TRUE)

CONST width = 640
CONST height = 480

DIM ID = GETID(, "TFormHtm")

ACW(ID, 0, 0, width, height)

WHILE IE.Visible
	SLEEP(0.001)
WEND

ウィンドウのクライアント領域の幅・高さを指定

以下はウィンドウのクライアント領域の幅を640、高さを480に設定する例です。

UWSC
DIM IE = CREATEFORM("form.html", "タイトル", TRUE)

CONST w = 640
CONST h = 480

DIM ID = GETID(, "TFormHtm")
DIM width = STATUS(ID, ST_WIDTH) - STATUS(ID, ST_CLWIDTH)
DIM height = STATUS(ID, ST_HEIGHT) - STATUS(ID, ST_CLHEIGHT)
width = width + w
height = height + h

ACW(ID, 0, 0, width, height)

WHILE IE.Visible
	SLEEP(0.001)
WEND

ウィンドウサイズの指定を自動化

X,Y座標、幅・高さを省略した場合デフォルトでは画面中央に(640, 480)のサイズで表示されますが、以下のプログラムではまず指定したpathのHTMLファイルを非表示で読み込みbodyタグのサイズ・余白を取得してその値からウィンドウのサイズを計算・設定します。この処理を行うことでフォームのウィンドウを最適なサイズで表示することができます。ACW関数を実行した時点でフォームが表示されます。

UWSC
DIM path = "form.html"				// フォームのHTMLファイル名
DIM formTitle = "タイトル"			// フォームのタイトル

IE = CREATEFORM(path, formTitle, TRUE, FOM_FORMHIDE)		// 位置・サイズ調整のため非表示でフォームを起動

WITH IE.Document.body
	DIM w = .offsetWidth			// bodyタグの幅
	DIM h = .offsetHeight			// bodyタグの高さ
	WITH .currentStyle
		DIM marginVertical = VAL(REPLACE(.marginTop, "px", "")) + VAL(REPLACE(.marginBottom, "px", ""))			// マージンの上下の合計値
		DIM marginHorizontal = VAL(REPLACE(.marginLeft, "px", "")) + VAL(REPLACE(.marginRight, "px", ""))		// マージンの左右の合計値
	ENDWITH
ENDWITH

DIM ID = GETID(formTitle, "TFormHtm")		// フォームのIDを取得
DIM width = w + marginHorizontal + STATUS(ID, ST_WIDTH) - STATUS(ID, ST_CLWIDTH)			// クライアント領域からウィンドウ幅を計算
DIM height = h + marginVertical + STATUS(ID, ST_HEIGHT) - STATUS(ID, ST_CLHEIGHT)		// クライアント領域からウィンドウ高さを計算
DIM x = (G_SCREEN_W - width) / 2			// 画面幅から画面中央に表示するためのx座標を求める
DIM y = (G_SCREEN_H - height) / 2			// 画面高さから画面中央に表示するためのy座標を求める

ACW(ID, x, y, width, height)				// フォームを計算した位置・幅・高さで表示

WHILE IE.Visible
	SLEEP(0.001)
WEND

ウィンドウを最適なサイズ(最小サイズ)で取得するためbodyタグにdisplay: inline-block;は必ず指定してください。marginを指定する場合はピクセル単位で指定します。em、rem、%、vwなど他の単位には対応していません。

HTML
<html>
	<head>
		<style>
		<!--
			body{display:inline-block;margin: 5px 10px;}
		-->
		</style>
	</head>
	<body>
	</body>
</html>

頻繁に使うのであれば以下のように関数化しても良いかもしれません。

CREATEFORM関数の第一引数、第二引数、第四引数のみを指定するだけで使えます。第三引数の並行処理フラグはTRUEを指定しないと非表示にできないので、引数の指定は省略しています。

2行目にあるCREATEFORM関数の第四引数は、フォームを非表示にするFOM_FORMHIDEとoptionsで指定された値の論理和(OR)を取ることでoptionsとFOM_FORMHIDEのオプションを指定することができます。

UWSC
FUNCTION CreateFormEx(path, title, options = FALSE)
	RESULT = CREATEFORM(path, title, TRUE, options OR FOM_FORMHIDE)		// 位置・サイズ調整のため非表示でフォームを起動

	WITH RESULT.Document.body
		DIM w = .offsetWidth			// bodyタグの幅
		DIM h = .offsetHeight			// bodyタグの高さ
		WITH .currentStyle
			DIM marginVertical = VAL(REPLACE(.marginTop, "px", "")) + VAL(REPLACE(.marginBottom, "px", ""))			// マージンの上下の合計値
			DIM marginHorizontal = VAL(REPLACE(.marginLeft, "px", "")) + VAL(REPLACE(.marginRight, "px", ""))		// マージンの左右の合計値
		ENDWITH
	ENDWITH

	DIM ID = GETID(title, "TFormHtm")		// フォームのIDを取得
	DIM width = w + marginHorizontal + STATUS(ID, ST_WIDTH) - STATUS(ID, ST_CLWIDTH)			// クライアント領域からウィンドウ幅を計算
	DIM height = h + marginVertical + STATUS(ID, ST_HEIGHT) - STATUS(ID, ST_CLHEIGHT)		// クライアント領域からウィンドウ高さを計算
	DIM x = (G_SCREEN_W - width) / 2			// 画面幅から画面中央に表示するためのx座標を求める
	DIM y = (G_SCREEN_H - height) / 2			// 画面高さから画面中央に表示するためのy座標を求める

	ACW(ID, x, y, width, height)				// フォームを計算した位置・幅・高さで表示
FEND

プログラム実行例

フォーム(並行処理あり)

並行処理フラグがTRUEなのでフォームのCOMオブジェクト名が返ります。

UWSC
[syntaxHighlight language="HTML"]
名前
性別
男性 女性
年齢
都道府県
[/syntaxHighlight]
使用関数

フォーム(並行処理なし)

並行処理フラグがFALSEなので押されたボタンのname属性が返ります。

UWSC
[syntaxHighlight language="HTML"]
名前
性別
男性 女性
年齢
都道府県
[/syntaxHighlight]
使用関数

関連記事

GETFORMDATA関数 (スクリプト関数)
フォームより値を取得。
SETFORMDATA関数 (スクリプト関数)
フォームに値を設定する。
STOPFORM関数 (スクリプト関数)
UWSCが再生時に出すウィンドウの表示/非表示します。