メモ用に作ったテキスト入力用スクリプトの内容が更新されない場合がある(パネルドッキング時)
- October 19, 2023
- 2 replies
- 327 views
AfterEffects内にメモ入力欄がほしくて、テキスト入力欄を表示するスクリプトを作って、入力した内容が常に保存されるようなものを作っています。(タブで3つの入力フィールドあり)
あまり知識がなくコードの読み書きもできないので、ChatGPTに聞きながら作ってみた所、以下のコードで一応、できました。
ただ、なぜかこのパネルをワークスペースにドッキングした状態の場合は、パネルを一度開き直さないと、テキストの更新(テキストの内容変更、削除、追加)が次回パネルやAepを開いたときに反映されません。
ドッキングしていない場合は、パネルを開き直さなくても次回にパネルまたはAepを開いたときに反映されます。
そのため、
・ドッキングしている状態
・Aepを開いてパネルを開き直さずにテキスト入力欄の内容を変更・削除・追加した場合
のみ、何かのキックが走らないためか、この条件下ではテキストの更新がされません。
この問題の解決方法について何か良い方法はないでしょうか?
※Aepファイルを保存してるかしていないかは全く関係ありませんでした。どのようなAepでも、パネルをワークスペースにドッキングしていない場合は普通に保存されますし、ドッキングしている場合は必ず一度パネルを開き直さないと保存がされない状況です。
そもそも、app.settingsやonChangeの構文が正しいのか、あまり使わないものなのかとかもよくわかっていないので、この問題が解決するなら構文の書き方にこだわりはないです。
var mainScriptName = "MyScript";
// テキストの保存関数
function saveText(tabNumber, text) {
app.settings.saveSetting(mainScriptName, "tabText" + tabNumber, text);
}
// 保存されたテキストの取得関数
function getSavedText(tabNumber) {
return app.settings.haveSetting(mainScriptName, "tabText" + tabNumber) ? app.settings.getSetting(mainScriptName, "tabText" + tabNumber) : "";
}
var mainPanel = (this instanceof Panel) ? this : new Window("palette", "メモパネル", undefined);
mainPanel.orientation = "column";
// タブパネルの追加
var tabbedPanel = mainPanel.add("tabbedpanel");
tabbedPanel.alignment = ["fill", "fill"];
var tabs = [];
for (var i = 1; i <= 3; i++) {
tabs.push(tabbedPanel.add("tab", undefined, "T" + i));
}
var inputFields = [];
for (var i = 1; i <= 3; i++) {
inputFields.push(tabs[i - 1].add("edittext", undefined, getSavedText(i), {multiline: true, wantReturn: true }));
inputFields[i - 1].alignment = ["fill", "fill"];
(function(index) {
inputFields[index - 1].onChange = function() { //テキストを常に保存する
saveText(index, this.text);
};
})(i);
}
if (mainPanel instanceof Window) {
mainPanel.center();
mainPanel.show();
} else {
mainPanel.layout.layout(true);
}
