掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TGridのセルに枠を描画したい (ID:151127)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ちなみに、Delphi 11.2では次の様にしたらできました。 「構造」 Form1 ┗Grid1 ┣ImageColumn1 ┣ImageColumn2 ┣ImageColumn3 ┣ImageColumn4 ┗ImageColumn5 「FMXコード」 unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.StrUtils, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti, FMX.Grid.Style, FMX.Grid, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Objects; type TForm1 = class(TForm) Grid1: TGrid; ImageColumn1: TImageColumn; ImageColumn2: TImageColumn; ImageColumn3: TImageColumn; ImageColumn4: TImageColumn; ImageColumn5: TImageColumn; procedure FormCreate(Sender: TObject); procedure Grid1CellClick(const Column: TColumn; const Row: Integer); procedure Grid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); procedure Grid1DrawColumnBackground(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); private { private 宣言 } public { public 宣言 } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin // 選択中Row保存用 Grid1.Tag := -1; // イベント設定 Grid1.OnCellClick := Grid1CellClick; Grid1.OnDrawColumnBackground := Grid1DrawColumnBackground; Grid1.OnDrawColumnCell := Grid1DrawColumnCell; end; procedure TForm1.Grid1CellClick(const Column: TColumn; const Row: Integer); begin Grid1.Tag := Row; // 選択されたRowを保存 Grid1.BeginUpdate; Grid1.Repaint; Grid1.EndUpdate; end; procedure TForm1.Grid1DrawColumnBackground(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); var bBr: TStrokeBrush; begin // カラム一致? if Grid1.ColumnIndex = Column.Index then begin // ロウ一致? if Grid1.Tag = Row then begin // ブラシ bBr := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Yellowgreen); bBr.Thickness := 3; // 矩形描画 Canvas.BeginScene; Canvas.DrawRect(Bounds, 0, 0, ALLCORNERS, 1, bBr); Canvas.EndScene; end; end; end; procedure TForm1.Grid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); var bBr: TStrokeBrush; A: TRectF; begin // カラム一致? if Grid1.ColumnIndex = Column.Index then begin // ロウ一致? if Grid1.Tag = Row then begin // ブラシ bBr := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Yellowgreen); bBr.Thickness := 3; // 与えられたBoundsの矩形の大きさが異なるので調整 Bounds.Offset(-2, -2); Bounds.Width := Bounds.Width + 4; Bounds.Height := Bounds.Height + 4; // 矩形描画 Canvas.BeginScene; Canvas.DrawRect(Bounds, 0, 0, ALLCORNERS, 1, bBr); Canvas.EndScene; end; end; end; end.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.