加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi:如何将Image放入DBGrid Title?

发布时间:2020-12-15 09:30:10 所属栏目:大数据 来源:网络整理
导读:如何将 Image放在TDBGrid列标题中? 我试过了,但是当我把鼠标放在标题上时,图像一直显示并且不断消失. procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);begin if C
如何将 Image放在TDBGrid列标题中?

我试过了,但是当我把鼠标放在标题上时,图像一直显示并且不断消失.

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Column.FieldName = order then
  Begin
    Column.Title.Font.Color := clBlue;

    //if gdFixed in State then // didn't work..  I don't know why!!!

    if Rect.Top < 30 then 
      ImageList1.Draw(DBGrid1.Canvas,Rect.Right-18,Rect.Top-18,0);

  end
  else 
    Column.Title.Font.Color := clWindowText;
end;

解决方法

您可以为TDBGrid使用插入器类并覆盖DrawCell过程.

type
  TDBGrid = Class(DBGrids.TDBGrid)
  private
    FIcon:TIcon;
    FImageList: TImageList;
    procedure SetImageList(const Value: TImageList);
    Destructor Destroy;override;
  published
    procedure DrawCell(ACol,ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
    Property Imagelist: TImageList read FImageList Write SetImageList;
  End;

  TForm2 = class(TForm)
    .......

implementation


{$R *.dfm}
{ TDBGrid }

destructor TDBGrid.Destroy;
begin
  if Assigned(FIcon) then FIcon.Free;
  inherited;
end;

procedure TDBGrid.SetImageList(const Value: TImageList);
begin
  FImageList := Value;
  FreeAndNil(FIcon);
  if Assigned(FImageList) then
    begin
    FIcon := TIcon.Create;
    FImageList.GetIcon(0,FIcon);
    end;
end;

procedure TDBGrid.DrawCell(ACol,ARow: Integer; ARect: TRect; AState: TGridDrawState);
var
  L_Col: Integer;
begin
  if dgIndicator in Options then
    L_Col := ACol - 1
  else
    L_Col := ACol;

  inherited;
  if Assigned(FIcon) and (L_Col > -1) and (ARow = 0) and (Columns[L_Col].FieldName = 'ID') and (gdFixed in AState) then
  begin
      Canvas.Draw(ARect.Right - 18,ARect.Bottom - 18,FIcon);
      //FImagelist.Draw(Canvas,ARect.Right - 18,0); // would cause more flickering
  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  DBGrid1.DoubleBuffered := true;
  DBGrid1.Imagelist := ImageList1;
  ReportMemoryLeaksOnShutDown := true;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读