テキストボックスの幅に合わせる

[5066]テキストボックスの幅に合わせる 投稿者:すど 投稿日:2004/08/28(Sat) 14:39
こんにちは。

テキストボックスを可能な限り小さくして配置したいのですが、
テキストボックスに対して「オブジェクトを内容に合わせる」を実行すると、
ボックスの高さはテキストの行数に応じて小さくなっても
幅が小さくなってくれません。

ボックス幅もテキスト中の最長行に合わせて変化させるような
スクリプトなど、あるでしょうか。
Mac版2.0かCSで。よろしくお願いします。
» 1
[5066へのレス]Re: テキストボックスの幅に合わせる 投稿者:*** 投稿日:2004/08/28(Sat) 16:36
テキストボックス、各パラグラフ、各キャラクタのプロパティを取得して計算すればできるでしょう。

各テキストボックスを、テキストの最長行にあわせなければならない理由がイマイチ理解できません。
» 2
[5066へのレス]Re: テキストボックスの幅に合わせる 投稿者:TKS 投稿日:2004/08/28(Sat) 18:41
> 各テキストボックスを、テキストの最長行にあわせなければならない理由がイマイチ理解できません。

そうですか? よく必要になるケースがありますけど……。
下手なスクリプトですが、こんな感じでどうでしょうか(CSのみ)。


//テキストフレームまたはフレームグリッド(一度にひとつのみ)を選択の上、実行
//横組みの場合右側、縦組みの場合下側がフィットするようにフレームの幅が詰められます
//段落揃えが「左/上揃え」または「均等配置(最終行左/上揃え)」のときのみ有効です
//段落のインデントやフレームのマージンは考慮に入れていません
//フレーム内のすべての段落がそれぞれ1行に収まっていることを前提にしています
if (app.activeDocument.selection[0].constructor.name == "TextFrame" && app.activeDocument.selection[0].characters.length != 0 ) {
var myFrame = app.activeDocument.selection[0];
var arr = new Array(3);
x = myFrame.lines[0].characters[myFrame.lines[0].characters.length - 1].horizontalOffset;
y = myFrame.lines[0].characters[myFrame.lines[0].characters.length - 1].baseline;
ls = myFrame.lines.length
flag = 0;

if (myFrame.lines[ls - 1].characters[myFrame.lines[ls - 1].characters.length - 1].contents != "\r") {
lastChar = myFrame.lines[ls - 1].characters[myFrame.lines[ls - 1].characters.length - 1].contents
myFrame.lines[ls - 1].characters[myFrame.lines[ls - 1].characters.length - 1].contents = lastChar + "\r";
flag = 1;
}

for (i = 0; i < ls; i++) {
if (myFrame.lines[0].characters[0].parentStory.storyPreferences.storyOrientation == HorizontalOrVertical.horizontal) {
tempX = myFrame.lines[i].characters[myFrame.lines[i].characters.length - 1].horizontalOffset;
if (x < tempX) {
x = tempX;
}
}
else {
tempY = myFrame.lines[i].characters[myFrame.lines[i].characters.length - 1].baseline;
if (y < tempY) {
y = tempY;
}
}
}

if (flag == 1) {
myFrame.lines[ls-1].characters[myFrame.lines[ls-1].characters.length - 1].contents = "";
}

arr[0] = myFrame.geometricBounds[0];
arr[1] = myFrame.geometricBounds[1];

if (myFrame.lines[0].characters[0].parentStory.storyPreferences.storyOrientation == HorizontalOrVertical.horizontal) {
arr[2] = myFrame.geometricBounds[2];
arr[3] = x;
}
else {
arr[2] = y;
arr[3] = myFrame.geometricBounds[3];
}

myFrame.geometricBounds = arr;
}
else {
alert("テキストフレームまたはフレームグリッドが選択されていないか、\n文字が入力されていません。");
}
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア