熟悉AdvStringGrid的请进(50分)

E

esimon

Unregistered / Unconfirmed
GUEST, unregistred user!
客户要求在Cell内如果没有输入内容,则Cell颜色为黄色,否则为白色
我写了如下代码:
procedure TForm21.AdvStringGrid2DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if (ARow>0) and (ACol>0) and (AdvStringGrid2.Cells[ACol,ARow]<>'') then
begin
with Sender as TAdvStringGrid do
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect);
Canvas.TextRect(Rect,Rect.Left+2,Rect.Top+2,AdvStringGrid2.Cells[ACol,ARow]);
end;
end;
textout把本来多行显示的东西都写到一行了,能解决吗?
end;
 
我不明白你干吗非要用canvas这种方式来涂颜色?
简单的方法是:
(Sender as TAdvStringGrid).Colors[Acol,ARow]:=clWhite;
不过在OnDrawCell事件中这样写会导致TadvStringGrid有闪烁现象。解决的办法是
把TadvStringGrid初始化成黄颜色(Tadvstringgrid.color:=clYellow),然后在
TadvstringGrid的OnCellValidate事件中编写如下代码:
if Value<>'' then
(Sender as TAdvStringGrid).Colors[col,Row]:=clWhite
else
(Sender as TAdvStringGrid).Colors[col,Row]:=clYellow;
这样就不会有闪烁现象了。
 
你的方法不管用啊
修改数据后cell的颜色不变
 
你不会是在OnDrawCell和OnCellValidate中都写了同样的代码吧?
如果在代码中直接对cells进行操作,记得要手工调用OnCellValidate代码。
 
当然不是
已经解决了
设置EnableGraphics:=True就行了
3x
不过表格里面的内容是从数据库中读出来,然后写入表格中的
那个cellvalidate只有在改变数据的时候才触发,那些从数据库重读出来的数据背景还是黄的
 
完美解决 [:D]
 
老大千万别这样讲
我的advstringgrid是1.94的,刚下了一个新版的,发现EnableGraphics这个属性已经不存在了
呵呵
多亏了老大你,我才能解决这个问题
多谢多谢了
 
顶部