SSP専用
ファイル選択ダイアログの使い方†
SSP専用の \![open,dialog,open,~] と \![open,dialog,save,~] と \![open,dialog,folder,~] の使用例です。パラメータ補足
- このさくらスクリプトを使うと、あたかもエディタツールのようにファイル選択ダイアログが開きます。
- 実際にファイルを選択し読み込み又は保存を実行すると、専用のSHIORI Event(イベント名変更可)が発生します。そのリファレンスで選択したファイルのフルパスを得る事ができるので、選択したファイルをあれこれ弄ることができるというわけ。
- 用途例
- 音楽再生機能を有するゴーストで、再生可能ファイル(フォルダ)の読み込み
- テキスト等に代表されるエディタ機能を有するゴーストで、ファイルのセーブ&ロード
- モジュール的なものをユーザが自由に読み込んで動作する機能を有するゴースト
実行可能な栞†
- ファイルの編集が可能なSHIORI ... YAYA、華和梨は問題なく使用できます。
- ファイルの編集が不可能なSHIORI ... 里々は編集をサポートするSAORIを使う必要があります。
読み込み例†
\![open,dialog,open,--title=文書読込,--filter=テキスト(*.txt)|*.txt,--id=OnTextLoad]
- オプションパラメータで分かり難いのはfilterでしょうか。実はこれ、C言語やその他のルールに準じているらしく、けっこう詳細に設定ができるようになっています。
- 仮に、音楽再生機能を有するゴーストで、『読み込み可能ファイル全て表示』『mp3ファイルのみ表示』といったダイアログのプルダウンメニューを作るにはfilter設定を
--filter=読み込み可能ファイル|*.mp3;*.mid;*.wma;*.wav;*.ogg;*.au|mp3のみ(*.mp3)|*.mp3
書き込み例†
\![open,dialog,save,--title=文書保存,--ext=txt,--filter=テキスト(*.txt)|*.txt,--id=OnTextSave]
- 基本的にはopen時と変わりませんが、注意しておきたいのは『--ext=』オプションです。これは保存時の拡張子を強制的に設定するパラメータで、よほど理由がない限りは必ず指定しておかなければなりません。しっかり指定しておけば保存時に拡張子の付与を適切に行ってくれるほか、上書き確認による安全性も増します。
華和梨によるファイル操作の方策†
- 華和梨はファイル操作を行えますが、セキュリティ上の観点から『相対パス』しか扱えないという制限があります。ファイル選択ダイアログで得られるリファレンスの内容、つまりゲットしたいファイルのパスは『絶対パス』ですから、華和梨には使えません。
- ではどうするかというと、この絶対パスを相対パスへと変換してやればいいのです。言うは易し。以下執筆者の解を例示しますが、システム次第では動作しない可能性も十分有り得ます。
テキスト保存ダイアログを開く : (
\0
\![open,dialog,save,--title=文書保存,--ext=txt,--filter=テキスト(*.txt)|*.txt,--id=OnTextSave]
\e
)
OnTextSave : (
$(setstr select.path $(cncpath ${System.Request.Reference2} ))
\![get,property,OnTextSave_PropetyGetPath,currentghost.path]
)
OnTextSave_PropetyGetPath : $(
setstr currentghost.path $(cncpath ${System.Request.Reference0});
split @b ${currentghost.path} "\\";
shiftcode @b;
silent;
setstr clip.path $(
loop $[ $(size @b) + 3 ] "..\\")${select.path};
);
entry テキスト保存実行;
)
テキスト保存実行 : $(textsave ${clip.path} 保存内容を記述したエントリ名)
- 具体的な動作は以下の通り。
- 選択したファイルのパスを華和梨システム上で使用できるようにする(cncpath)
- SSP専用のプロパティシステムを使い、ゴーストフォルダの絶対パスを得る
- ゴーストフォルダのパスを華和梨システム上で使用できるようにする(cncpath)
- ゴーストフォルダのパスを『\』でsplitして何階層にあるかを割り出す
- 割り出した階層分に応じて『..\』、つまり相対パスで上階層に遡る記述を追加
- その後ろに選択したファイルのパスをくっつけて完成
とどのつまり限界まで最上位階層まで遡ったあと改めて絶対パスで進めば相対パス指定と同じという強引なやり方です。