月別アーカイブ: 2020年1月

4D Serverが使うポート

4D Serverとポート番号

4D Serverは3つのTCPポートを使用して内部サーバとクライアントの通信を行います:

・SQLサーバ: デフォルトで19812 (環境設定の”SQL/設定”ページで変更可)。

・アプリケーションサーバ: デフォルトで19813 (“クライアント-サーバ/設定”ページで変更可)。

・DB4Dサーバ(データベースサーバ): デフォルトで19814。このポート番号を直接は変更できません。常にアプリケーションサーバのポート番号+1です。

詳しくはここ:

v17でも確認済み。

リビングに腰壁を張る(3)

第3ステージは見切り。矢澤材木店にはなかったのでまっすぐの木材からトリマーで作るのかなあと考えていた。あちこちホームセンターに行ってみたら、綾瀬市のハンディホームセンターにありました。そのままだと出っ張りすぎるけど、内側をトリムすれば使えそうだ。

杉Pつなぎ見切り材、888円を2本購入

難しかった45度のコーナー。付き合わせて135度になるように67.5度にカット。スライド丸ノコのおかげで正確に切れた。

どの板を手前にするか選ぶのが楽しい。赤っぽいところを選ぶ。
上から見たところ。見切りも赤っぽいところ
左右2箇所
赤っぽくて節が少なめ

2.4mm x 32mmのミニビスで2箇所どめ。

見切りをつけたら、すきまが目立たなくなった

全体風景

時計の文字がにじんで18年みたいに見えるけど、18.7℃。4月4日、寒い。

本棚の下はLにカット。

本棚の下、見切りでビス止めの穴が隠れた
正面奥が本棚

終端を面取りしてみたら、ワンポイトになっている横溝が斜めにカットされてしまい、見た目いまいちだったのでそのままにした。

ようやく4月4日に完成。冬は終わっていた。


リビングに腰壁を張る(2)

第2ステージは窓枠周り。窓枠ごとに高さが違う?驚きの施工。材料を切る前に気がついてよかったです。窓のないところは高さ790mm、窓の下は654mmと490mmの2種類だけど、654mmと650mmのところがあったり、490mmと484mmくらいのところもある。窓枠のないところは790mmなので、切り替わり目の板を、窓枠の角を囲むようにL型に加工してきちっとはめるのだ。さらに45度カットという難関、斜めに付いている勝手口のドアの両側。

別件ですが、ガラスをペアガラス(スペーシア)に交換、こちらはプロにお願いした。

まだ腰壁は張ってない。

窓枠の高さが場所によって異なる。材木店には長めにお願いしておいて、スライド丸ノコでギリギリに切って張っていく。

腰壁を右から張っていく。ルーバー窓には内窓を付けた。こちらもプロの仕事。TV台、ついでに作りました。

45度のコーナー、どの板を使うか、幅はどちらに寄せるか、コーナーの合わせ方はどうするか、トリマーを使ったら簡単にできるのではないかとか、上手いことやろうとしてしばらく踏ん切りがつかなかった。こういうところがアマチュア、というか趣味だな。

隙間あいてますね。
45度をクリアしたら、あとは一気に張る。

45度のコーナーを上から見たところ。

この合わせ方にしてみました。

窓の角の合わせてL型に加工

上の方、ちょっと隙間空いてるね

板は2.4mm x 32mmのミニビスで上下を止めていった。

木目を見ながらどこに配置するか決めていく
790mmの板が間に挟まる
コンセントの穴から寒い風が吹き込む。隙間風を防ぐためのコーキングの跡が見える
マキタのスライド丸ノコでコンセント加工
表はこんな感じ
こちらは幅が狭いコンセント、穴を塞ぐ
切った破片を少し加工してはめる
コンセントカバーを付ければ、よくみないと破片で埋めているのがわからない

腰壁のトップに見切りがついているけど、見切りの話はまた次回

ステージ3に続く

リビングに腰壁を張る、日曜大工

1Fリビングに腰壁を張るぞ

もう1年も前の話だけど、やり方を忘れそうなのでブログに残しておくことにしました。1Fリビング・ダイニングに日曜大工で腰壁を張った話。

リビング・ダイニングはもともと杉板の内装なのだが、杉板の収縮で隙間ができて寒いのでした。そこで腰壁を思いついた。縦に張っていけば隙間風は防げるだろうし、板厚もあるので暖かいのでは?

