- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使 StringGrid 中的文本居中。经过一番研究,我想出了这个由其他人发布的函数,当在 DefaultDraw:False 上使用时应该可以工作。
procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
S: string;
SavedAlign: word;
begin
if ACol = 1 then begin // ACol is zero based
S := StringGrid1.Cells[ACol, ARow]; // cell contents
SavedAlign := SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER);
StringGrid1.Canvas.TextRect(Rect,
Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 2, S);
SetTextAlign(StringGrid1.Canvas.Handle, SavedAlign);
end;
end;
但是,如果我设置 DefaultDraw:False,StringGrid 就会出现故障。
函数中用文本填充 StringGrid 的行是
Sg.RowCount := Length(arrpos);
for I := 0 to (Length(arrpos) - 1) do
begin
sg.Cells[0,i] := arrpos[i];
sg.Cells[1,i] := arrby[i];
end;
arrpos 和 arrby 是字符串数组。 sg 是 StringGrid。
之后我需要执行文本以显示在单元格的中心。
更新
对于那些遇到类似问题的人来说,这段代码的关键问题之一是 if if 语句
if ACol = 1 then begin
该行意味着它将仅运行第 1 列的代码,例如第二列,因为 StringGrid 是从 0 开始的。您可以安全地删除 if 语句,它将执行并工作,而无需禁用默认绘图。
最佳答案
这在我的测试中有效
procedure TForm1.sgDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
var
LStrCell: string;
LRect: TRect;
begin
LStrCell := sg.Cells[ACol, ARow]; // grab cell text
sg.Canvas.FillRect(Rect); // clear the cell
LRect := Rect;
LRect.Top := LRect.Top + 3; // adjust top to center vertical
// draw text
DrawText(sg.Canvas.Handle, PChar(LStrCell), Length(LStrCell), LRect, DT_CENTER);
end;
关于delphi - OnDrawCell 中心文本 StringGrid - Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720255/
我在使用 TStringGrid 和弹出菜单时遇到问题 我想知道从弹出菜单中选择一个项目时上次处于事件状态的单元格的行/列。但是,当我单击弹出菜单时,StringGrid.Row 返回为 -1。 我试
如何获取 stringgrid 中选定单元格或范围的总和值?请注意,有时这些单元格包含字符串值! 我尝试了GridCoord,但它效果不佳,因为有时会有“隐藏列”。 procedure TMainSh
我想将备忘录的内容复制到 TStringGrid。 如果字符串之间有空格或间隙,则应将该单词添加到 StringGrid 中其自己的单元格中。 因此,假设我的自动换行备忘录包含如下信息: 如何将该信息
我想以自动换行格式在字符串网格单元格中显示一个长字符串,并找到了以下代码来执行此操作: procedure TForm1.StringGrid1DrawCell(Sender: TObject; AC
我正在这样做: procedure TForm1.Button1Click(Sender: TObject); var dtStart: TDateTime; I: Integer; begin
我在网上找到了很多解决方案,但它们都不起作用,因为 StringGrid1.ColumnCount 属性是只读的。我正在使用 Delphi 10 Seattle。 我有一个 StringGrid1,我
我想知道如何以编程方式确定字符串网格的单元格中的数据已被修改? 我在表单中有一个字符串网格。 stringgrid 的数据是从数据库加载的。如果用户修改了数据,我想更改数据库中的数据。 请分享代码。
我在我的应用程序中使用stringgrid。数据从数据库(后端mysql)获取并显示在stringgrid中。 我想在每行的状态单元格中插入图像。即 if status =online t
嗨,有谁知道是否可以将图片显示为字符串网格的背景,或者是否有人知道任何可以执行此操作的免费网格组件。 谢谢 科林 最佳答案 您可以使用支持所有者绘制的TDrawGrid(或TStringGrid),并
我尝试将数据从 StringGrid 插入到 Oracle DB 表中,我尝试如下。 function TfrmMapping.LoadtoTable: Boolean; var I, J: In
我必须将 StringGrid(其单元格)中的文本居中对齐,并且我正在使用您在此处看到的代码。我在另一个答案中找到了它,并编辑了一些内容。 procedure TForm1.StringGrid1Dr
我在 Delphi 7 中有一个字符串网格,有 0..N 行。有一个列表框,其中包含从 0..N 开始的数字如果用户单击列表框 number 中的任何数字,则应在字符串网格上选择该行号。 所以我有这个
在 Delphi 2010 中,我需要显示一个网格,该网格具有大约 15 列 x 5 行的水平滚动条。 我选择使用 StringGrid。 但是,当鼠标按钮向下拖动水平滚动条时,我希望网格实时滚动。
我一直在寻找解决方案,但没有任何运气。有谁知道一个简单的方法来做到这一点?例如,我想拉伸(stretch)网格的第二列以适应网格的宽度! 最佳答案 使用 ColWidths 属性,如下所示: with
任何人都可以为 Delphi 推荐一个好的 stringgrid 组件,它可以像 Microsoft Excel 一样处理每个单元格上的注释吗?我正在网上搜索,但还没有找到太多,如果这里有人使用过类似
我正在重写字符串网格的OnDrawCell。在某些情况下,我想在系统进行绘图时使用用于所选行的常规 TColor(无 OnDrawCell)。 那是什么颜色? clXXX ? 最佳答案 在 Delph
使用 Delphi 2010 和 TStringGrid 组件,我当前显示数据库查询中的五个字段。 这是我正在做的事情的简单示例 //设置网格 procedure TGriddata.FormCrea
我的表单中有一个 StringGrid,当我按下 Button1 时,我会在该网格内移动一些单元格。这是一个例子: 当我按下Button1时,我从情况A转到情况B。但我也希望能够做相反的事情:我的意思
我有一个 StringGrid,它能够使用 OnDraw 方法绘制新线。 它工作正常,但现在我希望用户可以使用键盘输入新行。目前,必须将多行文本复制粘贴到 StringGrid 中。 每次按下 VK_
在 StringGrid 组件后代中,我想根据单元格的值更改弹出提示消息。我的编码: procedure TForm.GridMouseEnterCell(Sender: TObject; ACol,
我是一名优秀的程序员,十分优秀!