またXE7と旧バージョンの違いについてお尋ねします。
DBGRIDのBoolean型のフィールドをチェックボックスで表示したいのですが
DELPHI5では下記コードで表示できるのですがXE7だと
「E2003 未定義の識別子:'ftBoolean'」とエラーになります。
対応策をご存じであればご教示下さい。
procedure TMainForm.DBGrid1CellClick(Column: TColumn);
begin
if Column.Field.DataType = ftBoolean then
begin
Column.Field.DataSet.Edit;
Column.Field.AsBoolean := not Column.Field.AsBoolean;
end;
end;
procedure TMainForm.DBGrid1ColEnter(Sender: TObject);
begin
if TDBGrid(Sender).SelectedField.DataType = ftBoolean then
TDBGrid(Sender).Options := TDBGrid(Sender).Options - [dgEditing]
else
TDBGrid(Sender).Options := TDBGrid(Sender).Options + [dgEditing];
end;
procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
R: TRect;
begin
if Column.Field.DataType = ftBoolean then
begin
TDBGrid(Sender).Canvas.FillRect(Rect);
R := Rect;
InflateRect(R, -3, -5);
if Column.Field.AsBoolean then
DrawFrameControl(TDBGrid(Sender).Canvas.Handle, R, DFC_BUTTON,
DFCS_BUTTONCHECK + DFCS_CHECKED)
else
DrawFrameControl(TDBGrid(Sender).Canvas.Handle, R, DFC_BUTTON,
DFCS_BUTTONCHECK);
end;
end;
やっている事は下記サイトと同じ事なので
http://whityx.blogspot.jp/2012/10/delphidbgrid.html
それでエラーが出ると言うことは外部宣言の
「uses」の書き方が間違っているかと思います。
ues部分も書き出すと何かわかるかと
ありがとうございました。
改めて記述しなおしたらチェックボックス表示出来ました。何が悪かったのかわかりませんが(^^;
ただ1点、アクティブなセルだけチェックボックスと同時にTrueあるいはFalseと文字が表示されます。
このままでも動作に支障はないので構わないといえば構わないのですが文字表示させない方法をご存じであればお教え下さい。
描画処理以外の文字が表示されるということであれば
元の描画処理が有効なのでは?
DBGrid1.DefaultDrawing := false;
こちらを参考に
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00194.html
takeさん、ありがとうございました。解決です。
また最初に「未定義の識別子:'ftBoolean'」とエラーになったのは
usesに「Db」がなかったためでした。
ツイート | ![]() |