LoginSignup
0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2015-12-08
動作確認
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を変更するコンポーネントは何か」を調べたい時、コーディング実装の方が調べやすいかもしれない。

0
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0