Grid Control 4
- ◆プログラム作成ガイド
- ◆プログラムの開始
- ◆初期表示のデザイン
- ◆データの入力方法
- ◆クラスの作り方
- ◆データをメモリーに
- ◆ファイル読み書き
- ◆データの保存方法
- ◆ツリービューマウス右
- ◆画面表示インプリメント
- ◆複数のページ印字
- ◆DLL化する
- ◆エクセル似の入力
サブメニュー
ここに紹介するプログラムは、WIN XP 2003/Windows 7 (32bits) - OS 環境でマイクロソフトのVisual Studio 2010 で作ったものです。
Windows XP/ Windows 7(32bits) での動作は確認済みですが…
Grid Control の着目セルのハイライト
データを入力したり編集するために、指定したGridのセルをハイライトしたり移動したりする機能が必要である。
マウスで特定のセルをクリックした時や矢印キーの左右・上下を指定した場合、そのセルにハイライトが移動したりする機能は、GridControlの標準機能でも付属していますが、使い勝手が好みに合わないため独自に作ることにしました。
独自の機能は以下のように決めました。
-
行の左端しに行番号を表示し、着目行の番号を分かり易い色でハイライトする。
-
着目セルも、別の色でハイライトする。
-
マウスでセルをクリックした時、着目行番号セルと着目セルのハイライトが追従して移動する。
-
矢印(Up・Down・Left・Righ)キーに対応してハイライトが自由に移動する。但し、入力されているデータの最大値 + 1行までとする
-
1行分のデータが正しく入力され、Returnキーが押された時、次の行の左端しのデータ入力セルに 、自動的にハイライトが移動する。
-
すなわちハイライトしたセルと次に入力されるセルとを同期させる。
-
初期設定の最大行以上にデータが入力された時、自動的に行を増やし行番号も増やす。
-
指定した行を削除した場合、行を減らし行番号表示も修正し表示し直す。
-
固定行や欄外のマウスクリックには反応しない。
-
マウスの左・右クリックにたいして別の機能を持たせる。
ざっと以上の機能が必要となります。
Gridの初期設定専用クラスの作成
まず初めに、Gridの形状や左端に行番号を表示するコードを書きました。
この機能は汎用的に今後使用出来そうなので単独のクラスとしてコーディングしました。 クラス名はCGridContolとしました。
メンバー関数は、
CPoint SetCurrentCel( );
CPoint GetPosition( );
CPoint SetSelectedCel(.......); 所定のセルのハイライト
CPoint KillSelectedCel(........); 所定のセルのハイライトを消す
void SetTextMatrixRight(.......);
右アライメントを持った特定のセルへの文字列の表示
void SetTextMatrixLeft(......);
左アライメントを持った特定のセルへの文字列の表示
void SetTextMatrixCenter(.....); 中央アライメントを持った特定のセルへの文字列の表示
void LossGridHighLight(.....);
指定行番号セルのハイライトを消す
long SetGridHighLight(.....);
指定行番号セルのハイライト
CPoint
GetPosition(........);
所定のセルの位置を取得
void SetGridStyle(.....);
Gridの最大行・最大列の指定
void SetFixedColor(.....);
固定行・列数とその色の設定
void SetTitle_N(.....);
左端の行番号表示
標準のGridメンバー関数を利用していますのでPCによっては表示速度が遅く不満に感じられるかもしれません。
不満の方は独自にActiveXなどを使い作成してください。
コードのソースは、Zipファイルとして添えつけてありますので、次をクリックしてダウンロードして下さい。
特定のデータ入力セルをハイライトする
リソースエディタで表中のFlexGridのハイライト機能をOffにし、スクロールバーは垂直のみをOnとします。
貼り付けたGridの大きさを調整し 、初期最大行数より1行少ない大きさに調整します。
リソースエディタで表示行数と列数を仮に設定し、表示しながら大きさを調整することにしました。コードで設定する方法が最適ですがここでは省略します。 これで、常にスクロールバーが表示され、醜い隙間が表示されなくなります。
次にClassWizardでダイアログクラスに新たな関数を宣言します。
///////////////////////////////////////////////
// 選択したセル表示
void CWallDlg::SetSelectedCel( long col, long row )
{
if( col>0 && row < m_maxrow) {
m_grid.SetCol( col ); //
着目セルの列取得
m_grid.SetRow( row ); //
着目セルの行取得
m_grid.SetCellBackColor( RGB( 0, 255, 255
));
m_col = col; //
着目しているセルの列をメンバー変数にコピー
m_row = row; //
着目しているセルの行をメンバー変数にコピー
}
}
///////////////////////////////////////////////
// 選択解除したセル
void CWallDlg::KillSelectedCel(long col, long row)
{
if( col> 0 && row < m_maxrow ) {
m_grid.SetCol( col );
m_grid.SetRow( row );
m_grid.SetCellBackColor( 0 );
}
}
この関数は、行番号をUpdateする関数です。 変数 m_pt は、ダイアログクラスのメンバー変数で着目行を保持する関数です。
///////////////////////////////
// No.の設定
int CWallDlg::SetPt(int OldPt, int NewPt)
{
CGridControl gc;
CString szData;
int n = m_ArrayWall.GetSize();
if( n<NewPt ){ // アレーが増えている場合のみ
szData.Format( "%02d", NewPt );
gc.SetTextMatrixCenter( &m_grid, NewPt, 0, szData );
}
return NewPt;
}
ページ先頭に戻る
最終更新日: 2020/02/04