-----> DBctrlgrid问题,高手看了别跑!!(200分)

  • 主题发起人 jiangopen
  • 开始时间
J

jiangopen

Unregistered / Unconfirmed
GUEST, unregistred user!
假设用一个DBctrlgrid连接到一个数据集上,在它的上面放置一个DBEDIT控件,和数据集某个字段连接,大家知道程序运行起来,DBctrlGRID控件将在上面根据记录的多少动态创建DBEIDT,将数据依次排列其中,但是我想根据记录的值作为判断条件,指定某个DBEDIT中的字体颜色,就是因为它是动态创建的,所以我也不知道让程序如何找到对应的DBEDIT,我在属性中设置颜色,全都变了,我就是要找到某个动态创建的DBEDIT,然后单独它的字体赋上颜色,怎么办?我折腾了半天,还不行。
请注意不是DBGRID而是DBctrlgrid控件,不亲手实验的人,不要妄发结论。
 
for i:=0 to DBctrlgrid.ControlCount-1 do
begin
if Controls.InheritsFrom(TWinControl) then
begin
if (Controls as Tdbedit).name:=xx then
(Controls as Tdbedit).font.color:=xx;
end;
end;
//猜的,错了别骂我。
 
不行啊,怡.梦 ,你的代码根本行不通
 
var
I: Integer;
aa:string;
Temp: TComponent;
begin
with form1 do begin
for I := ComponentCount - 1 downto 0 do
begin
Temp := Components;
if (Temp is Tedit) then
begin
aa:= (Components AS Tedit).name;
if aa ='Edit6' then
(Components AS Tedit).Color := clred;
end;
end;
end;
end;
 
我也曾经尝试过,不过没有做到,
我想,如果研究一下它的源代码,或许就有办法了
 
怡.梦, 动态创建的DBEDIT的句柄都是一样的,你这样一设置全部都变了,还是不行,
我采用查找控件的方法还不行的,道理和你的差不多,达不到目的
 
下面的代码是一个高手写的,但它改变的是DBCTRLGRID动态创建的Panel的背景色,是最有意义的代码,似乎可以给你们带来启发,但是要单独修改DBEDIT的字体颜色,现在还是不行
procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
Index: Integer);
begin

if DBCtrlGrid.DataSource.DataSet.FieldByName('stor_id').AsInteger>7067 then
begin
DBCtrlGrid.Canvas.Brush.Color:=clPurple;
DBCtrlGrid.Canvas.Rectangle(DBCtrlGrid.Canvas.ClipRect)
end
else
begin
DBCtrlGrid.Canvas.Brush.Color:=clred;
DBCtrlGrid.Canvas.Rectangle(DBCtrlGrid.Canvas.ClipRect)
end;

end;
 
DBCtrlGrid上的DBEDit看起来是有多少条记录就创建了多少个,其实还只是一个,位于记录激活的Panel上,其他的全是图片,所以用Components去枚举永远找不到。
解决的办法是在OnPaintPanel事件中修改你的颜色。
 
我这样一设置全部怎么会全都变了,动态创建的控件的NAME肯定不一样啊。当NAME=某个值,的时候,这个控件才变色。
if aa ='Edit6' then
(Components AS Tedit).Color := clred
 
TYZhang, 你帮我想想办法吧。
怡.梦, 你的办法确实不行呀,你可以试一试
 
procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid; Index: Integer);
begin
if DBCtrlGrid.DataSource.DataSet.FieldByName('DayQty').AsString<>'1' //换成你的判断条件
then DBEdit1.Font.Color:=clRed else DBEdit1.Font.Color:=clBlack;
end;
 
TYZhang,你的回答已经离成功很近了,只是点中它的时候,已经改变得颜色又会变回去
 
补充,在DBEDIT的ONENTER事件中加入类似下面的代码就更好了,谢谢 TYZhang 的启发
if DBEdit1.DataSource.DataSet.FieldByName('custno').AsInteger=1231 //换成你的判断条件
then
DBEdit1.Font.Color:=clRed else DBEdit1.Font.Color:=clblue;
 
我把仅有的200分都用完了,那么多的人在摇头,那么多的人都说难,包括一些高手,原来前方是绝路,希望在拐角,哈哈。有些人还要让我从DBctrlgrid中派生一个子类来控制,想起来恐怖呀!我在CSDN发了累计300分,真是挥霍呀!
 
顶部