网上下了一个代码教程,是将TStringGrid中添加了checkbox等,但是这些checkbox是绘出来的,不是将Tcheckbox 添加到TStringGrid中 :TfrmMain = class(TForm)
gridOwnerDraw: TStringGrid;在
procedure TfrmMain.gridOwnerDrawDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);中,使用了这样的语句:
...
DrawFrameControl( gridOwnerDraw.canvas.handle, btnRect, DFC_BUTTON, btnState);
...其中 DFC_BUTTON 是Windows.pas 下的function DrawEdge(hdc: HDC; var qrc: TRect; edge: UINT; grfFlags: UINT): BOOL; stdcall;
const
...
DFC_SCROLL = 3;
{$EXTERNALSYM DFC_BUTTON}
DFC_BUTTON = 4;
{$EXTERNALSYM DFC_POPUPMENU}
DFC_POPUPMENU = 5;
...问题:
我添加了个Image1, Pictrue指定为自己作图后美化的checkbox ,我想用Image1来替代DFC_BUTTON,于是就改成了Cardinal(Image1),可绘出来是一个灰色的框,而不是我要的框。后来我查了一下,DFC_BUTTON 本身就是整数,我用1-5都可以绘出来各种系统指定的图形。用大于6的数也是灰色框。
请问,我这种做法对吗?能用自己的Image来代替DFC_BUTTON,这种方法可行吗? 不胜感激!!!注:
{$EXTERNALSYM DrawFrameControl}
function DrawFrameControl(DC: HDC; const Rect: TRect; uType, uState: UINT): BOOL; stdcall; 位于Windows.pas
gridOwnerDraw: TStringGrid;在
procedure TfrmMain.gridOwnerDrawDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);中,使用了这样的语句:
...
DrawFrameControl( gridOwnerDraw.canvas.handle, btnRect, DFC_BUTTON, btnState);
...其中 DFC_BUTTON 是Windows.pas 下的function DrawEdge(hdc: HDC; var qrc: TRect; edge: UINT; grfFlags: UINT): BOOL; stdcall;
const
...
DFC_SCROLL = 3;
{$EXTERNALSYM DFC_BUTTON}
DFC_BUTTON = 4;
{$EXTERNALSYM DFC_POPUPMENU}
DFC_POPUPMENU = 5;
...问题:
我添加了个Image1, Pictrue指定为自己作图后美化的checkbox ,我想用Image1来替代DFC_BUTTON,于是就改成了Cardinal(Image1),可绘出来是一个灰色的框,而不是我要的框。后来我查了一下,DFC_BUTTON 本身就是整数,我用1-5都可以绘出来各种系统指定的图形。用大于6的数也是灰色框。
请问,我这种做法对吗?能用自己的Image来代替DFC_BUTTON,这种方法可行吗? 不胜感激!!!注:
{$EXTERNALSYM DrawFrameControl}
function DrawFrameControl(DC: HDC; const Rect: TRect; uType, uState: UINT): BOOL; stdcall; 位于Windows.pas
解决方案 »
- 用API写的com port实例, 但只有数据量达到256时getoverlappedresult才正常返回
- 单击DBGrid某一行来确实当前行号,并把相关数据显示到Edit中去!
- 切换Windwos用户,Delphi安装的第三方控件为什么不见了,谁能告诉我?在线等....
- dxGrid的Colums合计发生变化,是触发那个事件,,,求助啊。。。。
- sql语句的问题,很简单,送分的
- 关于SubDetail!!100分求救!
- 本人是一个学生,酷爱编程,请问有谁能提供项目给我开发啊。
- 连接两个或两个以上表的Adoquery,不可以修改或插入吗?
- DELPHI HTM文件保存为MHT文件
- 请教一个关于BDE问题?
- Delphi新手求助
- 高手进:关于XML的问题
if (Column-> Field-> FieldName == "abc ")
{
DBGrid1-> Canvas-> FillRect(Rect);
if (Column-> Field-> AsBoolean)
DrawFrameControl(DBGrid1-> Canvas-> Handle, &r,
DFC_BUTTON, DFCS_BUTTONCHECK+DFCS_CHECKED);
else
DrawFrameControl(DBGrid1-> Canvas-> Handle, &r,
DFC_BUTTON, DFCS_BUTTONCHECK);
}