現在、ツールバーのカスタマイズを捻出している所である。有り勝ちなものとしては「定義済みのボタンを選択して並び替える」というのが一般的なものなのだが、それは後回しにする事にした。HotMilkでのカスタマイズは、タグの挿入に重点を置いたもので、ユーザーが設定できるタグの数に制限がない事を仕様とした。
まぁ、ウィンドウの方の都合で数の上限そのものは存在するのだが、設定できる文字列には制限を設けない。良くある文章のテンプレート化にも使えるものを目指し、タグ挿入時に必要な情報を補完できるように、各種のダイアログの呼び出しを可能とさせる!
TToolBarもまた、配下のコンポーネントをリストを持っているが、集中管理機構としては弱いと思われたので、TListクラスと組み合わせて強化してある。ただしButtonsプロパティを上書きしてしまったのでTToolButton以外のオブジェクトが登録される事を想定していない。追加できる事はできるが、従来の総括アクセス方法ではアクセスできないという事だ。
TToolBar自体に Addメソッドを搭載し、動的なバンドやボタンの生成が楽にできるようにした。基本的な値の設定などの為にはこの方が統一しやすいのだ。
ToolButtonもまた拡張されている。前述のタグ指定などの為のプロパティを実装し、内部的なクリックイベントへの対処の為のハンドラを追加し……と言った具合に。
VCl一般では内部で不都合がでない限りは、そういうことに無頓着に言われたまま処理を行っているようだ。しかし、今回の様なコンポーネントの配列管理というとそうも行かないらしい。処理できない値の処理を、コンポーネントで解決するのかアプリ側で解決するのか曖昧である。
筆者個人の指針としては、コンポーネント側で不正な値をNILにすげ替えて返答し、アプリ側でNILポインタを処理しない様に組むと具合が良いように感じる。まぁしかし、オブジェクトを破棄しても参照ポインタを初期化しないVCLの仕様も変だし、それを知ってて初期化し忘れる開発者もいけないのだろう
上のスナップショットで「背景画」というボタンが無効になっているのが解ると思うが、これが何だか上手く動作しないで悩んでいる。TControlBarにはコントロールに画像を貼り付けて背景とする機能があり、それ自体はちゃんと動作してくれた。しかし、その上に張りつけるTToolBarのTransparentプロパティを設定しても透過しないのである。
ヘルプによれば「ペイント時の不具合はツールバーが可視化する前に設定して回避せよ」てな風に書いてあるので、その様にしてみたが、デフォルト値としてそうする限り上手く行かない模様。透過する事はしてくれるのだが、TControlはおろかTFormをブチ抜いてデスクトップまで貫通してしまうから困りもの……
流石に他のアプリは透過していないものの、これでは却って見難いではないか! 困った困った!! 何が悪いのか判らないので、当面この機能は眠らせる事にする。この辺りはTCoolBarの方がきちんと動作してくれるようだ。むう。