加图标的时候定义图标的宽度为列宽的一部分,列宽剩下的部分重新输出就行了。只用过dbgrid ,没用过dbgrideh,无法给出代码。

解决方案 »

  1.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      filename: string;
    begin
        if Pos('B', UpperCase(Column.FieldName)) > 0 then begin
          filename := ExtractFilePath(Application.ExeName) + 'image\' + sstr + '.gif';
          Image1.Picture.LoadFromFile(filename);
          DBGrid1.Canvas.Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic);
          DBGrid1.Canvas.TextOut(Rect.Left + 32, Rect.Top + 2, 'TEST');
        end;
    end;
    文字使用TextOUT显示
      

  2.   

    楼上的是可以实现,但是我只要点一下dbgrid就会显示原来的数据,为什么会这个样子??
      

  3.   

    楼上的是可以实现,但是我只要点一下dbgrid就会显示原来的内容,这是为什么呢??
      

  4.   


    是改变了显示,虽然dataset中的数据没有改变,可是grid的怎么也没有改变,我点grid应该是grid的数据吧?
      

  5.   

    很简单,dbgrideh本来就支持列图标,首先将图标装入一个ImageList,编辑DbgridEh1的列,将所有字段加入,如过你想在那个字段前面显示图标,则对该列进行以下设置:
    该列的ImageList设置为存放图标的ImagesList,NoInKeyListIndex设置为你要显示的图标的索引,ShowImageAndText设置为True。
      

  6.   

    或者  ADOQuery1.Close;
      ADOQuery1.SQL.Text:='select * from syscolumns';
      ADOQuery1.Open;
      with DBGridEh1.Columns[0] do//你要显示图标的列
      begin
        ImageList := ImageList1;
        NotInKeyListIndex := 0;
        ShowImageAndText := True;
      end;