FireMonkeyのグリッドの同じ列に異なるセルコントロールが必要な場合はどうすればよいですか。セルコントロールは列に属しているように見えますが、一部の行にはチェックボックスが必要で、他の行にはコンボボックスまたは編集コントロールが必要な場合があります(プロパティエディターなど)。
前もって感謝します。
FireMonkeyのグリッドの同じ列に異なるセルコントロールが必要な場合はどうすればよいですか。セルコントロールは列に属しているように見えますが、一部の行にはチェックボックスが必要で、他の行にはコンボボックスまたは編集コントロールが必要な場合があります(プロパティエディターなど)。
前もって感謝します。
アルノーは、彼の回答ですでに私の記事にリンクしています。この記事では、グリッド、列、およびセルの基本について説明します。次の手順で起動して実行できます。
申し訳ありませんが、これ以上詳細な回答はできませんが、これを完全にカバーするには、一連のブログ投稿が必要になります。
スタイルを使用します - セル データを設定するときにセル スタイルを設定します。その後、onapplystyle イベントを使用して、新しくスタイル設定されたセルで必要な処理を行います。
このようにして、必要なコントロールをスタイルに追加し、onapplystyle を使用して (イベントなどを設定するために) コントロールにアクセスできます。
ヒント - FindStyleResource はあなたの友達です :-)
プロパティ エディターも必要で、1 つの列でさまざまなセル タイプをホストする方法を探しました。上記のように、行ごとに異なるスタイルを使用することが解決策になる場合がありますが、Firemonkey グリッドは特定の行に対してセル コントロールを予約しないため、セル コントロールが行に表示されるたびに、実際のスタイルが適用されます。これは、静的プロパティ エディタでは大きな問題ではありませんが、多くの行があり、各行に異なるセル タイプがある実際のグリッドでは、異なる戦略が必要です。そこで、別の解決策を思いつきました。TColumn とセル コントロールの間のセル タイプ プロキシを検討して、各セル プロキシが担当するセル コントロールを予約するようにしました。まず、トップ戦略を担当する新しい TColumn (TvariantColumn) があります。
vColumn := TVariantColumn.Create(Self);
vColumn.Header := 'Variant Column';
vColumn.OnGetCellProxyIndex := GetCellProxyIndex;
Grid1.AddObject(vColumn);
次に、次のようなプロキシを作成します
vColumn.NewCellProxy(TTextProxy);
vColumn.NewCellProxy(TColorComboProxy);
vColumn.NewCellProxy(TComboColorProxy);
次のように、作成後にプロキシ固有のジョブを処理することもできます
with TProgressProxy(vColumn.NewCellProxy(TProgressProxy)) do //4
begin
Min := 0;
Max := 100;
end;
with TPopUpProxy(vColumn.NewCellProxy(TPopupProxy)) do //5
begin
Items.Add('Istanbul');
Items.Add('Paris');
Items.Add('NewYork');
end;
私は私のウェブサイトで私の方法をブログし、主題についての詳細を見つけることができる詳細な記事を公開しました.