小问题: 如何去掉DBGrid中被选中的Cell的深蓝色背景?(30分)

  • 主题发起人 主题发起人 Schiesser
  • 开始时间 开始时间
S

Schiesser

Unregistered / Unconfirmed
GUEST, unregistred user!
如题.
要求: 1.不用控件.
2.Cell被选中时, 鼠标变成Hand, 其它情况仍为Arrow.
 
去掉背景很简单,只要先将dbgrid的Defaultdraw属性设为False,然后在
Dbgrid的DrawColumnCell事件里写下列代码:
dbgrid1.Canvas.brush.color:=dbgrid1.Color;
dbgrid1.Canvas.FillRect(rect);
dbgrid1.Canvas.font.color:=clblack;
dbgrid1.Canvas.TextOut(rect.left,rect.top,column.Field.AsString);

但是鼠标光标比较麻烦,因为Dbgrid没有MouseMove事件,无法随时切换鼠标光标.
除非重新继承一个新的Dbgrid控件出来.
 
加点分吧,30分太少.给解决全部问题. :)
 
算了,没多少时间了.
set dbgrid1.defaultdrawing:=false;

then

var myrect:trect;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if State=[gdselected..gdfocused] then begin
DBGrid1.canvas.brush.style:=bsclear;
DBGrid1.Canvas.Font.Color:=clblue;
myrect:=rect;
end;
DBGrid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if PtInRect(myrect,point(x,y)) then
DBGrid1.Cursor:=crHandPoint
else
DBGrid1.Cursor:=crDefault;
end;

end.

50分如何,主要是最近分都给cytown抢去了,得来真是不易啊.又不愿去得捧场分,没办法啊.
 
2不太明白, 如果是用键盘选中的话, 鼠标变不变呢?
 
menxin:

疑问一:dbgrid没有mousemove事件!
必需在formcreate时用TStringGrid(Dbgrid1).OnMouseMove强制定义!

疑问二:不必保留一个全局变量myRect,只要在OnMouseMove事件里这样写:
var gc:TGridCoord;
begin
gc:=dbgrid1.MouseCoord(x,y);
if (gc.x=tstringgrid(dbgrid1).col) and (gc.y=tstringgrid(dbgrid1).row) then
dbgrid1.Cursor:=crhandpoint
else
dbgrid1.Cursor:=crdefault;
end;

疑问三:遗憾的是,设置dbgrid的Cursor属性不起作用! :-(
 
不急, 先试试. 如果好用, 再给分!
 
to cAkk:

如何强制定义?能否给个例子?
 
D5的DBGrid有OnMouseMove呀?!
 
我用的是D4.

D5有就更好了.

强制定义就是TStringGrid(DBGrid1).OnMouseMove:=myMouseMove;
 
BTW: 你设置dbgrid的Cursor有作用吗? 我的不起作用,很奇怪. :-(
 
起作用啊!
 
BTW: DrawColumnCell事件是由什么触发的?‘Cell被点击’还是‘Selection改变’?或者是‘Refresh’?
 
我用的是d5,我答问题就是再有把握也是要试一下的,怎么会骗你呢? :)

help中说得很明白,DrawColumnCell事件是在需要repaint或者说是在state改变时触
发的.另外我觉得用myrect保存一下比较简单明了,当然可以用cAkk大侠的方法.
 
问题:为什么在DBGrid失去焦点后颜色又变回去了?
 
>>为什么在DBGrid失去焦点后颜色又变回去了?
变回什么颜色了? 难道一个cell失去焦点之后,反而变回蓝色了??????

我的代码经过调试,,没有问题后才贴出来的.
 
鼠标已经解决了。
cell:将焦点cell绘制成蓝色字体,当焦点移到edit时,原蓝色字体的cell变成黑色字体...
 
To menxin:

你的方法存在变颜色的问题;

To cAkk:

鼠标已经解决,绘制Cell的方法呢?

:-)
 
后退
顶部