|
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
|