みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
テーブルに「フォルダ名」というフィールドを作成します。
そのフィールドに使用者が選択したフィルダ名を表示するスクリプトは作成できますか。
使用者がフォルダ選択する場合に、[参照]というボタンを作成し、そのボタンをクリックするとPCのフォルダが表示(エクスプローラのようなもの)され、選択するというイメージです。
Offline
環境は?
Offline
Windows7です
Offline
FMバージョンは? まあ、OSが分かれば良いか。
Win標準のHTAアプリを使って、選択フォルダのパスを取得します。
老婆心から、フォルダ名だけではなくフォルダパスを得る様にしてあります。
【フィールド 定義】
●「フォルダ名」テキストフィールドを作成。
●HTAプログラムを格納しておく「HTA」グローバルフィールドを作り、以下のコードをコピー入力。
<script type='text/javascript'>
clipboardData.clearData('Text');
var sh = new ActiveXObject( 'Shell.Application' );
var objShell = new ActiveXObject('WScript.Shell');
GetSpecialFolder = objShell.SpecialFolders('Desktop');
var initPath = GetSpecialFolder;
var folder = sh.BrowseForFolder( 0, 'フォルダを選択下さい', 512, initPath );
if( folder == null ) {
clipboardData.setData('Text','キャンセルボタンが押されました。');
} else {
clipboardData.setData('Text',folder.Self.Path);
}
sh = null;
objShell = null;
window.close();
</script>
【修正履歴】 2014/9/5 19:07 #10レスのご指摘により11行目を改善(修正済み)
△ clipboardData.setData('Text',folder.Items().Item().Path);
↓
◎ clipboardData.setData('Text',folder.Self.Path);
【選択フォルダパス取得 スクリプト】
● 消去 [選択; テーブル::フォルダ名]
● 変数を設定 [$出力パス; 値:"file:" & Get(テンポラリパス) & "temp.hta"]
● フィールド内容のエクスポート [テーブル::HTA; 「$出力パス」; 自動的に開く]
● Loop
● スクリプト一時停止/続行 [間隔(秒): 1]
● 貼り付け [選択; テーブル::フォルダ名]
● Exit Loop If [テーブル::フォルダ名 ≠ ""]
● End Loop
● フィールドへ移動 []
Last edited by Hiro (2014-09-06 14:07:07)
Offline
「Hiro」さん
有難うございます。
ディレクトリ名が取得できました。
Offline
【補足】
「ディレクトリ名」でなく、もし「フォルダ名」だけが好ければ、
HTAフィールド内容の11行目末尾を Path → Name へ変更。
Offline
win7 FM13です。
いつも参考にさせていただきありがとうございます。
デスクトップを選択した場合、「未定義またはNull参照のプロパティ"path"は取得できません」のエラーがでますこれを回避してデスクトップを選択できますでしょうか?
よろしくおねがいます。
Win7では隠しフォルダになっていますので、隠しフォルダを表示する設定に変更してください。
隠しフォルダを表示する設定にして次の順で辿り着けます。
コンピューター→ローカルディスク(C:)→ユーザー→ユーザー名→デスクトップ
Offline
非表示は関係なくて、トップノードのデスクトップを選択するとエラーになりますね。
他に、「コンピュータ」とか「ライブラリ」とかを選択すると、パスが取得できませんから、どうしたものか。選択し直しさせる?
clipboardData.setData('Text',folder.Items().Item().Path);
この部分を
clipboardData.setData('Text',folder.Self.Path);
に変更で良さそうです。
参考:
Hey, Scripting Guy! フォルダのみをユーザーに選択させるダイアログ ボックスを表示する方法はありますか :
http://gallery.technet.microsoft.com/sc … fc7c0e9b4f
Offline
qb_dpさん、ナイスなフォロー感謝です。
なるほど、初期設定のデフォルトフォルダ(デスクトップ)を含め、全ての選択フォルダに有効ですネ。
Offline
512でなく513にすれば、フォルダ以外は選択できなくなります。
Offline
皆様的確なアドバイスありがとうございました。
描いていた通りの結果を得ることができました。
今後ともよろしくお願いします。
ところで、今後vbscript等の利用をする場合の参考に、このスクリプト(?)の仕組みを説明していただくことは可能でしょうか?
フォルダ選択のダイアログを出して、クリップボードにコピーするだけ。
BaseElementsというプラグインを使うと、関数1つでOKです。
アドバイスありがとうございまし。
そういうことも可能なのですね。
参考にしたいと思います。
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 527.93 KiB (Peak: 548.84 KiB) ]