关于stringgrid的问题(100分)

  • 主题发起人 浪里白条
  • 开始时间

浪里白条

Unregistered / Unconfirmed
GUEST, unregistred user!
在使用stringgrid时,需要设置stringgrid任一或多个单元格的颜色,请问如何做
在onDrawCell事件中写时,不符合要求,因为要在程序中动态的改变某个(多个)格子的颜色
用stringgrid。canvas真充颜色,那是对整个stringgrid 的操作,也很不方便
不知可否对某一单元格进行封装,这样便可以任意设置其属性了,不知怎么做,
或完成类似的功能,请各位大侠指点
对了,还由于是kylix下开发的,第三控件不太好使用,我不想使用此方法
 
那假如不是在kylix下
在delphi下怎么实现?
 
>>在onDrawCell事件中写时,不符合要求,因为要在程序中动态的改变某个(多个)格子的颜色
你可以根据绘制的Cell的位置判断是否采用特殊颜色。eg:
procedure TInputGlobalAForm.StringGrid1DrawCell(Sender: TObject;
ACol,
ARow: Integer;
Rect: TRect;
State: TGridDrawState);
var
R:TRect;
begin
if (ACol>=3) and (ARow>0) then
//在这里过滤
begin
R:=Rect;
with StringGrid1.Canvasdo
begin
Brush.Color:=$00D0D0D0;
//你完全可以做一个x,y=>color的二维映射表
FillRect(R);
TextOut(R.Left,R.Top+3,StringGrid1.Cells[ACol,ARow]);
end;
end;
end;
 
如果是不连续的区域?
 
>>不连续的区域
有几种解决方法:
1.我在上面说过的“可以做一个x,y=>color的二维映射表”——二维数组,存放TColor,然后
Brush.Color:=BkColor[ACol,ARow];——第三方控件的实现方法也不过如此
2.如果颜色和Cell的内容有比较简单的关系,可以:
if StrToInt(StringGrid1.Cells[ACol,ARow])>500 then
Brush.Color:=clRed;
 
用一个链表保存stringgird的cell的位置及颜色等等
到时你可以判断一下!再执行creation-zy的不就搞定?
 
多人接受答案了。
 
顶部