我想实现这样的效果,用鼠标单击dbgrid一行,选择一条,颜色变为篮色,在选择一条这条变为篮色,上面选的也还是篮色... 

解决方案 »

  1.   

    我想实现这样的效果,用鼠标单击dbgrid一行,选择一条,颜色变为篮色,在选择一条这条变为篮色,上面选的也还是蓝色... 
    这时dbgrid上应该有2条是蓝色的
      

  2.   

    定义一个数组(存行号),在stringgrid的onselectcell事件里面,读取AROW存到数组里.
    然后在DrawColumnCell事件里做个循环读取数组画蓝色就行了
      

  3.   

    如果仅仅2行的话,对应组件Options属性里面设置就可以满足你地需求了,假如要所有点击的行都选中的话,就要重画了。
      

  4.   


    我需要在dbgrid里面实现
    可以贴出相关代码么?
    谢谢...
      

  5.   


    //....var
      Form1: TForm1;
      RowSel: Array of String;//....procedure TForm1.FormCreate(Sender: TObject);
    begin
      setlength(RowSel,0);
    end;procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
      SetLength(RowSel,length(RowSel)+1);
      RowSel[high(RowSel)]:= ADOQuery1.FieldByName('表里唯一的列').AsString;  //即值不会重复
    end;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      i: integer;
    begin
      for i:= Low(RowSel) to High(RowSel) do
        if ADOQ.Fields[0].AsString = RowSel[i] then
          DBGrid1.Canvas.Font.Color:= clBlue;
      DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    end;//....
      

  6.   

    ADOQ.Fields[0].AsString = RowSel[i] 这里改回到 ADOQuery1.FieldByName('表里唯一的列').AsString = RowSel[i]