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

delphi – 将图形栏添加到StringGrid col

发布时间:2020-12-15 04:23:06 所属栏目:大数据 来源:网络整理
导读:使用Delphi 2010和TStringGrid组件,我目前显示数据库查询中的五个fild. 这是我正在做的一个简单的例子 //设置网格 procedure TGriddata.FormCreate(Sender: TObject);begin grdMain.Rows[0].commatext:='"One","Two","Three","Four","Five"'; grdMain.ColWid
使用Delphi 2010和TStringGrid组件,我目前显示数据库查询中的五个fild.

这是我正在做的一个简单的例子

//设置网格

procedure TGriddata.FormCreate(Sender: TObject);
begin
 grdMain.Rows[0].commatext:='"One","Two","Three","Four","Five"';
 grdMain.ColWidths[0]:= 50;
 grdMain.ColWidths[1]:= 175;
 grdMain.ColWidths[2]:= 175;
 grdMain.ColWidths[3]:= 100;
 grdMain.ColWidths[4]:= 300;
end;

//在网格中显示数据
//注意,我没有显示我的查询的创建,执行或销毁

procedure TGriddata.load;
begin
 ... 
 grdMain.Cells[0,row]:= FieldByName('one').AsString;
 grdMain.Cells[1,row]:= FieldByName('two').AsString;
 grdMain.Cells[2,row]:= FieldByName('three').AsString;
 grdMain.Cells[3,row]:= FieldByName('four').AsString;
 //draw progress bar here
 ...
end;

其中一列(“五”)需要在col中显示海军蓝色水平条.它还应该显示一些以栏为中心的文本.我没有使用自定义绘图的经验.我设置的哪些属性只能自定义绘制一列并使用其他列的默认绘图?

解决方法

像往常一样将文本添加到单元格中.但是你必须在OnDrawCell事件中绘制这些条形图.将DefaultDrawing保留为原样(默认为True),并通过提前填充来删除这些列中已绘制的单元格文本:
procedure TForm1.grdMainDrawCell(Sender: TObject; ACol,ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Progress: Single;
  R: TRect;
  Txt: String;
begin
  with TStringGrid(Sender) do
    if (ACol = 4) and (ARow >= FixedRows) then
    begin
      Progress := StrToFloatDef(Cells[ACol,ARow],0) / 100;
      Canvas.FillRect(Rect);
      R := Rect;
      R.Right := R.Left + Trunc((R.Right - R.Left) * Progress);
      Canvas.Brush.Color := clNavy;
      Canvas.Rectangle(R);
      Txt := Cells[ACol,ARow] + '%';
      Canvas.Brush.Style := bsClear;
      IntersectClipRect(Canvas.Handle,R.Left,R.Top,R.Right,R.Bottom);
      Canvas.Font.Color := clHighlightText;
      DrawText(Canvas.Handle,PChar(Txt),-1,Rect,DT_SINGLELINE or
        DT_CENTER or DT_VCENTER or DT_END_ELLIPSIS or DT_NOPREFIX);
      SelectClipRgn(Canvas.Handle,0);
      ExcludeClipRect(Canvas.Handle,R.Bottom);
      Canvas.Font.Color := clWindowText;
      DrawText(Canvas.Handle,0);
    end;
end;

有关更多选项,您可以考虑this DrawStatus routine.

(编辑:李大同)

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

    推荐文章
      热点阅读