Grid Control 7
- ◆プログラム作成ガイド
- ◆プログラムの開始
- ◆初期表示のデザイン
- ◆データの入力方法
- ◆クラスの作り方
- ◆データをメモリーに
- ◆ファイル読み書き
- ◆データの保存方法
- ◆ツリービューマウス右
- ◆画面表示インプリメント
- ◆複数のページ印字
- ◆DLL化する
- ◆エクセル似の入力
サブメニュー
ここに紹介するプログラムは、WIN XP 2003/Windows 7 (32bits) - OS 環境でマイクロソフトのVisual Studio 2010 で作ったものです。
Windows XP/ Windows 7(32bits) での動作は確認済みですが…
行の削除
編集の時、行の削除機能は必要不可欠の機能です。
この機能にはデータ保持しているアレーの削除や行番号の書き換えなどを併せて持たせる必要があります。
更に、削除確認のダイアログ表示などを持たせなければなりません。 また、FlexGridの初期最大表示行以上の時と、以下の時を判断しなければなりません。この機能は、削除したい行をマウスで選定し、ダブルクリックで行うようにしました。
以下が、サンプルです。
///////////////////////////////////////////////
// データの削除
void CWallDlg::OnDblClickWalldataGrid()
{
CGridControl gc;
CString szMess = _T("");
long row = m_grid.GetMouseRow();
long col = m_grid.GetMouseCol();
int nRow = row - m_nFixedRows;
int nLine = m_nData;
int nTop = 0;
if(nRow>=0 && nLine>nRow && col==0)
{
szMess.Format(IDS_NOTE_DELETE, nRow + 1);
m_ctrWallDataInput.ShowWindow(SW_HIDE); // EditBox を非表示にする
if( AfxMessageBox(szMess, MB_YESNO, 0) == IDYES)
{
m_grid.SetRedraw(FALSE);
m_ArrayWall.RemoveAt(nRow);// 記録アレーより指定行を削除
m_nData--;
m_grid.RemoveItem(row);// グリッドよりデータの削除
m_rc.y = SetPt(nLine);
// 削除の最小制限
m_nMaxRow--;
nTop = m_nMaxRow - m_nViewRow + 1;
if(nTop <= 1) nTop = 1;
else nTop--;
m_grid.SetTopRow(nTop); // 着目行にスクロール
// 入力データ数が初期最小行より少ない場合、行の数は初期値とする
if(nLine < m_nInitia_maxrow)
m_grid.SetRows(m_nInitia_maxrow);
gc.SetTitle_N(&m_grid, m_nFixedRows, m_nFixedCols);
m_rc = gc.SetCurrentCel(&m_grid, m_nMaxRow, nLine, 1);
m_grid.SetRedraw(TRUE);
m_ctrWallDataInput.SetWindowText(_T(""));
m_ctrWallDataInput.SetFocus();
m_ctrWallDataInput.ShowWindow(SW_SHOW); // EditBox を表示にする
EditBoxRedraw(&m_grid, &m_rc);
}
else
{
m_rc = gc.SetCurrentCel(&m_grid, m_nMaxRow, nLine+1, 1);
m_ctrWallDataInput.SetFocus();
EditBoxRedraw(&m_grid, &m_rc);
}
}
}
入力データの確定
入力したデータは、リターンキーで確定する動作を追加していないと、行の管理や削除などの機能上都合が良くありません。
そこで以下の関数を追加しました。
//////////////////////////////////////
// Set Room Data
void CWallDlg::SetWallData(int pt)
{
CGridControl gc;
CString szData;
int n = m_ArrayWall.GetSize();
long pt = m_nFixedRows + n;
if( n > m_nRows ){ // アレーが増えている場合のみ
m_nRows++; //
確定アレー数を増加させる
if( m_nMaxRow < m_nInitia_maxrow )
m_nMaxRow = m_nInitia_maxrow;
// 削除の場合最小値制限
if( pt >= ( m_nMaxRow - m_nFixedRows )) { //
初期設定の行数を超えた場合
m_nMaxRow = pt + 1;
gc.SetGridStyle( m_grid,
m_nMaxRow, m_nCols ); // 行を自動で増やす
m_rc.y = SetPt( pt );
m_nTopRow++;
m_grid.SetTopRow( m_nTopRow );
// 着目行を自動でスクロール
}
}
m_rc = gc.SetCurrentCel( &m_grid, m_nMaxRow, pt, 1 );
szData = m_grid.GetTextMatrix( m_rc.y, 1 );
// 新規追加行にスクロール
int row = m_nMaxRow - m_nInitia_maxrow + m_nFixedRows + 1;
if(m_nMaxRow > m_nInitia_maxrow )
m_nTopRow = row;
m_grid.SetTopRow( m_nTopRow );
if( szData == _T("") )
m_ctrWallDataInput.SetWindowText( _T(""));
EditBoxRedraw( &m_grid, &m_rc );
}
ページ先頭に戻る
最終更新日: 2020/02/04