CR2Builder の LeftPage, RightPage を とりはずし(Docking out)できるようにした。問題がいくつかあって、Docking out すると
1.Popupメニューからの操作ができない。
2.Main Menu からの操作もできないと使えない。
1.Popupメニューからの操作ができないのは、Main Form に実装していた機能を各Pageである Page Form 側に移植すればすむ。
2.Main Menu からの操作もできないと使えないので、Main Menu を Page Form につければすむ。
実は Main Form に実装している機能とは3つ位のファイルに分割して実装している。
TFormMainCR2B CR2Builder の Main Form のデザイン定義部分そのもの
TFormMainBase TFormMainCR2Bが継承しているもの
APLAgentCR2 TFormに実装しきれないものを入れているもの、
(APLAgentAbs などを継承しているので、CR2Builder に特化したClass)
Page Form といっているのも2つからなる
TFormCR2BTab Form のデザイン定義部分
FormAgentCR2BTab TFormCR2BTab に実装しきれないものをいれている。
Main Form に実装していた機能を Page Form 側に移すのは
APLAgentCR2 に実装していた機能を FormAgentCR2BTab に移動させる作業になる。
なぜ Agent に機能を実装しているのかというと
1.プログラムコードが多いのでFormに機能を実装しきれない。
2.Agent の方が処理の依頼を頼みやすい。(例えば処理中のメッセージの管理や、処理が多重実行されない仕組みを持っている。)
3.汎用的な機能はAgentが継承するクラスに既に定義済みである。のでそれでなんとかなれば実装の手間がはぶける。
Docking out するために、 Page Form を導入するとは、 FormAgentCR2BTab を導入することになる。MainForm側に実装していた機能をPageForm側に移動をするということは、Script から呼び出せる関数の仕様を若干変更させる必要が生じる。
●その3
関数の仕様を変更とは、ActiveなPageに対して処理をしてたのを Page を指定して処理を行うように変更することだ。でその作業をしてると、CR2Builder 2.14で、Script処理系が2系統あるので、Scriptから呼び出せる関数の仕様をDelphiの記述をまず変更すると、PPA Scriptでの定義部分と、TMSPascalでの定義部分の2箇所定義を書き換える必要がある。どこを書き換えたらいいのかはコンパイラーが警告するので、いいとして、Scriptから呼び出せる関数が多量にあると管理しきれなくなる。
そこでCR2Builder特有の関数の定義部分を、言語処理系から分離することで、言語処理系ごとに書き換える手間をなくそうと関数の定義情報を管理する発想は Lispとか、.Net や Javaなどももっているので目新しくはないが、そういった機能お実際に使ったことがある人をみたことがない。言語処理系に依存する関数定義をしていると、管理しきれる関数に限界が生じるので、アプリケーションに依存する関数定義自体を管理する機能は必要になる。関数定義を管理する機能があると、使える関数一覧機能、関数の使い方のヘルプを表示するとか、そういった機能を追加するのが容易にできる。
●その4
CR2Builder 2.15.2 では Scriptから関数の表現形式が大幅にかわり実質 2.14.2以前の Script との互換性はないです。とはいっても、関数自体を削除してないので書き換えれば動きます。

0