掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TGridのセルに枠を描画したい (ID:151117)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
次の様なやり方ではどうでしょう? TGridコンポーネント上にTRectangleコンポーネントを乗っける方法です。 「構造」 Form1 ┗Grid1 ┣ImageColumn1 ┣ImageColumn2 ┣ImageColumn3 ┣ImageColumn4 ┣ImageColumn5 ┗Rectangle1 「FMXコード」 unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti, FMX.Grid, FMX.Layouts, FMX.Objects, System.UIConsts; type TForm1 = class(TForm) Grid1: TGrid; ImageColumn1: TImageColumn; ImageColumn2: TImageColumn; ImageColumn3: TImageColumn; ImageColumn4: TImageColumn; ImageColumn5: TImageColumn; Rectangle1: TRectangle; procedure FormCreate(Sender: TObject); procedure Grid1SelectCell(Sender: TObject; const ACol, ARow: Integer; var CanSelect: Boolean); procedure Grid1ViewportPositionChange(Sender: TObject; const OldViewportPosition, NewViewportPosition: TPointF; const ContentSizeChanged: Boolean); private { private 宣言 } SelectCol : Integer; // 選択中の列 SelectRow : Integer; // 選択中の行 public { public 宣言 } end; var Form1: TForm1; implementation {$R *.fmx} // 最初の処理 procedure TForm1.FormCreate(Sender: TObject); begin // 選択中変数を初期化 SelectCol := -1; SelectRow := -1; // 枠を初期化 ( ここはオブジェクトインスペクタで設定しても良い ) Rectangle1.Fill.Kind := TBrushKind.None; // 塗り潰し無し Rectangle1.Stroke.Color := claYellowGreen; // 枠の色 Rectangle1.Stroke.Thickness := 3; // 枠の太さ Rectangle1.HitTest := FALSE; // クリックを透過させる Rectangle1.Visible := FALSE; // 最初は表示OFF end; // セルを選択した時にする描画 procedure TForm1.Grid1SelectCell(Sender: TObject; const ACol, ARow: Integer; var CanSelect: Boolean); begin // セル番号を保存 SelectCol := ACol; SelectRow := ARow; // 枠を描画 Rectangle1.Position.X := Grid1.ColumnByIndex(ACol).Position.X; Rectangle1.Position.Y := Grid1.RowHeight * ARow; Rectangle1.Width := Grid1.Columns[ACol].Width; Rectangle1.Height := Grid1.RowHeight; Rectangle1.Visible := TRUE; end; // 列の幅を変更した時に実行 procedure TForm1.Grid1ViewportPositionChange(Sender: TObject; const OldViewportPosition, NewViewportPosition: TPointF; const ContentSizeChanged: Boolean); var CanSelect : Boolean; begin // 選択中? if SelectCol > -1 then begin // 描画し直す Grid1SelectCell(Grid1, SelectCol, SelectRow, CanSelect); end; end; end. 「動作確認」 Delphi XE8 TRectangle(枠)がTGridの子なので、上下左右にスクロールさせてもちゃんと付いてきます。 列の幅を変更しても枠の大きさが変わります。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.