石葉2HTAは、メモ帳などテキストエディタを使ってHTMLファイル作成を編集したり作成したりすることができます。
石葉2HTAの作法を、拙作onClick="kifuSave()"kib.htaを例にして記載します。
テキストを扱うソフトは正規表現を使えるソフトを使うとデータ検索や置換に便利です。
正規表現を使えるフリーウエアのWindowsアプリケーションには下記のようなものがあります。
- K2Editor (グローバル検索とタグジャンプ対応)
- TepaEditor (テキスト→画像変換機能)
<html> | HTMLファイルのお約束。省略できません。 |
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> |
文字コードをシフトJISコードに指定 |
<title> 石葉2 - StoneLeaf2 (Html-Application)</title> | タイトルです。 |
<HTA:APPLICATION | HTA属性設定の開始宣言です。 |
APPLICATIONNAME = "Leaf2-HTA" | アプリケーション名です。 |
BORDER = "thick" | 外枠の種類でthick(規定値)・dialog・none・thinの値があります。 |
BORDERSTYLE = "normal" | 内枠の種類でnormal(規定値)・complex・raised・static・sukenの値があります。 |
CAPTION = "yes" | タイトルバー表示の有無。yes:表示(規定値)、no:非表示 |
CONTEXTMENU = "yes" | 右クリックメニュー表示の有無。yes:表示(規定値)、no:非表示 |
ICON = "MyLeaf/leaf2.ico" | 32x32サイズのアイコンファイル(*.ico)のパス名を指定します。 |
ID = "leaf2-hta" | スクリプトでHTAオブジェクトにアクセスする際の識別用IDです。 |
INNERBORDER = "yes" | 内枠の表示方法。yes:3D表示(規定値)、no:平板表示 |
MAXIMIZEBUTTON = "yes" | 最大化ボタン表示の有無。yes:表示(規定値)、no:非表示 |
MINIMIZEBUTTON = "yes" | 最小化ボタン表示の有無。yes:表示(規定値)、no:非表示 | NAVIGABLE = "no" | yes:リンクされているドキュメントをメインウインドウに読み込む no:リンクされているドキュメントを新しいウインドウに読み込む(規定値) |
SCROLL = "yes" | スクロールバー表示の有無。yes:表示(規定値)、no:非表示 |
SCROLLFLAT = "no" | スクロールバー表示方法。yes:平板表示、no:3D表示(規定値) |
SELECTION = "yes" | ウインドウの内容をマウスやキーボードで選択状態にできるかの設定 yes:選択できる(規定値)、no:選択できない |
SHOWINTASKBAR = "yes" | タスクバーにアプリケーション名の表示の有無。yes:表示(規定値)、no:非表示 |
SINGLEINSTANCE = "no" | 複数起動の認否。yes:複数起動ができない、no:複数起動ができる(規定値) |
SYSMENU = "yes" | システムメニュー表示の有無:yes:表示(規定値)、no:非表示 |
VERSION = "1.5" | アプリケーションのバージョン番号 |
WINDOWSTATE = "normal" | 起動時の状態:nomal:標準ウインドウ(規定値)、maximize:最大化ウインドウ、minimize:最小化ウインドウ |
/> | HTA属性設定終了宣言 |
<script src="MyLeaf/htaLeaf2.js"> </script> | 石葉2HTAを実行に必要なスクリプトファイルのフルパス名。省略できません。 |
<script type="text/javascript"> <!-- |
JavaScript開始宣言 |
var htaWidth = 450; // ウインドウ広さ var htaHeight = 720; // ウインドウ高さ window.resizeTo(htaWidth, htaHeight); // ウインドウサイズ設定 window.moveTo((screen.width - htaWidth) / 2, (screen.height - htaHeight) / 2); // 画面中央に配置 | ウインドウサイズと表示位置の設定 |
//------------------------------------------------ function Ig1Save() // IG1ファイル保存 { var Shell = new ActiveXObject("Shell.Application"); var dia = Shell.BrowseForFolder(0, "出力フォルダの指定", 1); if(dia) // フォルダ選択OK { var path = LeafShow.GetKifuName().replace(/\.\w+/, ".ig1"); path = dia.Items().Item().Path + "\\" + path; saveFile(path, sgf2ig1(LeafShow.GetKifuStr("SGF_CURRENT"))); window.scroll(0, 0); LeafShow.setText("[" + path + "] を保存しました。"); // メッセージ表示 } } function sgf2ig1(str) // SGF -> IG1 変換 { var info = "#COMMENT\r\n"; if(dat(str, "DT")) { info += DAT; } if(dat(str, "PB")) { info += "黒番 " + DAT; } if(dat(str, "PW")) { info += "白番 " + DAT; } if(dat(str, "RE")) { info += DAT; } if(dat(str, "GN")) { info += "対局名 " + DAT; } if(dat(str, "BR")) { info += "黒番ランク " + DAT; } if(dat(str, "WR")) { info += "白番ランク " + DAT; } if(dat(str, "KM")) { info += "コミ " + DAT; } if(dat(str, "PC")) { info += "対局場所 " + DAT; } if(dat(str, "EV")) { info += "大会名 " + DAT; } if(dat(str, "RO")) { info += "ラウンド " + DAT; } if(dat(str, "CP")) { info += "出典 " + DAT; } if(dat(str, "GC")) { info += "ゲームコメント " + DAT; } if(dat(str, "TM")) { info += "持時間 " + DAT; } if(dat(str, "US")) { info += "ユーザー名 " + DAT; } if(dat(str, "RU")) { info += DAT; } info += "INT "; if(dat(str, "SZ")) { info += DAT.replace(/\r\n/, " "); } else { info += "19 "; } if(dat(str, "HA")) { info += DAT; } else { info += "0\r\n"; } info += "MOV\r\n"; var arr = str.split(";"); var mov = ""; for(var g = 2, cnt = 0, limit = arr.length; g < limit; g++) { var s1 = arr[g].charCodeAt(2); if(s1 > 104) { s1++; } var s2 = 1 * arr[g].charCodeAt(3) - 96; if(s2 < 10) { s2 = "0" + s2; } mov += " " + String.fromCharCode(s1 - 32) + s2; if(++cnt == 19) { mov += "\r\n"; cnt = 0; } // 19手で改行 } return info + mov + " -0\r\n"; } function dat(kifu, name) // SGF棋譜情報取得 { var ind = kifu.indexOf(name += "["); if(ind > -1) { var str = kifu.substring(ind + name.length); if((ind = str.indexOf("]"))> -1) { return (DAT = str.substring(0, ind) + "\r\n"); } } return false; } //--------------------------------------------------- |
IG1棋譜データ出力用スクリプト IG1データを出力する必要がなければ不要です。 |
//--> </script> |
JavaScript終了宣言 |
<body bgcolor="#ddfdbd"> | 本文の始まり bgcolor=の後の引用符(")で囲まれた中には背景色のカラーコードを書き込みます。 背景に画像を使う場合は bgcolor= の代わりに
|
<applet codebase = "http://olive.zero.ad.jp/qin/MyLeaf" width = "404" height = "640" archive = "LeafShow2.jar" MAYSCRIPT > <param name="layout" value="./qin/kib.xml"> <param name="leafhint< value="true"> <param name="countpath" value="./StoneCount/StoneCount.html?"> <param name="advancemoves" value="@@"> <param name="number" value="true"> <param name="allshow" value="node"> <param name="endstone" value="blink[1500]"> <param name="textbmoves" value="50"> <param name="textusecolor" value="true"> <param name="leafnumber" value="true"> <param name="outoption" value="___"> </applet> |
石葉2アプレットの設定 MAYSCRIPTは省略できません。 詳細は石葉2掲載HTMLファイルの作法および石葉2のパラメータを参照してください。 |
<input type="file" name="DiaOpen" style="margin-left:-555pt"> | DiaOpenの生成。省略できません。 生成されたDiaOpenが目障りな場合はmargin-left:-555で左端の彼方に追放します。 |
<input type="button" value="棋譜名で保存" onClick="kifuSave()"> | 棋譜保存ボタン。棋譜保存ボタンがアプレットに設けられているレイアウト(例:vga.hta)の場合は必要ありません。 |
<input type="button" value="上書保存" onClick="LeafShow.ExeCmd('LEAF_LOCAL_OVER')"> | 棋譜上書きボタン。棋譜上書きボタンがアプレットに設けられているレイアウトの場合は必要ありません。 | <input type="button" value="棋譜ファイルを開く" onClick="kifuOpen()"> | 棋譜ファイルを開くボタン。棋譜ファイルを開くボタンがアプレットに設けられているレイアウトの場合は必要ありません。 |
<input type="button" value="IG1出力" onClick="Ig1Save()"> | IG1棋譜出力ボタン。IG1棋譜を出力する必要がなければ不要です。 |
</body> | HTMLファイルの本文終了宣言です。 |
</html> | HTMLファイル終わりのお約束。省略できません。 |