UWSCのcreateformの使い方

いつだったか、公式掲示板にcreateformの情報が少ないってコメントがあったので書いてみることにしました

createform関数

先ずはcreateformの解説です

戻値 = CREATEFORM( HTMLファイル, タイトル, [平行処理フラグ, オプション指定, 幅, 高さ, X, Y] )

  • HTMLファイル
    読み取るhtmlファイルですね、相対パスか絶対パスで指定します
  • タイトル
    フォームのウィンドウタイトルです
  • 平行処理フラグ
    フォームが表示されている間にスクリプトを止めるか止めないか
    単純に入力を受け付けるだけならFALSEで十分です
    フォームで複雑な処理を行いたい場合はTRUEにします
  • オプション
    フォームの表示方法なんかを指定するためのものです
    複数指定の場合はorで連結します
    例: FOM_MINIMIZE or FOM_MAXIMIZE
  • 幅, 高さ, X, Y
    フォームのサイズと表示位置です

htmlファイル

続いて読み取るhtmlについて

基本は

  • form要素がある
  • input[type=”submit”] なボタンがある
  • input[type=”text”] など、UWSC側で値を取りたい要素にはname属性をつけとく

ここでは以下のhtmlファイルを使います
sample.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>さんぷる</title>
<body>
<form>
<div>
	<label for="name">おなまえ</label>
	<input type="text" name="name">
</div>
<div>
	<label for="password">パスワード</label>
	<input type="password" name="password">
</div>
<div>
	<input type="submit" name="login" value="ログイン">
	<input type="submit" name="cancel" value="キャンセル">
</div>
</form>
</body>
</html>

※ 例だと charset=UTF-8 になってますが、htmlファイルがShift-JISならShift-JISにしてください

平行処理フラグ=FALSE の場合

f = createform("sample.html", "createform sample")
msg = ""
msg = msg + "おなまえは " + getformdata("name") + "<#CR>"
msg = msg + "パスワードは " + getformdata("password") + "<#CR>"
msg = msg + "押されたボタン " + f

msgbox(msg)

フォームが閉じられるまで、createformの行から先が実行されません
フォームが閉じられたときに最後に押されたボタンのname属性が戻り値になります
例ではログインを押すと「login」、キャンセルを押すと「cancel」ですね
×ボタンで閉じた場合は「CLOSE」が返ります
入力値はgetformdataで取得出来ます

平行処理フラグ=TRUE の場合

フォームが閉じられるのを待つことなく、createformより後の行の処理を続行します
この場合、フォームのCOMオブジェクトが返ってきます
これはIE操作でいう変数IEとよく似たオブジェクトで、ほぼ同じメソッドやプロパティが使えます

f = createform("sample.html", "createform sample", TRUE)

while f.visible
    sleep(0.1)
wend

select TRUE
    case getformdata("login")
        msgbox(getformdata("name") + "でログインしました")
    case getformdata("cancel")
        msgbox("キャンセルしました")
    default
        msgbox("×ボタンで閉じられました")
selend

フォームが閉じられるのを待たないので、何もしないとそのままスクリプトが終了してしまいます
なので通常は、フォームが閉じられるまで待つ処理を記述します
例のようにvisibleプロパティがTRUEの間はループするようにするのが簡単です

押されたボタンの判定方法も変わります
ボタンがsubmitであるなら、getformdataで判別が可能です
例ではselectを使って判定しています

このように平行処理フラグ=TRUEの場合は手間が増えてしまうので、上記の例のような使い方ですとメリットがありません
それでもなおこのような使い方があるのは、以下の様なメリットがあるからです

フォームに対して動的に値を設定できる

このような入力フォームの場合は前回の入力値をiniファイルなどに保存しておいて、次回以降に初期値として入力したいということもままあります

f = createform("sample.html", "createform sample", TRUE)

// 初期値を設定する
setformdata("stuncloud", "name")

while f.visible
    sleep(0.1)
wend

select TRUE
    case getformdata("login")
        msgbox(getformdata("name") + "でログインしました")
    case getformdata("cancel")
        msgbox("キャンセルしました")
    default
        msgbox("×ボタンで閉じられました")
selend

このように、ループに入る前にsetformdataを使うことで値を設定出来ます

documentオブジェクトにアクセス出来る

フォームオブジェクト.document でdocumentオブジェクトが取得出来ます
IE.document と同じように自由にDOM操作が行えます

oleeventが使える

個人的にはこれが最大のメリットですね
これのおかげで、ちょっとしたアプリケーションが作れてしまいます (実際作りました)

f = createform("sample.html", "createform sample", TRUE)

// イベントハンドラを設定する
name = f.document.getElementsByName("name").item[0]
oleevent(name, "HTMLInputTextElementEvents2", "onkeypress", "keyEventHandler")

while f.visible
    sleep(0.1)
wend

select TRUE
    case getformdata("login")
        msgbox(getformdata("name") + "でログインしました")
    case getformdata("cancel")
        msgbox("キャンセルしました")
    default
        msgbox("×ボタンで閉じられました")
selend

procedure keyEventHandler()
    event = EVENT_PRM[0]
    select TRUE
        case pos(chr(event.KeyCode), "abcdefghijklmnopqrstuvwxyz-_") > 0
            // アルファベットと一部の記号を許可
        case event.KeyCode = VK_RETURN
            // Enterキーは許可
        default
            msgbox(chr(event.KeyCode) + " は入力できません")
            event.srcElement.focus()
            event.returnValue = FALSE
    selend
fend

イベント発生のタイミングでフォームとスクリプト間でデータのやり取りをするような場合にoleeventが大活躍します
今回は例なので非常に単純な処理にしましたが、このようにフォーム内だけで完結出来るものはhtml中にJavaScriptで記述してしまうほうが楽だったりします


…という感じで、思いついたことをつらつらと書き並べてみました
役に立ちますかね?役に立つといいな?
フォームの中身は実のところIE7相当のブラウザなので、元になるhtmlファイルでcssやJavaScriptを使って色々工夫することも出来ます
がんばってかっこいいフォームを作って下さい!

あと、これほんとにただのブラウザなので<a>タグには気を付けてね、リンク先のページ開いちゃうから!

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中