AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
DelphiXE3 [FMX] グリッド(Grid)2013/11/01
 
前回は [Metropolis UI]内を見ました。この次の[Cloud]・[IntraWeb]関連内は恒例のようにパスします。今回から、[Grids]内を見ていきます。このツールのカテゴリは Delphi2010・VCLアプリケーションにはありませんでした。
 
[Grids]内
FMX
 
まずは、グリッド(Grid)から。
ヘルプより。
TGrid は、表形式のさまざまなオブジェクトの処理を簡略化することを目的としたグリッド コントロールを表します。
 
TGrid オブジェクトをフォームに追加すると、さまざまなオブジェクト データを表形式で表すことができます。 TGrid には、特定のオブジェクト データを格納できる以下の列のいずれか 1 つ以上が存在可能です。
 
TCheckColumn -- チェックボックスを持つセルを保持
TImageColumn -- グラフィカル イメージを持つセルを保持
TPopupColumn -- ポップアップ メニューを持つセルを保持
TProgressColumn -- 進捗バー オブジェクトを持つセルを保持
TStringColumn -- 文字列を持つセルを保持
文字列のみを保有するグリッドが必要な場合には、代わりに TStringGrid を使用してください。
Delphi2010・VCLアプリケーションには、描画グリッド(DrawGrid)がありましたが、それよりももう少し特化したようなものでしょうか?
 


 
AlternatingRowBackground
このグリッド内の行の背景を描画する方法を指定することができます。True に設定した場合、行は代替背景色で描画されます。
RowCount
グリッド内の行の数を示します。
RowCountを読み取ると、Columns配列内のエントリの数を判断することができます。RowCountを設定すると、グリッドの一番下で、行が追加または削除されます。
RowCountの値には、グリッドの左にある固定列が、グリッドの本体内のスクロール可能な列と共に含まれています。
ShowHeader
グリッドにヘッダー行を表示するかどうかを示します。
ShowHorzLines
このグリッドに行を区切る水平線を表示するかどうかを示します。
ShowSelectedCell
このグリッドが、実行時に選択セルを強調表示するかどうかを決定します。
ShowVertLines
このグリッドに列を区切る垂直線を表示するかどうかを示します。
 
配置したグリッドを右クリックし、表示されるコンテキストメニューの「項目エディタ」を選択指定、あるいは、ダブルクリックをすると、「項目デザイナ」画面が表示されます。
 

列(カラム)項目の種類は右上のコンボボックスで選択出来ます。
 
 
「子項目の追加」というのがありますが、子項目を追加した場合、後で編集をする場合に子項目が表示されないという症状が起きますし、画面上も煩雑になりますから使用は控えた方が良いような気はします。
 
(ヘルプより)
TColumn グリッド内の列を表します。
TColumn オブジェクトは TGrid の列を表します。TColumn はまた、オブジェクトを値とする以下の列の基底クラスでもあります。
 TCheckColumn
 TImageColumn
 TPopupColumn
 TProgressColumn
 TStringColumn
新しい型の列を作成する必要がある場合は、TColumn からサブクラスを派生させます。
TCheckColumn TCheckColumn は、TCheckCell オブジェクトが格納されたグリッド内の列を表します。
TCheckColumn オブジェクトはグリッド内の 1 つの列であり、その行は TCheckCell 型で、クリック可能なチェック ボックスを含みます。
TStringColumn TStringColumn は、文字列が格納されたグリッド内の列を表します。
TStringColumn オブジェクトはグリッド内の 1 つの列であり、その行は 文字列を含みます。
TProgressColumn TProgressColumn は、TProgressCell オブジェクトが格納されたグリッド内の列を表します。
TProgressColumn オブジェクトはグリッド内の 1 つの列であり、その行は TProgressCell 型で、進捗バーを含みます。
TPopupColumn TPopupColumn は、TPopupCell オブジェクトが格納されたグリッド内の列を表します。
TPopupColumn オブジェクトはグリッド内の 1 つの列であり、その行は TPopupCell 型で、ポップアップ メニューを含みます。
TImageColumn TImageColumn は、TImageCell オブジェクトが格納されたグリッド内の列を表します。
TImageColumn オブジェクトはグリッド内の 1 つの列であり、その行は TImageCell 型で、画像を含みます。
 
まずは、TCheckColumn と TStringColumn で試してみます。



 
まずは各列のヘッダーから。
フォーム表示時のイベントハンドラを下記のようにします。
procedure TForm1.FormShow(Sender: TObject);
begin
 CheckColumn1.Header := 'チェック';
 StringColumn1.Header := '文字1';
 StringColumn2.Header := '文字2';
end;
保存・コンパイル・実行を行うと下図のようになります。

 
次に、操作・入力・編集する内容についてですが、このコンポーネントは表示と操作作業をするだけで、データ内容を保持したりしない様子です。ですので自前でデータ内容を保持する変数等を用意し、それにアクセスするようプログラミングしないといけません。
 
グリッドは、セル内容を読み込みするイベント OnGetValue、セル内容を書き込みするイベント OnSetValue がありますので、
・OnGetValueイベントにて変数内容をグリッドのセルへ転送する
・OnSetValueイベントにてグリッドのセル内容から変数へ転送する
という事を行います。
そして、グリッド内容を変化させたあとは、グリッドの UpdateColumns メソッドで更新を行う必要があります。
 
type
 TForm1 = class(TForm)
  Grid1: TGrid;
  ・・・
 private
  { private 宣言 }
  C0, C1,C2 : array of TValue;
 public
  { public 宣言 }
 end;
 
var
 Form1: TForm1;
 
implementation
 
{$R *.fmx}
 
procedure TForm1.FormShow(Sender: TObject);
begin
 CheckColumn1.Header := 'チェック';
 StringColumn1.Header := '文字1';
 StringColumn2.Header := '文字2';
 
 SetLength(C0,Grid1.RowCount);
 SetLength(C1,Grid1.RowCount);
 SetLength(C2,Grid1.RowCount);
end;
 
procedure TForm1.Grid1Exit(Sender: TObject);
begin
 Grid1.UpdateColumns;
end;

procedure TForm1.Grid1GetValue(Sender: TObject;
 const Col, Row: Integer; var Value: TValue);
begin
 case(Col)of
  0: Value := C0[Row] ;
  1: Value := C1[Row] ;
  2: Value := C2[Row] ;
 end;
end;
 
procedure TForm1.Grid1SetValue(Sender: TObject;
 const Col, Row: Integer; const Value: TValue);
begin
 case(Col)of
  0: C0[Row] := Value ;
  1: C1[Row] := Value ;
  2: C2[Row] := Value ;
 end;
end;
保存・コンパイル・実行を行うと下図のようになります。



 
なぜデータ内容を保持するプロパティを持っていないのか? 用意されていればもっと楽にプログラミングし易いだろうに、と思ってしまいます。(※ひょっとするとどこかにあるのかもしれませんが)
 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
>DelphiXE3
▲2013/10/31
 2013/11/01
▼2013/11/02
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.