gpt4 book ai didi

delphi - 将图形栏添加到 StringGrid col

转载 作者:行者123 更新时间:2023-12-03 14:56:52 25 4
gpt4 key购买 nike

使用 Delphi 2010 和 TStringGrid 组件,我当前显示数据库查询中的五个字段。

这是我正在做的事情的简单示例

//设置网格

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;

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

最佳答案

像平常一样将文本添加到单元格中。但您必须在 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.Left, R.Top, R.Right, R.Bottom);
Canvas.Font.Color := clWindowText;
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);
end;
end;

Custom drawn bars in StringGrid

如需更多选项,您可以考虑this DrawStatus routine .

关于delphi - 将图形栏添加到 StringGrid col,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13032146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com