2015-12-09 c++ builder > LiveBinding > 3. 疑問点 > Form間のLiveBinding / 値の変換後での代入 / ソースのメンテナンス性


動作確認
C++ Builder XE4

c++ builder > LiveBinding入門してみた
http://qiita.com/7of9/items/72cd03dcaa999ed6ea85


LiveBinding を入門する中で疑問点が出てきた。

Q1. Form間でLiveBinding できないのか?

Unit1のTColorBoxからUnit2のTEditのColorプロパティを変更できないのか?

試しにプロジェクトを作ってみたが、Unit1のLiveBinding デザイナにおいて、Unit2のTEditを足す方法がよくわからない。

Q2. 値を変換して代入できないのか?

値をそのまま代入するLiveBinding はできるが、

y = fnc(x)

のような変換式を通した代入はできないのだろうか?

例えば、切片と傾きを考慮した以下の式を用いてLiveBindingしたい。

y = ax + b

具体例としては、TrackBar1のpositionを使って、Label1のFontSizeを変更する、など。

Q3. ソースのメンテナンス性はどうか?

同じ処理を以下の2つの方法で実装できる場合、どちらが今後メンテナンスしやすいか?

  1. LiveBindingで実装
  2. コードで実装

特に、振舞を読取る時にどちらがやりやすいだろうか。

IDEを開けばLiveBindingデザイナから振舞がわかりやすい。しかしながら、デザイン数が増えた時にみやすいかどうか。レイヤーというのはそのための機能なのか。

一方で、エディタ主体でコーディングする時、検索対象に.dfmファイルも含めることになる。

Unit1.dfm
object BindingsList1: TBindingsList
    Methods = <>
    OutputConverters = <>
    Left = 20
    Top = 5
    object LinkControlToPropertyColor: TLinkControlToProperty
      Category = #12463#12452#12483#12463' '#12496#12452#12531#12487#12451#12531#12464
      Control = ColorBox1
      Track = True
      Component = Edit1
      ComponentProperty = 'Color'
    end
  end

同じ処理はソース実装では以下のようになる。

void __fastcall TForm1::ColorBox1Change(TObject *Sender)
{
    Edit1->Color = ColorBox1->Selected;
}

Edit1->Colorを変更しているものを検索するとき、エディタなりIDEなりの検索機能で検索した時、LiveBindingでは上記のControlの行からComponentPropertyの行まで(4行分)を見て分かる。

一方で、ソースではEdit1->Color = ColorBox1->Selected;で読める。

「Edit1->Colorを変更するコンポーネントは何か」を調べたい時、コーディング実装の方が調べやすいかもしれない。