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

4D v16.3 は、スリープさせるとフリーズ

MacBookPro 13″ space gray、OSはHigh Sierraで4D v16を使っているときの注意。

v15.xまたはv16.2までは、クライアント/サーバ環境で4D Serverに接続しているクライアントマシンをスリープさせると、クライアントの4Dの接続が切れる、という仕様がありました。これは以前からの仕様。

で、v16.3はクライアント/サーバ環境でもスタンドアロンの環境でも、マシンをスリープさせると、4Dがフリーズする。このフリーズが結構厄介で、ウチではMacBookProに外付けモニタを使っていて、2ヶ所を移動しながら仕事をしているため、頻繁にフリーズする。外付けモニタを使っているからマシンをずっと閉じてるからかも。

電車の中で仕事していると4Dを終了させる余裕がないときもある。

さらにこの場合、クライアントマシンの4Dを強制終了させても4D Serverの接続数は減らない。それで4D Serverも再起動が必要になる、というおまけつき。

MacBookPro1台でサーバとクライアントを実行していても起こる。

まだデータとかプログラムが失われるという被害は確認できていない。が、不便なことになった。ノートパソコンのフタを閉めるときは、4D v16.3を終了させることを忘れないこと。

ちなみに、接続はサーバは有線、クライアントのMacBookProは無線LANです。

Mac mini High Sierraで4D v15 Serverのスリープ対策

光回線にグローバル固定IPを割り当てて、ルータによってアクセス制御することにより実現するプライベートネットワーク上で、4D v15 Serverを運用しています。サーバマシンはMac mini、OSはHigh Sierraです。

遠隔地のサーバは動いているかどうか確認するにはMacではVNC(画面共有)を使って確認します。

スリープする

以前からmacOSはデフォルトで「スリープする」に設定されています。システム環境設定の省エネルギーでディスプレイをオフに「しない」、ディスプレイがオフのときにコンピュータを自動でスリープさせない、にしていました。

解決方法

これだけでは不足でした。次の二つやりました。

・スクリーンセーバをオフにする

・アカウントのログインオプションで、4Dをインストールした管理者で自動ログインする

これで毎朝、画面共有でログインして、サーバをおこす必要がなくなりました。

4D コマンドの定義に移動 オンラインヘルプ

4D コマンドの定義に移動 オンラインヘルプ

4Dのメソッドエディタには、オプションキーを押しながらマウスカーソルをコマンド名の上に置くと、コマンド名がリンク文字列のように変化して、クリックするとリファレンスマニュアルがブラウザで表示される、という機能がある。

最近、コマンドの定義に移動しない。定義が表示されるコマンドもあるけど、いつもv13のリファレンスマニュアルが表示される、なぜかなと。

コマンドの定義に移動する先は、4Dメニューの【環境設定】の「一般」の「Webサイト」という項目に記述されている。次のようになってた。

http://doc.4d.com/4dv13/help/command/ja/

v16の場合、正しくは次。

http://doc.4d.com/4dv16/help/command/ja/

http://doc.4d.com/4Dv16R5/4D/16-R5/General-Page.300-3509135.ja.html#102865

http://doc.4d.com/4Dv15/4D/15.4/Writing-a-method.300-3285560.ja.html

※ 注意 ※

コマンドを選択したり、キャレットをコマンド名のどこかにおいて右クリックしても同様の動きになる。この場合、コマンド名をすべて選択しているか、または何も選択していないでキャレットが挿入されているか、のどちらかでないとコマンドを正しく認識しない。中途半端にコマンドの一部の文字が選択されているとブラウザが表示されても、目的のコマンドのページに移動しないので注意。

※ 注意 ※

4D のマニュアルは毎週更新されているそうです。このブログの情報も最新ではないかもしれません。4Dドキュメントセンターで確認することをお勧めします。

4D v16: フォームの2ページ目にWebエリアを配置しない

4D v16: フォームの2ページ目にWebエリアを配置しない

フォームにWebエリアを配置して、WA SET PAGE CONTENTでhtmlコンテンツをレンダリングしています。

このフォームで表示したいWebエリアが4つあって、1ページのフォームでは入りきらない。そこでページを増やして2ページ目にWebエリアを配置したのでした。するとその2ページのWebエリアにhtmlコンテンツが表示されない。

不思議なことに3ページに移動させて戻ったりすると2ページのWebエリアは表示される。2ページから1ページに戻って、2ページに行くと表示される。しかしウインドウを開いた直後に2ページに移動させたときだけはどうしても表示されないのでした。メソッドが悪いわけではなさそう。

(4D サポートに電話して確認、解決しました)

これは4D、というかWebエリアの仕様でした。Webエリアは表示方法や画面制御について外部のレンダリングを使っていて、そのため4Dが制御しきれない部分があって、ウインドウを開いた直後に表示されるページ(1ページと0ページ)には、ウインドウを開いたタイミングで表示されるが、別ページのWebエリアにはオブジェクトがロードされる前にコマンドを実行しても作用しない、ということでした。どうやらFORM GOTO PAGE(2)の直後にWA SET PAGE CONTENTを実行しても、まだWebエリアはロードしきれていないため内容が表示されない。

で、回避策を考えました。
1)ページをやめて別のウインドウを開く
2)0ページに配置して、1ページを表示するときは四角形で隠しておく
3)0ページに配置して、2ページ目を表示するときだけ所定の位置に移動させ、ほかのページを表示するときは遠くに移動させておく
4)0ページに配置して、2ページ目を表示するときだけVisible、ほかのページを表示するときはInvisible

1)はできることはわかっているけど仕様変更なのでやりたくない。2)から試す。すると、1ページ目に置いた四角形は、0ページのボタンとか四角形を隠すことはできるが、0ページのWebエリアを隠せない。Webエリアは常に一番前に表示されてしまう。順番も4Dが制御しきれない部分のようです。左の図の2つあるWebエリアのうち、後ろの方を0ページに、前の方を1ページに配置したら、右の図のように1ページ目の四角形やボタンよりも前に表示されてしまう。これも驚きの結果だ。

 

3)はOK。ちょっとコードがトリッキーに見えるけど、これでも良しか。
4)もOK。こちらは仕様に納得感があり、コードはシンプル。これを採用。

マニュアルを見ると、次のように書いてあります。VISIBLEやMOVEで制御しろと言っているような...

Webエリアのプログラムによる管理
他の動的なフォームオブジェクトのように、Webエリアはオブジェクト名とテキスト型の変数名を持ちます。これらはWebエリアをプログラミングに よって処理する際に使用されます。 特にWebエリアに対して OBJECT SET VISIBLE コマンドと OBJECT MOVE コマンドを使用することができます。