dxDBGrid改变行的颜色(30分)

  • 主题发起人 主题发起人 boy2002
  • 开始时间 开始时间
B

boy2002

Unregistered / Unconfirmed
GUEST, unregistred user!
当鼠标点第二行的某一格,整个第二行的颜色变成黄色,用来突出选的那格是第二行,当
选第三或其它行,所选行变成黄色,第二行的颜色就变回原来的颜色,如何编程,请写出
程序
 
1.如果有id就好了,用通常改颜色的方法,在afterscroll里invalidate
2.
if (rect.top=(tstringgrid(dbgrid1).cellrect(tstringgrid(dbgrid1).col,
tstringgrid(dbgrid1).row).top)
and (not(gdfocused in state)) then
dbgrid1.canvas.brush.color:=clred;
dbgrid1.defaultdrawdatacell(rect,column.field,state)
 
设置DxdbGrid的HighlightColor的颜色就可以了
不知道我有没有理解错,如果没有就对了
 
to jxhdy2001
接近,但不是,我想要整行,现在只是一格,效果不好,有没有其它方法
 
一个小例子,在dx的CustomDrawCell事件中。
procedure TfrmMaterialCheck.dbDetailGrdCustomDrawCell(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
var AText: String; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean);
var fTemp: Single;
begin
if AText = '' then exit;
if (AColumn.Caption = '盘亏数量') or (AColumn.Caption = '盘亏金额') then
begin
try
fTemp := StrToFloat(AText);
except
end;
if fTemp > 0 then
AFont.Color := clRed;
end
else if (AColumn.Caption = '盘盈数量') or (AColumn.Caption = '盘盈金额') then
begin
try
fTemp := StrToFloat(AText);
except
end;
if fTemp > 0 then
AFont.Color := clLime;
end;
end;
 
to zhangkan
我是改变选择行的颜色,不是根据条件改变颜色,怎样知道选择了那一行

DBGrid怎样改变行的颜色
 
至于dxDBGrid,我没有亲自修改过如何改变某行的颜色,但是我修改过Delphi自带的
dbgrids.pas单元,使其符合某种条件的某行改变颜色。 我想应该和dxDBGrid都是差不多
的吧!
在Delphi的dbgirds.pas当中,可以通过修改TCustomDBGrid类当中的DrawCell过程实现
在这个DrawCell过程中,你可以查找的如下内容:

…… ……
with Canvas do
begin
DrawColumn := Columns[ACol];
if not DrawColumn.Showing then exit;
if not (gdFixed in AState) then
begin
Font := DrawColumn.Font;
Brush.Color := DrawColumn.Color;
{你可以在这个begin和end之间,通过某种条件使Brush的Color为别的颜色
当然你也可以使Font也改变,从而使这一行颜色不同,其中DrawColumn.Color
使默认得颜色}
end;
…… ……

我在上面的代码中说得很清楚了!
祝您好运!

对了,顺便告诉您一声,应该把Delphi的这个单元Copy到别处修改,然后让您的程序
引用你修改过的这个DBGrid的单元,不然不起作用! ^_^
 
你再设置DxDbGrid的OptionsBehavior中的edgoMultiSelect属性为True就可以了
 
是edgoRowSelect属性
你们这群菜鸟,整天就知道泡妞!!!!
 
同意 Celestial dog 观点:
就是是edgoRowSelect属性,多动动手嘛,too懒
 
在drawcellparam事件写代码
 
下面的自已定义行颜色,及选中的颜色与字体

procedure TClientFrm.ClientGridCustomDrawCell(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
var AText: String; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean);
begin {画表格}
if not ANode.HasChildren then {这句在有分组时用}
begin
if ANode.Index mod 2 = 0 then {颜色间隔}
AColor := {颜色值}
else
AColor := {颜色值}

if ASelected then {选中的行}
begin
AFont.Color := {颜色值}
AColor := {颜色值}
end;
end;
end;
 
接受答案了.
 
后退
顶部