リストボックス」タグアーカイブ

4D リストボックスの列幅拡大「カラム自動リサイズ」(v17)

リストボックスの列幅拡大

これはうれしい。ウインドウを拡大したときに、拡大対象の列を指定することができる。v16からあったらしいが、確かめたのはv17。少し面倒な手順もあるのでここに記す。

4Dには画面をリサイズする機能がある。フォームを作成すると、デフォルトでフォームプロパティの「固定幅」と固定高さ」はノーチェック。これでフォームを横方向と縦方向に拡大/縮小ができるようになっている。

4Dv15以前から、リストボックスを配置して、プロパティで「リサイズオプション」で「横方向サイズ変更」をチェックすると、フォームの拡大に伴ってリストボックスが拡大する。しかし「最も右のカラムのみがリサイズされます。」とマニュアルにもあるように、例えば次のフォーム。

フォームを拡大させると一番右の列が拡大されるけど、消費税の列が拡大してもうれしくない。

摘要の列が広がってほしい。

v17では(v16からあったようだが確かめていない)「カラム自動リサイズ」をチェックすると、列ごとに幅を拡大するかどうかを指定できる。

次に、消費税の列の「座標とサイズ」プロパティで「最小幅」と「最大幅」を「幅」と同じ68にする。これでこの列は固定幅を指定したことになるが、すべての列が固定幅だとやはり一番右の列が拡大する。

拡大させたい列は「摘要」。「最小幅」は「幅」と同じ144、「最大幅」はデフォルトの32000にする。これで「拡大されたあと、元に戻るときに最小で144以下になって欲しくない」という意味と、「拡大の最大値は無限」という意味になる。拡大のときだけじゃなくて、縮小のときにどの列が狭くなって欲しいかも設定しておくのだ。縮小のときは各列がまず最小幅になろうとするので、最小幅に144を与えると、この列の縮小は144で止まり、さらにリサイズすると別の列が狭くなっていって、これ以上狭くなる列がないとリサイズができなくなる。

これで「摘要」列だけを拡大させることができた。

 

【注意】
1)「拡大させたくない列」すべてについて、上記の消費税のような設定をしなくてはならない。
2)「拡大させたい列」については元に戻るときの最小幅も設定しなくてはならない。
3)v16以前から変換されたプロジェクトではデフォルトで「カラム自動リサイズ」はオフになっている。

参照:
4D v17

リストボックス特有のプロパティ

http://doc.4d.com/4Dv17/4D/17/List-box-specific-properties.300-3743666.ja.html

4D リストボックス 列の移動をできなくしたい

リストボックス 列の移動をできなくしたい

フォームにリストボックスを配置して列数を2以上にすると、実行モードではユーザが列を移動することができます。実行モードでリストボックスの列(ヘッダ部分)をドラッグすると、列の順番を変えることができる、という機能です。

プログラマとしては何もコードを書かずにこの機能を提供できるのはいいことですが、たまにこの機能を抑制したい時があります。つまりユーザに列の入れ替えをしてほしくないケースです。

例えば、次の例では、勘定科目の金額は借方金額の方が左の列、貸方金額が右の列に並んでいます。これを次のようにドラッグして貸方金額を左に移動させることができてしまいます。これは抑止したいところです。会計の世界では「借方金額は左」と決まっているからです。

図1 借方金額は左

図2 ドラッグして移動中

図3 貸方が左に!!

 

 

対策:

リストボックスのプロパティで「ドラッグしない列数」に「列数」と同じ数値を入力します。数値が異なる場合はどうなるかというと、左からN個目までが移動できない列になります。

http://doc.4d.com/4Dv16/4D/16.1/List-box-specific-properties.300-3373463.ja.html

図 リストボックスを選択して表示したプロパティリストの一部

プロパティリスト

現在の「ドラッグで移動しない列数」は次のコマンドで取得できます。

LISTBOX Get static columns

「ドラッグで移動しない列数」をセットするコマンドは次です。

LISTBOX SET STATIC COLUMNS

参考情報:

リストボックスの機能に「スクロースしない列数」というのがあります。

リスボックスの横スクロールが有効になっている時に、横スクロールすると左側にあった列は左に隠れてしまいます。このように隠れて欲しくない列、つまり左側にいつも表示していたい列を指定する機能です。フォームエディタではプロパティリストの「リストボックス」の「スクロールしない列数」に数値を入力することで指定します。

このほかリストボックスの機能に「スクロースしない列数」というのがあります。

列数が多かったり、列幅が大きい列がある場合、リスボックスは横スクロールが有効になります。ことのきにスクロールして欲しくない列、つまり左側にいつも表示していたい列を「スクロールしない列数」と呼びます。

フォームエディタではプロパティリストの「リストボックス」の「スクロールしない列数」に数値を入力することで指定します。