スライド丸ノコを手に入れてから日曜大工が楽しい、というのもあったけど、プロに頼むと一気にやらなくてはならず、事務所を片付けなくてはならない。自分でやれば片付けしなくてもいいし、作業しているところだけ家具を移動させながらのんびりやれる。

材料は矢澤材木店に注文、店主と相談して、さね加工の杉板(板厚12mmx110mmピッチ)を使うことにした。このお店は色々相談に乗ってくれるので助かりました。寸法を伝えて切ってもらう。配達してくれます。

材料が来たのが2月8日、いつ頃できるのかな。

まず簡単なところから始める。コンセントを避ける加工が1箇所ある。これが2月15日、第1ステージ完了。

本棚までの高さ、790mmでカット
木目を合わせたつもり、赤と白を交互とか考えたが、経年変化で同じような色になると判断。

ここまでで約1束。いけそうなので残りの材料を見積もり

第2ステージ用の材料到着

本棚用の木材も混じっている。長いさねは余り。

ステージ2に続く

4D リストボックスから開くフォームの次前ボタン

4Dのリストボックスから開いたフォームに、「次前(つぎまえ、と読む)」を実装する

リストボックスの選択行の詳細を表示した時、次のレコードに移動するには、一度フォームを閉じてリストボックスに戻り、次の行をダブルクリックなどでレコードを表示する。これではユーザは不便。それでフォームに[次][前]ボタンを配置して、リストボックスに戻らなくても隣のレコードを表示できるように、という要望にお応えするのだ。

実装方法

たとえばvKA01_lstKAというリストボックスがある。キー配列はvKA01_lstKA_IDとすると、次前はこのvKA01_lstKA_IDの配列中から隣のKA_IDを取得して、そのレコードをロードして表示する、ような実装をする。これでリストボックスに表示されているレコードを行ったり来たりする動きになる。

実装箇所

修正が必要なのは次の箇所。

1)フォームに◁▶︎のようなボタンと現在の位置を2/30のような形式で表示するテキストが必要

フォームにオブジェクトを配置、現在の位置はvKA02_varIndexに表示、メッセージはSetControlsValues_PrevNext(後述)で作成する。

2)呼び出し元、たぶんKA01_btnModのようなボタンメソッド

次前しなければ$ka_idは変更されない値だったが、次前を実装するとフォームが閉じた時に変化していることがある。選択されている行番号も同様だ。戻ってきた時、最後に選択されているはずの行の内容を保存したり、リストボックスでその行を選択したりするために、フォームで次前が行われた結果の$ka_idと行番号を返してもらう必要がある。よってこれらはポインタで渡す。引数は次の3つ。

  • $ka_idのポインタ
  • 配列vKA01_lstKA_IDのポインタ
  • 選択されている行番号のポインタ
KA01_btnModの例

3)呼び出される側、KA02_Input_Mod

KA02_Displayする前に、配列のポインタ、行番号、$ka_idをプロセス変数に保持、ゲッターセッターを用意。_DisplayでOKされたら、フォームを表示する前のKA_IDと閉じた時のKA_IDは次前で変化している可能性があるため、Acceptの際にゲッターでKA_IDを取得してからレコードを保存する。リストを再作成してから、変化した行番号をゲッターで取得してリストボックスの行を選択し直す。

KA02_Input_Modの例

4)一番前に来たら前ボタン、一番後ろに来たら次ボタンをディスエイブルにするために、SetControlsValuesにSetControlsValues_PrevNextを追加

SetControlsValuesの例

5)次前ボタン(KA02_brnNext)

次前の際に、レコードを保存するかどうかは設計が必要だ。次のようなケースがある。

  • A)問答無用で保存(いわゆる自動保存)
  • B)問答無用でキャンセル(保存しない、変更内容は失われる)
  • C)変更していたら自動保存、変更していなければ保存しない
  • D)変更していたらアラートでお知らせしてから保存、変更していなければアラートせずに保存しない

理想を言えばDだが、Aでも成立するケースは多い。ユーザからの強い要望でBというケースもあったので決めつけることのないように。次の実装はAの自動保存。

KA02_brnNextの例、KA02_brnPrevは24、26行目の「+1」を「-1」に変えるだけ。

ネーミングおよびJCL4Dについては「4Dアプリ開発ガイド」を参照。