投稿者「wt」のアーカイブ

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: Not enough stack space

Not enough stack space

これまで幾度か遭遇してきたメッセージ。コンパイル時やビルド時では発生せず、実行時に発生する。
前回はNew processコマンドに与える引数によって解決。メソッドをたくさん呼び出している治郎吉商店のコーディングスタイルのプロジェクトでは、スタックメモリのサイズが小さすぎると、このメッセージが表示されることがあった。それを

$main_proc:=New process(“A00_main”;0;”A00_main”;*)

のように4Dにサイズを任せることによって回避できる。ことは承知している。今回はそれが原因ではない。ネットで調べてみると、4D社のナレッジベースにTipsがあった。

スタックに空きがありません

スタックメモリはメソッド呼び出しで消費されるので、再帰が循環すると無限に消費していきやがて枯渇する。再帰メソッドにトレースログを入れてみると、同じキーについて繰り返し実行されている... 循環参照を発見。これがエラーの原因だった。

会計ジロウには、レポート機能があり、科目を集計してそれをいくつかまとめて小計、それをまとめて中計、のような機能がある。スペースにキーと親キーを持たせておいて、親の親の親のような構造を再帰呼び出しで遡って、金額がどこのスペースに集計されなくてはならないかを制御用のテーブルのデータで定義している。
この実装では、データの作り方によっては循環参照になってしまい、再帰呼び出しが完了しなくなる恐れがあった。それはわかっていたのに、自分でそういうデータを作ってしまった。

4D v17ビルド時の注意

 

4D v17で、ビルドアプリが動かないトラブルが発生、はまり度4だったので報告。

デザインモードでビルドアプリケーションはエラーなく終了する。ビルドしたアプリを実行すると、「データベース/コンポーネント “4D ViewPro”はコンポーネント “4D SVG”を必要とします。」というエラーメッセージが表示されて画面には何も表示されない、という現象。

図 実行時エラー

このプロジェクトでは4D ViewProも4D SVGも使っていない。macでもwindowsでも同じ現象。

「アプリケーションビルド」コマンドの「プラグイン&コンポーネント」タブを見ると、このプロジェクトでは使っていないのになぜか、4D ViewProがチェックされていてビルドすることになっていた。4D SVGはノーチェック。それで動かない。

図 会計ジロウプロジェクトのアプリケーションビルドのダイアログ v17

使ってないので「4D ViewPro」のチェックを外したら、ビルドアプリは動くようになった。

4D v16で新規作成した別のプロジェクトではこの問題が起きていなかったことに気付いて、v16時代の会計ジロウプロジェクトの「プラグイン&コンポーネント」タブを見てみると、次のとおり。4D ViewProがない、4D SVGがノーチェック。このときはこれで問題ない。ビルドアプリは動いていた。

図 会計ジロウプロジェクトのアプリケーションビルドのダイアログ v16

では、v16で新規プロジェクトを作った場合は?次の図。4D SVGはチェックされてる。これはこれで問題ない。ビルドアプリは動くだろう。

図 デフォルトのプロジェクトのアプリケーションビルドのダイアログ v16

考察:

おそらく4Dv15で作成したプロジェクトを、v16に移行したとき「4D SVG」はノーチェックだったか、または自分でチェックを外した。そのプロジェクトをv17に移行して、移行前にノーチェックだった「4D SVG」はノーチェック、v17で追加された「4D ViewPro」のチェックがデフォルトでオン、という設定でビルド。できたビルドアプリが動かない。という現象が起こる。

新しく追加になったプラグイン&コンポーネントは、デフォルトでチェックされているようだ。新規プロジェクトならそれはあり。しかし移行されたプロジェクトでは、新しいコンポーネントを以前に使っているはずがないのだからデフォルトはノーチェックにすべきでは?

ちなみに、「4D ViewPro」がチェックされていても「4D SVG」もチェックしてビルドすれば、ビルドアプリを実行したときにエラーは発生しない。デフォルトで「4D ViewPro」をチェックするならその際に自動的に「4D SVG」もチェックされていて欲しい。

 

4DアプリにAbout画面を表示する方法

4DアプリにAbout画面を表示する方法 4D v16.3

次のメソッドをスタートアップ直後に実行。

SET ABOUT(“会計ジロウについて”;”A00_About”)

インタープリタ(デザインモード)で実行すると次のようになる。

実行モードでは次。

ビルドアプリでは、アップルメニューの右にある【DC】メニューに【会計ジロウについて】というメニュー項目が追加される。【会計ジロウについて】を選択するとA00_Aboutというメソッドが実行される。

このメソッドは$0に戻り値を返そうとするとエラーになる。