{-- ■バージョンアップ内容■
○刻々とバージョンアップするメインシステムに別開発のエディタがどうやって対応するか、いろいろ検討したのですが、メインシステムを別ファイルとして保存し、それを読み込むことにしました。メインシステムの取り込み方法が決定したので、「ひまわりプログラムとして保存」や「物語を再生」「現在のシーンを表示」などのコマンドが利用できるようになりました。
○また、メインシステムに搭載された拡張コマンドにも対応しました。「ExCommands.ini」に命令を書き込んで保存すれば、拡張コマンドをプログラム中に簡単に挿入できるようになります。「ExCommands.ini」に書き込んであれば、自分の作った命令であろうがなんだろうが、とにかく挿入できます。
○テンプレートに対応しました。「Template.hmw」が存在すれば、「新しいシーンを追加」したときに初期状態としてその内容が保存されます!いつも同じ文章をコピーしてはり付けしたりという作業が減り、物語の作成に集中できます。
○上記の二つのファイル「ExCommands.ini」と「Template.hmw」はストーリーボードエディタと同じ場所に保存してください。また、ファイルを作成しなくても、ストーリボードエディタは問題なく動作します。
○独自形式のファイルですが、ヘッダを少し改造して、ひまわりでは実行できないようにしました。「このファイルは実行できません」と表示されて、終了します。これで、誤ってファイルをダブルクリックしても、変な動作にならずに済みます。
■追伸■ 2週間ほどWindows Scripting Hostに浮気してました。もしかしたら、IEの右クリックから、ひまわりスクリプトが実行できるようになるかもしれません。
--}
*InitializeFunction AppName=「ストーリーボード エディタ」;AppVersion=「0.1.5 beta」; Extension1=「ストーリボード(*.hmw)|*.hmw|テキスト文書(*.txt)|*.txt|全てのファイル(*.*)|*.*」; Extension2=「ひまわりスクリプト(*.hmw)|*.hmw|テキスト文書(*.txt)|*.txt|全てのファイル(*.*)|*.*」; INIFile=「openprod.ini」;TemplateFile=「template.hmw」;ExCommandFile=「ExCommands.ini」; HEADER=『{!StoryBoard}言(「このファイルは実行できません。」);終;』; CRLF=「\n」;null=「」; レジストリ開く(HKEY_CURRENT_USER,『Control Panel\Colors』); レジストリ読む(『ButtonFace』);『 』で,区切る;ButtonFace=RGB(それ#0,それ#1,それ#2); レジストリ閉じる;
*CreateApplicationMenu メニュー作成(FileMenu);その,テキスト=「ファイル(&F)」; メニュー追加(FileMenu,m_CreateNewStoryBoard); その,テキスト=「ストーリボードの新規作成(&N)」; その,イベント=CreateNewStoryBoard; メニュー追加(FileMenu,m_FileMenuHR01);その,テキスト=「-」; メニュー追加(FileMenu,m_OpenStoryBoard); その,テキスト=「ストーリボードを開く(&O)...」; その,ショートカットキー=「Ctrl+O」; その,イベント=OpenStoryBoard; メニュー追加(FileMenu,m_SaveStoryBoard); その,テキスト=「ストーリーボードの上書き保存(&S)」; その,ショートカットキー=「Ctrl+S」; その,イベント=SaveStoryBoard; メニュー追加(FileMenu,m_SaveStoryBoardAs); その,テキスト=「ストーリボードに名前をつけて保存(&A)...」; その,イベント=SaveStoryBoardAs; メニュー追加(FileMenu,m_FileMenuHR02);その,テキスト=「-」; メニュー追加(FileMenu,m_SelectCoreScript); その,テキスト=「物語プログラムのコアを選択(&L)...」; その,イベント=SelectCoreScript; メニュー追加(FileMenu,m_ExportHIMAWARIScriptAs); その,テキスト=「ひまわりスクリプトとして保存(&E)...」; その,イベント=ExportHIMAWARIScriptAs; メニュー追加(FileMenu,m_FileMenuHR03);その,テキスト=「-」; メニュー追加(FileMenu,m_ExitApplication); その,テキスト=「{AppName} の終了(&X)\tAlt+F4」; その,イベント=ExitApplication;
メニュー作成(EditMenu); その,テキスト=「編集(&E)」; メニュー追加(EditMenu,m_Undo); その,テキスト=「元に戻す(&U)\tCtrl+Z」; その,イベント=Undo; メニュー追加(EditMenu,m_EditMenuHR01);その,テキスト=「-」; メニュー追加(EditMenu,m_Cut); その,テキスト=「切り取り(&X)\tCtrl+X」; その,イベント=Cut; メニュー追加(EditMenu,m_Copy); その,テキスト=「コピー(&C)\tCtrl+C」; その,イベント=Copy; メニュー追加(EditMenu,m_Paste); その,テキスト=「貼り付け(&P)\tCtrl+V」; その,イベント=Paste;
メニュー作成(StoryBoardMenu); その,テキスト=「ストーリーボード(&S)」; メニュー追加(StoryBoardMenu,m_AddNewScene); その,テキスト=「新しいシーンの追加(&C)...」; その,ショートカットキー=「Ctrl+N」; その,イベント=AddNewScene; メニュー追加(StoryBoardMenu,m_RenameCurrentScene); その,テキスト=「シーン名の変更(&R)...」; その,イベント=RenameCurrentScene; メニュー追加(StoryBoardMenu,m_ExchangeScenes); その,テキスト=「シーン順序の交換(&E)...」; その,イベント=ExchangeScenes; その,有効=オフ; メニュー追加(StoryBoardMenu,m_DeleteCurrentScene); その,テキスト=「現在のシーンを削除(&D)」; その,ショートカットキー=「Ctrl+Delete」; その,イベント=DeleteCurrentScene; その,有効=オフ; メニュー追加(StoryBoardMenu,m_StoryBoardMenuHR01);その,テキスト=「-」; メニュー追加(StoryBoardMenu,m_PreviewScene); その,テキスト=「現在のシーンを表示(&V)」; その,イベント=PreviewCurrentScene; メニュー追加(StoryBoardMenu,m_StoryBoardMenuHR02);その,テキスト=「-」; メニュー追加(StoryBoardMenu,m_PlayStory); その,テキスト=「物語の再生(&P)」; その,ショートカットキー=「Ctrl+P」; その,イベント=PlayStory;
メニュー作成(ToolMenu); その,テキスト=「ツール(&T)」; メニュー追加(ToolMenu,m_ListupCharacters); その,テキスト=「登場人物の一覧表示(&L)」; その,ショートカットキー=「Ctrl+L」; その,イベント=ListupCharacters; その,有効=オフ; メニュー追加(ToolMenu,m_InsertExExCommand); その,テキスト=「拡張命令の挿入(&X)...」; その,ショートカットキー=「Ctrl+R」; その,イベント=InsertExExCommand; メニュー追加(ToolMenu,m_InsertHIMAWARIExCommand); その,テキスト=「ひまわり命令の挿入(&I)...」; その,ショートカットキー=「Ctrl+I」; その,イベント=InsertHIMAWARIExCommand その,有効=オフ; メニュー追加(ToolMenu,m_ToolMenuHR01);その,テキスト=「-」; メニュー追加(ToolMenu,m_ImpordWizard); その,テキスト=「テキスト文書のインポート(&T)...」; その,イベント=ImportWizard; その,有効=オフ;
メニュー作成(ViewMenu); その,テキスト=「表示(&V)」; メニュー追加(ViewMenu,m_ChangeWindowFont); その,テキスト=「表示フォントの変更(&F)...」; その,イベント=ChangeWindowFont。
メニュー作成(HelpMenu); その,テキスト=「ヘルプ(&H)」; メニュー追加(HelpMenu,m_ShowVersionInformation); その,テキスト=「{AppName} について(&A)...」; その,イベント=ShowVersionInformation;
*SetWindowStyle 母艦の,タイトル=「{AppName}」; 母艦の,背景色=ButtonFace; INIFileが,存在するか;' 基本環境設定ファイルの読み込み もし,(それ=はい)なら( INIBufferに,INIFileを,読む; INIBufferを,『=』で、区切る; 母艦の,X=それ#2;母艦の,Y=それ#4;母艦の,幅=それ#6;母艦の,高さ=それ#8; 文字書体=それ#10;文字サイズ=それ#12;CoreScript=それ#14;) でなければ( 文字書体=『MS UI Gothic』;文字修飾=null;文字サイズ=9;CoreScript=null; 「物語作成プログラムのシステム(コア)を選択してください。」と,言う; SelectCoreScript;) TemplateFileが,存在するか;' 初期テンプレートの読み込み もし,(それ=はい)なら( 読む(Template,TemplateFile);) でなければ( Template=『お話=「」』;) ExCommandFileが,存在するか;' 拡張コマンド一覧の読み込み もし,(それ=はい)なら( 読む(ExCommandList,ExCommandFile);) でなければ( m_InsertExExCommandの,有効=オフ;) ExitApplicationに,終了処理設定;
作成(SceneListLabel,ラベル); その,テキスト=「シーン一覧:」; その,フォント書体=「{文字書体}|太字」; 作成(SceneList,リスト); その,クリックした時=SelectScene; 作成(SceneEditorLabel,ラベル); その,テキスト=「シーンの内容:」; その,フォント書体=「{文字書体}|太字」; 作成(SceneEditor,メモ); その,スクロールバー=縦; その,変更した時=SaveSceneBuffer; 母艦の,変更した時=ResizeObjects;
File=null; SceneListBuffer=null; 母艦浮上; 待機;
' Window Message Hack ========================================================== *ResizeObjects 母艦の,変更した時=DoNothing; SceneListLabelの,サイズ=(0,0,100,文字サイズ*4/3+2); SceneListの,サイズ=(0,文字サイズ*4/3+2,(母艦の,幅)*0.30,(母艦の,高さ)); SceneEditorLabelの,サイズ=((母艦の,幅)*0.30+5,0,(母艦の,幅)*0.30+100,文字サイズ*4/3+2); SceneEditorの,サイズ=((母艦の,幅)*0.30+5,文字サイズ*4/3+2,(母艦の,幅),(母艦の,高さ)); 母艦の,変更した時=ResizeObjects; 画面クリア(ButtonFace); 戻る;
*SelectScene SceneNo=イベントオブジェクトの,値; SceneEditorの,変更した時=DoNothing; ひまわりする(「SceneEditorの,テキスト=SceneBuffer_{SceneNo};」); SceneEditorの,変更した時=SaveSceneBuffer; 戻る;
*SaveSceneBuffer ひまわりする(「SceneBuffer_{SceneNo}=SceneEditorの,テキスト;」); もし,(File=null)なら,( 母艦の,タイトル=「新規ストーリボード* - {AppName}」;) でなければ,( 母艦の,タイトル=「{File}* - {AppName}」;) EditFlag=オン; 戻る;
*DoNothing ' This is Dummy Process 戻る;
' Sub Routines ================================================================= *OpenStoryBoard 読み込みファイル選択(Extension1); もし,(それ=「」)なら,戻る;でなければ,File=それ; 読む(FileBuffer,File); もし,(FileBuffer#0<>HEADER)なら,FileFormatErrorへ,飛ぶ;' 特定のヘッダを持たなければエラー SceneListBuffer=null;SceneNo=-1; iを,1から,(要素数(FileBuffer)-1)まで,繰り返す( もし,(LEFT(FileBuffer#i,1)=『*』)なら( SceneListBuffer=SceneListBuffer&FileBuffer#i&CRLF; SceneNo=SceneNo+1; ひまわりする(「SceneBuffer_{SceneNo}=null;」);) でなければ( ひまわりする(「SceneBuffer_{SceneNo}=SceneBuffer_{SceneNo}&FileBuffer#i&CRLF;」);)) SceneNo=0; SceneListの,アイテム=SceneListBuffer; SceneListの,値=0; SceneEditorの,テキスト=SceneBuffer_0; 母艦の,タイトル=「{File} - {AppName}」; EditFlag=オフ; 戻る;
*FileFormatError 「このファイルは、{AppName} 用のファイルではありません。」と,言う; 戻る;
*SaveStoryBoard もし,(File=null)なら,SaveStoryBoardAsへ,飛ぶ;' 名前がついていなければファイル名選択 FileBuffer=HEADER; iを,0から,(要素数(SceneList)-1)まで,繰り返す( ひまわりする(「FileBuffer=FileBuffer&CRLF&SceneListBuffer#i&CRLF&SceneBuffer_{i}」;);) 保存(FileBuffer,File); 母艦の,タイトル=「{File} - {AppName}」; EditFlag=オフ; 戻る;
*SaveStoryBoardAs 書き込みファイル選択(Extension1); もし,(それ=null)なら,戻る;でなければ,File=それ; SaveStoryBoardへ,飛ぶ;' 名前を付ければ後は上書き保存と同じ
*SelectCoreScript 読み込みファイル選択(Extension2); もし,(それ=null)でなければ,CoreScript=それ; もし,(CoreScript=null)なら,SelectCoreScriptへ,飛ぶ;' 必ず選択させる 戻る;
*ExportHIMAWARIScriptAs もし,(EditFlag=オン)なら,SaveStoryBoard;' 編集されていれば保存 もし,(CoreScript=null)なら,SelectCoreScript;' コアが選択されていなければ選択 開く(FileBuffer,CoreScript); iを,0から,(要素数(SceneList)-1)まで,繰り返す( ひまわりする(「FileBuffer=FileBuffer&CRLF&SceneListBuffer#i&CRLF&SceneBuffer_{i}」;);) 書き込みファイル選択(Extension2);もし,(それ=null)なら,戻る; 保存(FileBuffer,それ); 戻る;
*ExitApplication INIBuffer=「[{AppName}] WindowPostionX={母艦の,X}\nWindowPositionY={母艦の,Y} WindowWidth={母艦の,幅}\nWindowHeight={母艦の,高さ} Font={文字書体}\nFontSize={文字サイズ} CoreScript={CoreScript}」; INIBufferを,INIFileへ,保存; 終わる;
*Undo 注目(SceneEditor);キー送信(AppName,『^z』) 戻る;
*Cut 注目(SceneEditor);キー送信(AppName,『^x』) 戻る;
*Copy 注目(SceneEditor);キー送信(AppName,『^c』) 戻る;
*Paste 注目(SceneEditor);キー送信(AppName,『^v』) 戻る;
*AddNewScene 「シーンの名前を指定してください。」と,尋ねる; もし,(それ=null)なら,戻る; もし,(LEFT(それ,1)<>『*』)なら,それ=『*』&それ; SceneNo=(要素数(SceneListBuffer)); SceneListBuffer#SceneNo=それ; SceneListの,アイテム=SceneListBuffer; ひまわりする(「SceneBuffer_{SceneNo}=Template;」); ひまわりする(「SceneEditorの,テキスト=SceneBuffer_{SceneNo};」); 戻る;
*RenameCurrentScene 「シーンの名前を指定してください。」と,尋ねる; もし,(それ=null)なら,戻る; もし,(LEFT(それ,1)<>『*』)なら,それ=『*』&それ; SceneListBuffer#SceneNo=それ; SceneListの,アイテム=SceneListBuffer; 戻る;
*PreviewCurrentScene もし,(CoreScript=null)なら,SelectCoreScript;' コアが選択されていなければ選択 開く(FileBuffer,CoreScript); ひまわりする(「FileBuffer=FileBuffer&CRLF&SceneListBuffer#SceneNo&CRLF&SceneBuffer_{SceneNo}」;); 保存(FileBuffer,「storyboard.bak」);『himawari.exe storyboard.bak』を,起動; 戻る;
*PlayStory もし,(CoreScript=null)なら,SelectCoreScript;' コアが選択されていなければ選択 開く(FileBuffer,CoreScript); iを,0から,(要素数(SceneList)-1)まで,繰り返す( ひまわりする(「FileBuffer=FileBuffer&CRLF&SceneListBuffer#i&CRLF&SceneBuffer_{i}」;);) 保存(FileBuffer,「storyboard.bak」);『himawari.exe storyboard.bak』を,起動; 戻る;
*InsertExExCommand リストから選択(「挿入する命令を選択してください。」,ExCommandList); もし,(それ=null)なら,戻る;でなければ,( SceneEditorの,変更した時=DoNothing; SceneEditorの,選択文字列=それ; SceneEditorの,変更した時=SaveSceneBuffer;) 戻る;
*ChangeWindowFont フォント選択;もし,(それ=null)なら,戻る;でなければ,FontFace=それ; 判別して切り取る(FontFace,『|』,『|』);文字書体=それ; 判別して切り取る(FontFace,『|』,『|』);文字修飾=それ; 判別して切り取る(FontFace,『|』,『|』);文字サイズ=それ; SceneListLabelの,フォント書体=「{文字書体}|太字|{文字サイズ}」; SceneListの,フォント書体=「{文字書体}|{文字サイズ}」; SceneEditorLabelの,フォント書体=「{文字書体}|太字|{文字サイズ}」; SceneEditorの,フォント書体=「{文字書体}|{文字サイズ}」; 戻る。
*ShowVersionInformation 「{AppName} Version {AppVersion}\nCopyright(C) by open.doc\n Powered by 物語作成プロジェクト」と,言う; 戻る;
|