FileMaker Proのテキストフィールドにスタイル付きテキストを代入するAppleScriptです。
FileMaker Proには、v4の頃からかわらないとてもユニークな特徴があります。それは、テキストフィールドに書式つきテキストを突っ込めることです。こんなことができるデータベースは他に類を見ません。
# 書式付きテキストのほかに書式を持たないシャドーフィールドでも持たせているんじゃないかと推測
スタイル付きテキストについては、ワープロなどのソフトウェアを併用して作成する方法もありますが、AppleScriptだけで作成できれば、FileMaker Proのスクリプトステップ内に突っ込むことができて便利です。
ただし、当のAppleScript自体のスタイル付きテキストの作成能力に関しては昔から残念なレベルでした(Classic MacOS時代にはOSAXで作れたような気も)。風向きが変わってきたのは、macOS 10.10でCocoa呼び出しがすべてのランタイム環境で使えるようになったあたりです。当然、FileMaker Proのスクリプトステップ内でも呼べるようになっていました。
残念なことにmacOS 10.10登場当時、FileMaker Proが32ビットアプリケーションだったため、FileMaker Proのスクリプトステップ「AppleScriptを実行」の中で呼び出せるFrameworkも32ビットに限られていました。Cocoa Frameworkの多くは32bitアプリケーションからも呼び出せるようになっていましたが、そうでないものも多々ありました。
FileMaker Pro v12で64ビット化され、中に記述したAppleScriptからも64bit Frameworkを呼べるようになりました。
本Scriptはあくまでも実験的なものですが、AppleScriptからCocoaの機能を呼び出して自由にスタイル付きテキストを作成し、それをクリップボード経由でFileMaker Pro側に受け渡します。FileMaker Pro側では指定のフィールドに対してクリップボードの内容を「貼り付け」コマンドで代入します。
▲指定フォント、指定サイズ、指定テキストでスタイル付きテキストを生成してフィールドに代入
▲FileMaker Pro側にクリップボードから内容を受け取ってフィールドに入れるFileMaker Script
代入先のフィールド名については、FileMaker Proのスクリプト呼び出しをAppleScriptの「do script」コマンド経由で行う場合には、パラメータの指定ができないため、一切指定できません。
……ただし、AppleScriptからURL Event経由でもFileMaker Pro側のスクリプト実行ができ、その場合にはパラメータの受け渡しができます。そのため、URL Event経由で呼び出せば「クリップボードに入っているスタイル付きテキストの受け渡し先フィールド名」を随時指定することも可能です。
# FileMaker Proのdo scriptコマンドに素直にパラメータを受け渡す機能を付けてほしい
そろそろFileMaker Proのお試し版の期限が切れるので、FileMaker Pro関連のScriptingのまとまった情報について本Blog上への投稿は行えません。まとまった情報については、電子ブック新刊「FileMaker Pro Scripting Book」(予定)をお買い求めください。
AppleScript名:テキストフィールドにスタイル付きテキスト.scpt |
— Created 2020-12-29 by Takaaki Naganoya — 2020 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "AppKit" set attrStr to makeRTFfromParameters("ぴよまるソフトウェアだよーーん", 3.0, 72) of me (my restoreClipboard:{attrStr}) tell application "FileMaker Pro" tell database 1 do script "getAttrFromClipboard" –クリップボードの内容をtextFieldにペーストする end tell end tell –書式つきテキストを組み立てる on makeRTFfromParameters(aStr as string, outlineNum as real, aFontSize as real) –フォント set aVal1 to current application’s NSFont’s fontWithName:"HiraKakuStdN-W8" |size|:aFontSize set aKey1 to (current application’s NSFontAttributeName) –色 set aVal2 to current application’s NSColor’s blackColor() set aKey2 to (current application’s NSForegroundColorAttributeName) –カーニング set aVal3 to -2.0 set akey3 to (current application’s NSKernAttributeName) –アンダーライン set aVal4 to 0 set akey4 to (current application’s NSUnderlineStyleAttributeName) –リガチャ set aVal5 to 2 –全てのリガチャを有効にする set akey5 to (current application’s NSLigatureAttributeName) –枠線(アウトライン) set aVal6 to outlineNum set akey6 to (current application’s NSStrokeWidthAttributeName) set keyList to {aKey1, aKey2, akey3, akey4, akey5, akey6} set valList to {aVal1, aVal2, aVal3, aVal4, aVal5, aVal6} set attrsDictionary to current application’s NSMutableDictionary’s dictionaryWithObjects:valList forKeys:keyList set attrStr to current application’s NSMutableAttributedString’s alloc()’s initWithString:aStr attributes:attrsDictionary return attrStr end makeRTFfromParameters –クリップボードに内容を設定する on restoreClipboard:theArray — get pasteboard set thePasteboard to current application’s NSPasteboard’s generalPasteboard() — clear it, then write new contents thePasteboard’s clearContents() thePasteboard’s writeObjects:theArray end restoreClipboard: |