C++BuilderでTJvStringGridを使ってみる。
TJvStringGridは、セルの文字揃えやソート、CSVファイルの保存や読み込みの機能を拡張したグリッドです。
※TJvStringGridはJVCLのコンポーネントです。JVCLをインストールすると使用できるようになります。
■文字揃えを設定する
OnGetCellAlignmentイベントで引数CellAlignmentに文字の揃え方を指定します。
void __fastcall TForm1::JvStringGrid1GetCellAlignment(TJvStringGrid *Sender, int AColumn,
int ARow, TGridDrawState State, TAlignment &CellAlignment)
{
switch (AColumn) {
case 1:
CellAlignment = taLeftJustify; //左寄せ
break;
case 2:
CellAlignment = taRightJustify; //右寄せ
break;
case 3:
CellAlignment = taCenter; //中央寄せ
break;
}
}
■入力方法を設定する
OnGetEditStyleイベントで引数EditStyleに入力方法を指定します。
esPickList(コンボボックス)のときは、選択肢をPickListStringsに設定します。
esEllipsis(ボタン)のとき、ボタンが押されるとOnEditButtonClickイベントが発生します。
//セルの内容を編集可能にする
JvStringGrid1->Options << goEditing;
void __fastcall TForm1::JvStringGrid1GetEditStyle(TJvStringGrid *Sender, int AColumn,
int ARow, TStrings *PickListStrings, TEditStyle &EditStyle)
{
switch (AColumn) {
case 1:
EditStyle = esSimple;
break;
case 2:
EditStyle = esEllipsis;
break;
case 3:
EditStyle = esPickList;
PickListStrings->Add("選択肢1");
PickListStrings->Add("選択肢2");
PickListStrings->Add("選択肢3");
break;
}
}
void __fastcall TForm1::JvStringGrid1EditButtonClick(TObject *Sender)
{
MessageDlg("ボタンが押されました。", mtWarning, TMsgDlgButtons() << mbOK, 0);
}
■編集できるセルを限定する
セルが編集される時にOnShowEditorイベントが発生します。
引数AllowEditにfalseを指定すると、セルを編集できなくなります。
//セルの内容を編集可能にする
JvStringGrid1->Options << goEditing;
void __fastcall TForm1::JvStringGrid1ShowEditor(TJvStringGrid *Sender, int ACol, int ARow,
bool &AllowEdit)
{
AllowEdit = (ACol == 1 && ARow == 1);
}
■CSVファイルに保存する
SaveToCSVメソッドを呼ぶとグリッドのデータをCSVファイルに保存することができます。
第1引数に保存するファイルのファイル名、第2引数に区切り文字、第3引数に引用符を指定します。
JvStringGrid1->SaveToCSV("C:\\test.csv", ',');
保存処理中はOnSaveProgressイベントで処理の進行具合を知ることができます。
void __fastcall TForm1::JvStringGrid1SaveProgress(TObject *Sender, int Progression,
int Total)
{
ProgressBar1->Position = Progression;
}
■CSVファイルから読み込む
LoadFromCSVメソッドを呼ぶとCSVファイルのデータをグリッドに読み込むことができます。
第1引数に保存するファイルのファイル名、第2引数に区切り文字、第3引数に引用符を取り除くかを指定します。
JvStringGrid1->LoadFromCSV("C:\\test.csv", ',');
読み込み処理中はOnLoadProgressイベントで処理の進行具合を知ることができます。
void __fastcall TForm1::JvStringGrid1LoadProgress(TObject *Sender, int Progression,
int Total)
{
ProgressBar1->Position = Progression;
}
■ソートする
SortGridメソッドはグリッドのデータをソートします。
SortGridメソッドの引数は次のようになっています。
- Column ソートに使用する列
-
Ascending ソート順
-
Fixed 固定行をソート対象に含めるか
enum TJvSortType { stNone, stAutomatic, stClassic, stCaseSensitive, stNumeric, stDate, stCurrency };
- SortType 比較方法
-
BlankTop ソートする前に空のセルを移動するか
実行例
//小さい順にソートする
JvStringGrid1->SortGrid(2, true);
//大きい順にソートする
JvStringGrid1->SortGrid(2, false);
//固定行もソートする
JvStringGrid1->SortGrid(2, false, true);
//数値として比較する
JvStringGrid1->SortGrid(2, true, false, stNumeric);
■参考リンク
Pingback: prog » StringGrid に CheckBox を。。C++Builder XE2