私はLazarus 0.9.30.2を実行しています。TStringGridの列タイトルセルをすべて別の色にペイントする方法はありますか
TStringGridがあるTFormがあります。各列のタイトルは、実行時にグリッドに動的に追加したTGridColumnsオブジェクトです。各列のタイトルには、それに関連付けられたオブジェクト(作成してTListに格納したオブジェクト)があります。文字列グリッドの列タイトルセルの背景をペイントしたいが、すべてのセルが同じ色になることは望ましくない。列タイトルに関連付けられたオブジェクトのプロパティの1つの値に応じて、色が変わります。
私はStackoverflow(example)でTStringGridセルをペイントする方法に関する答えがあることを知っています。文字列グリッドDrawCellイベントを使用してセルをペイントする方法について説明していますが、このプロシージャを呼び出す方法がわかりません。
目的のセルを識別する(つまり、セルの「Rect」プロパティを識別する)別のプロシージャを用意し、必要な色を設定してから実際のグリッドのDrawCellプロシージャを呼び出します着色?
感謝答えのために。私はグリッドのセットを持っており、それらのすべてのためにグリッドカラムをロードし、TForm1.Createコンストラクタの一部としてセルにTTmColumnTitleオブジェクトを割り当てます。 OnPrepareCanvasイベントはTForm1.Createの前に呼び出されるため、 'ColumnTitle:= TTmColumnTitle(StringGrid1.Objects [ACol、ARow])'はNilオブジェクトを返します)。 OnPreparecanvasイベントの前にグリッド列の読み込みを移動する方法はありますか、TForm1.Createの後に何らかの形でこのイベントをトリガーできますか? – user1174918
フォームの 'OnCreate'イベントは、文字列グリッドの' OnPrepareCanvas'の前に1回発生します。 'OnPrepareCanvas'は、ペイントされるときに各セルに対して起動され、一度ではなく、セルが視覚的にリフレッシュする必要があるときはいつでも実行されます。あなたはイベントを呼び出す方法をあなたの質問に、あなたは、 'StringGrid1.DrawRow(0);'、しかし、あなたが記述しているのは変です。イベントはコンポーネントによって自動的に発生します。ハンドラで実行されているコードのみを記述します。 – TLama
コンポーネントのイベント処理を誤解していると思います。 ['このチュートリアル'](http://delphi.about.com/od/beginners/l/aa052802b.htm)。また、フォームのコンストラクタをオーバーライドする必要はありません。イベントハンドラを記述する必要があります(私の答えのスクリーンショットを参照)。マウスでフォームを選択するだけで、 'Object Inspector'、' Events'タブに行き、 'OnCreate'の' ... 'ボタンをクリックしてそこにコードを書くことができます。 – TLama