在DBGrid里加入CheckBox可视化组件

转自 http://mydelphi.5d6d.com/thread-302-1-2.html

注意要USES DB 单元

主要代码:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
   DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
   CtrlState: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
begin
   if Column.Field.DataType = ftBoolean then
   begin
DBGrid1.Canvas.FillRect(Rect);
DrawFrameControl(DBGrid1.Canvas.Handle,Rect, DFC_BUTTON, CtrlState[Column.Field.AsBoolean]);
   end;
end;

全部示列单元文件内容:

 

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, DBClient, ExtCtrls, DBCtrls;

type
TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    ClientDataSet1: TClientDataSet;
    ClientDataSet1Value: TBooleanField;
    DBNavigator1: TDBNavigator;
    ClientDataSet1ID: TAutoIncField;
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid1CellClick(Column: TColumn);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1             : TForm1;

implementation

{$R *.dfm}

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
CtrlState: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
begin

if Column.Field.DataType = ftBoolean then
begin
    DBGrid1.Canvas.FillRect(Rect);
    DrawFrameControl(DBGrid1.Canvas.Handle,Rect, DFC_BUTTON, CtrlState[Column.Field.AsBoolean]);
end;

end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
   if DBGrid1.SelectedField.DataType = ftBoolean then
   begin
     DBGrid1.SelectedField.Dataset.Edit;
     DBGrid1.SelectedField.AsBoolean :=not DBGrid1.SelectedField.AsBoolean;
     DBGrid1.SelectedField.Dataset.Post;
   end;
end;

end.

参数强解(英文原HELP)

DrawFrameControlThe DrawFrameControl function draws a frame control of the specified type and style.
BOOL DrawFrameControl(   HDC [url="]hdc[/url] ,     // handle to device context    LPRECT [url="]lprc[/url] , // bounding rectangle    UINT [url="]uType[/url] ,  // frame-control type    UINT [url="]uState[/url]  // frame-control state );
Parameters hdc [in] Handle to the device context of the window in which to draw the control. lprc [in] Pointer to a [url=ms-help://borland.bds5/Gdi/rectangl_6cqa.htm] RECT[/url] structure that contains the logical coordinates of the bounding rectangle for frame control. uType [in] Specifies the type of frame control to draw. This parameter can be one of the following values.
Value Meaning
DFC_BUTTON Standard button
DFC_CAPTION Title bar
DFC_MENU Menu bar
DFC_POPUPMENU Windows 98/Me, Windows 2000/XP: Popup menu item.
DFC_SCROLL Scroll bar

uState [in] Specifies the initial state of the frame control. If uType is DFC_BUTTON, uState can be one of the following values.
Value Meaning
DFCS_BUTTON3STATE Three-state button
DFCS_BUTTONCHECK Check box
DFCS_BUTTONPUSH Push button
DFCS_BUTTONRADIO Radio button
DFCS_BUTTONRADIOIMAGE Image for radio button (nonsquare needs image)
DFCS_BUTTONRADIOMASK Mask for radio button (nonsquare needs mask)

If uType is DFC_CAPTION, uState can be one of the following values.
Value Meaning
DFCS_CAPTIONCLOSE Close button
DFCS_CAPTIONHELP Help button
DFCS_CAPTIONMAX Maximize button
DFCS_CAPTIONMIN Minimize button
DFCS_CAPTIONRESTORE Restore button

If uType is DFC_MENU, uState can be one of the following values.
Value Meaning
DFCS_MENUARROW Submenu arrow
DFCS_MENUARROWRIGHT Submenu arrow pointing left. This is used for the right-to-left cascading menus used with right-to-left languages such as Arabic or Hebrew.
DFCS_MENUBULLET Bullet
DFCS_MENUCHECK Check mark

If uType is DFC_SCROLL, uState can be one of the following values.
Value Meaning
DFCS_SCROLLCOMBOBOX Combo box scroll bar
DFCS_SCROLLDOWN Down arrow of scroll bar
DFCS_SCROLLLEFT Left arrow of scroll bar
DFCS_SCROLLRIGHT Right arrow of scroll bar
DFCS_SCROLLSIZEGRIP Size grip in bottom-right corner of window
DFCS_SCROLLSIZEGRIPRIGHT Size grip in bottom-left corner of window. This is used with right-to-left languages such as Arabic or Hebrew.
DFCS_SCROLLUP Up arrow of scroll bar

The following style can be used to adjust the bounding rectangle of the push button.
Value Meaning
DFCS_ADJUSTRECT Bounding rectangle is adjusted to exclude the surrounding edge of the push button.

One or more of the following values can be used to set the state of the control to be drawn.
Value Meaning
DFCS_CHECKED Button is checked.
DFCS_FLAT Button has a flat border.
DFCS_HOT Windows 98/Me, Windows 2000/XP: Button is hot-tracked.
DFCS_INACTIVE Button is inactive (grayed).
DFCS_MONO Button has a monochrome border.
DFCS_PUSHED Button is pushed.
DFCS_TRANSPARENT Windows 98/Me, Windows 2000/XP: The background remains untouched.

你可能感兴趣的:(checkbox)