お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"[D3] DBGridにチェックボックス"




 

{
 DBGridに表示しているデータ列のBoolean項目を
 チェックボックスにします。
 ぜんぜん汎用性が無いので、だれかコンポにして〜(^^;
 そうそう、Delphi 3専用です。(CellClickのため。)

 Delphi 2.0でもOnMouseUpをつけたDBGridで、なんとか
 出来ます。でも、どこのセルをクリックしたかを探すのは
 面倒そうです。私は、クリックされた(セルが選択された)
 時に、現在のセルを参照し、チェックボックスのセルだったら
 処理をするようにしました。でも、ちょっと胡散臭いです。(笑)
}

//Booleanな項目だったらチェックボックスを描画
//Booleanな項目以外はデフォルトの描画
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if Column.Field.DataType = ftBoolean then begin
    DBGrid1.Canvas.Brush.Color := clBtnFace;
    DBGrid1.Canvas.FillRect(Rect);
    if Column.Field.AsBoolean then
      DrawFrameControl(DBGrid1.Canvas.Handle, Rect, DFC_BUTTON,
DFCS_BUTTONCHECK + DFCS_CHECKED)
    else
      DrawFrameControl(DBGrid1.Canvas.Handle, Rect, DFC_BUTTON,
                                DFCS_BUTTONCHECK);
    end else
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

//セルがクリックされたとき、Booleanな項目ならOn,Off逆転
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
  FieldName: string;
begin
  if DBGrid1.SelectedField.DataType = ftBoolean then begin
    FieldName := DBGrid1.SelectedField.FieldName;
    Table1.Edit;
    Table1.FieldByName(FieldName).AsBoolean :=
      not Table1.FieldByName(FieldName).AsBoolean;
    Table1.Post;
  end;
end;


//Booleanな項目に移動したら、Editingしない。
//手抜きです。
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
  if DBGrid1.SelectedField.DataType = ftBoolean then begin
    DBGrid1.Options := DBGrid1.Options - [dgEditing];
  end else begin
    DBGrid1.Options := DBGrid1.Options + [dgEditing];
  end;
end;

//描画を自分でやる
procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGrid1.DefaultDrawing := false;
end;

                              97/11/15(Sat) 02:26am  QZB13606 Charm

Original document by Charm           氏 ID:(QZB13606)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum