第14回エンバカデロ・デベロッパーキャンプセッションT7自己フォロー(グリッドの特定列をボタンにする)より。
ボタンを上手に使っているところが参考になります。
TButtonにイベント処理を任せることで、描画処理がシンプルになっています。
実際にはもう少しコードが加わるとは思いますが。
ちなみに私も、コンポーネントを作成しない派です。
以前に使っていたフリーのコンポーネントが、IDEをバージョンアップしたら、インストールできなくなったことがあります。
当時のコンパイラに不具合があって、DelphiのコードをC++Builder用に変換するときにエラーになったのだと思います。
C++Builderは、DelphiのコードをC++Builder用に変換する作業が加わるため、Delphiよりもトラブルに遭遇する確率が高いと思います。
そのため、C++BuilderユーザーはDelphiユーザーよりも、
コンポーネントのインストールに抵抗があるのかもしれません。
# 私だけかもしれませんが。
ちょっと気になった点があります。
// テーマサービスの取得
TThemeServices* pTheme = ThemeServices();
if (pTheme) {
// テーマが有効
とありますが、Themes.pasを見ると、ThemeServices()は常に有効なオブジェクトを返すようです。
function ThemeServices: TThemeServices;
begin
if InternalServices = nil then
InternalServices := ThemeServicesClass.Create;
Result := InternalServices;
end;
テーマ (視覚スタイル) を使用しているかどうかを調べるには、
TThemeServicesのThemesEnabledプロパティを使った方がいいような気がします。