FileMaker スクロールバーの存在取得を困難にする書式設定バー

FileMakerのウインドウサイズ調整について未だ最適解を見つけられないのは、スクロールバーの存在を取得するのを難解にする書式設定バーのせいです。

この稿では、ウインドウ調整に関する話題のひとつとして、スクロールバーの表示状態をゲットすることと、その難易度を高める書式設定バーの怪奇について書いています。

ウインドウサイズの調整

ウインドウサイズを調整するにあたっては各種ゲットの関数を使って現状を知ることが最初のステップとなります。Get 関数でウインドウの幅や高さを得ることができますね。しかし不確定要素が一つあります。スクロールバーです。

スクロールバーの存在

ウインドウサイズを測量して判断したいときに問題となるのがスクロールバーの存在です。スクロールバーが表示されているかいないかで、表示領域に 15pxくらいの違いが出てきます。

スクロールバーが表示されているかいないかを取得する関数はありません。他の方法で存在を確認する必要があります。そのとき、幅に影響する右サイドでは問題は起きませんが、高さに影響する下部で問題が起こります。

右側のスクロールバー

Get ( ウインドウ幅 ) – Get ( ウインドウ内容幅 ) が 0 であれば右側のスクロールバーは表示されていません。15 など数字が現れればそれが表示されているスクロールバーのサイズです。ウインドウの横方向には不確定要素がスクロールバー以外に何もありませんから、確定した実数であるウインドウ幅と内容幅の計算で導き出せます。

下方のスクロールバー

下方のスクロールバーを判断するのは簡単にいきません。
Get ( ウインドウ高さ ) – Get ( ウインドウ内容高さ ) で得られる数字は、「ウインドウ上部のパーツ群」と「スクロールバーサイズ」の合計になります。横方向と同じ理屈だと、ウインドウ高さ – (上部パーツ + ウインドウ内容高さ)でスクロールバーが算出できるはずです。が、この計算式が成り立つためには、上部パーツのサイズが確定された数値でなければなりません。

ところが現実には上部パーツのサイズは関数でゲットしきれません。不確定要素があります。正確な数値を得られないので、上記の簡単な式は成り立ちません。

これまで誤解していたんですよ、「書式設定バー」の関数について。

ウインドウ上部のパーツ

ツールバー、書籍設定バー、定規

ウインドウ上部のパーツです。タイトルバーツールバー書式設定バーテキスト定規があります。サイズはそれぞれ固定です。これらについては、過去記事でも取り扱っています。

→ FileMaker ウインドウに関する忘れがちな用語のまとめ(修正版)

これらの要素は、手動で表示させたり非表示にすることができます。自動でもできるものがありますができないものもあります。

上部の各パーツについて、表示状況をゲットする関数が用意されていて、表示を制御するスクリプトステップも用意されている・・・と、最近まで誤解していました。

ツールバーと定規はゲットも制御もできる

ツールバーとテキスト定規にはゲット関数と制御ステップがどちらも用意されています。

書式設定バーは何もできない

しかし書式設定バーだけはゲットも制御も用意されておらず、そのサイズを確実に手に入れることが大変難しいことになっています。

書式設定バーの高さが不確定要素となり、スクロールバーの存在を知る計算式 ウインドウ高さ – (上部パーツ + ウインドウ内容高さ) が成り立ちません。

ゲット関数

ツールバーの表示・非表示の状態をゲットする関数は、Get ( ステータスエリア状態 ) です。
テキスト定規の表示・非表示の状態をゲットする関数は、Get ( テキスト定規表示 ) です。

書式設定バーは状態をゲットする関数が用意されていません。ただし、「表示を許可しているかしていないか」の設定がゲットできます。
Get ( 書式設定バーの表示状態 ) がそれです。この日本語の名前、絶対に間違っていますよ。この関数で表示状態はゲットできません。許可しているかどうかです。

許可しているからといって表示しているとは限りません。ただし許可していないなら間違いなく非表示になります。これまで、その名の通り「表示状態」をゲットしているとばかり思っていましたがそうではありませんでした。

Get ( 書式設定バーの表示状態 ) から得られる状態の可能性は次の三つです。

  • 許可していて表示されている ・・・ 1
  • 許可しているが表示されていない ・・・ 1
  • 許可していないので非表示・・・ 0

上二つは結果が共に「1」であり、表示されているのかいないのかを判別できません。「0」なら、必ず非表示になっていると判断できます。

スクリプトステップ

ツールバーの表示・非表示を命じるスクリプトステップは、ツールバーの表示切り替えです。
テキスト定規の表示・非表示を命じるスクリプトステップは、テキスト定規の表示切り替え です。

書式設定バーは、表示・非表示を司るスクリプトステップがありません。ただし「許可を与えるか与えないか」を制御できます。書式設定バーを許可 です。この制御では、表示・非表示を命じることはできません。

  • 許可をオン。表示されている
  • 許可をオン。表示されていない
  • 許可をオフ。表示されない

書式設定バーを許可 [オフ] を実行すれば、間違いなく非表示にできますが、オンにしたときの結果は不確定です。

結局、メニュー「書式設定バー」のチェック状態をゲットする関数ないの?ありません。じゃあ、チェックを付けたり外したりするスクリプトステップはないの?ありません。

スクロールバーの存在をどうやって取得するか

以上を踏まえて、スクロールバーの存在をどのように取得すれば良いか考えましょう。

ウインドウパーツのサイズをどこかに明記する

これまで私がやってきた方法は主にこれでした。パーツのサイズを手動で測って、そのサイズをどこかに明記しておくわけです。それを元に状態を計算します。

このやりかたは個別の環境に依存しまくるし、スマートさのかけらもないやりかたですね。到底満足できるものではありません。

この投稿から長い年月が経った後、手動で計測するよりもうちょっとだけマシなやりかたを採用していますが、それでもやはり個別の環境に無理を強いるやりかたです(そのやりかたはまたどこかで紹介するかもしれません)

書式設定バーを常にオフにする

そんなわけで思いついたはこれです。書式設定バーを全面的に使用禁止にします。書式設定バーの妙なGet関数のうち、確実なのは「許可しない=非表示」ですから。これを貫けば、単純な計算式でスクロールバーの存在を取得できるし、ウインドウサイズ調整の自動化が一気に進みます。

レイアウト編集モード以外で書式設定バーが必要なときって、テキストフィールドに文章を入力、しかも文字に装飾を施したい場合だけですよね。そういうのが必要なところにだけ、書式設定バー許可オンオフのボタンを配置しておけば済む話です。フィールドから抜けるときに必ずオフにするスクリプトを併用すれば、実害ありません。

書式設定バーを全面禁止にすることで ウインドウ高さ – (上部パーツ + ウインドウ内容高さ)の計算式が成り立ちます。

ウインドウサイズあれこれのFileMaker書類

以上、スクロールバー表示の有無を取得することを困難にすることから端を発した書式設定バーについてでした。マジで、書式設定バーがGetも制御もできないことに、これまで全く気付いていませんでした。自分にとっては驚愕の新事実を暴いたような気持ちになっております。

 

ところで手元に WindowSize.fmp12 というファイルがあります。以前のウインドウサイズ調整の記事で挙げたものを修正して改良したファイルです。ウインドウサイズのいろいろなゲットについて直感的にわかるようになるファイルですよ。お試しください。

WindowSize.fmp12.zip

ウインドウサイズに関する小さなファイル
ウインドウサイズに関する小さなファイル

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください