假设用一个DBctrlgrid连接到一个数据集上,在它的上面放置一个DBEDIT控件,和数据集某个字段连接,大家知道程序运行起来,DBctrlGRID控件将在上面根据记录的多少动态创建DBEIDT,将数据依次排列其中,但是我想根据记录的值作为判断条件,指定某个DBEDIT中的字体颜色,就是因为它是动态创建的,所以我也不知道让程序如何找到对应的DBEDIT,我在属性中设置颜色,全都变了,我就是要找到某个动态创建的DBEDIT,然后单独它的字体赋上颜色,怎么办?我折腾了半天,还不行。这几天没有哪个人的回答能够解决问题,郁闷,难道我的运气不好,高手没看到我的帖子?

解决方案 »

  1.   

    if 记录的值 ..你的条件
    then
    ....
    不就可以了
      

  2.   

    我学PASCAL都4年了,还让你教我IF
      

  3.   

    DBctrlgrid
     應變不象你說的, 有几個記錄, 就創建多少個 在它上面的DbEdit!只是創建你設置的多少行而已!!!所以, 你要轉個思路!在dataSet的 afterscroll 之類的事件中判斷, 處理
      

  4.   


    这是一个奇偶行设置颜色的代码。你把条件换成你的条件。就行了。好吧。我没有什么时间帮你就只能这样。有空与我联系。搞不定时再帮你。呵呵。我不要你的分
    with dbgrid1 do
          begin
            if ((state=[gdselected])  or (state=[gdselected,gdfocused])) then
                begin
                canvas.Font.Color:=clyellow;
                canvas.Brush.Color:=clnavy;
                end
             else
             begin
               if datasource1.DataSet.RecNo mod 2<>0 then
                  canvas.Brush.Color:=clwhite
                else
                  canvas.Brush.Color:=$00eaeaea;
             end;
     defaultdrawcolumncell(rect,datacol,column,state);         
          end;
      

  5.   

    唉,上面的代码是对于DBGRID的,我说的是DBCTRLGRID
      

  6.   

    在DBctrlGRID中无法使用Canvas特性,提示不能用Canvas画,恼火
      

  7.   

    不能 单独改一个dbedit的颜色,因为只有一个,尽管你看到很多个,他们的handle是同一个
    最好是改DBctrlGRID中,每一格的背景色,DBctrlGRID里面可以使用DBctrlGRID的Canvas特性
    只是不能直接用
    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;
      

  8.   

    我感谢cll007的回答,似乎离最终答案近了一步,背景色是可以设置了,但是DBEDIT中的字体色还要想想办法呀。
      

  9.   

    procedure TForm1.DBEdit1Enter(Sender: TObject);
    begin
      if DBEdit1.DataSource.DataSet.FieldByName('custno').AsInteger=1231  //换成你的判断条件
         then
           DBEdit1.Font.Color:=clRed else DBEdit1.Font.Color:=clblue;
    end;procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
      Index: Integer);
    begin
      if DBCtrlGrid.DataSource.DataSet.FieldByName('custno').AsInteger=1231  //换成你的判断条件
         then
           DBEdit1.Font.Color:=clRed else DBEdit1.Font.Color:=clblue;
    end;看看上面得代码吧,终于有人启发我了,不过也谢谢你们,分还是要散的