问题标签 [tstringgrid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
445 浏览

delphi - 为什么 InvalidateRow/InvalidateColum 不起作用?

InvalidateRow 和 InvalidateColum 不适用于 TStringGrid。这些方法不会使整个 Row/Col 无效。

InvalidateGrid 始终有效(因此在找到错误原因之前,这可能是一个肮脏的解决方法)。
在某些情况下(它似乎是随机的) InvalidateRow 和 InvalidateColum 似乎也可以工作。更新:我发现了哪些情况会触发这个bug:网格必须大于可见区域并且位置在视图之外。

有任何想法吗?

德尔福 7、Win 7 32 位

0 投票
3 回答
6233 浏览

delphi - 水平滚动条移动时StringGrid的实时更新?

在 Delphi 2010 中,我需要显示一个具有大约 15 列 x 5 行的水平滚动条的网格。

我选择使用 StringGrid。

但是,当鼠标按钮向下拖动水平滚动条时,我希望网格实时滚动。

看起来,StringGrid 组件不会实时滚动。它会一直等到释放鼠标按钮,然后再更新列并在必要时滚动。

此外,水平滚动条按钮(就是所谓的)与列数不成比例。对于底部行上的向下箭头移动到右侧下一列的顶部...

这些似乎是常见的需求,所以我很惊讶没有在 TStringGrid 中找到它们。

关于解决这两个问题的方法有什么建议吗?我可以使用 DbGrid 或其他标准组件,但如果可以避免的话,我的偏好是不使用商业网格。而且我不会使用共享软件或免费软件...

TIA

0 投票
3 回答
682 浏览

delphi - 用于主题化 StringGrid 的组件,例如 ThemedDBGrid

存在任何类似的组件来为 stringrid 设置主题,例如 与 delphi 5 兼容的ThemedDBGrid组件。

0 投票
3 回答
2263 浏览

delphi - 从 OnDrawCell 事件外部绘制 TStringGrid 单元格,这可能吗?

有什么方法可以在不使用 OnDrawCell 事件的情况下在 Delphi 的 TStringGrid 上绘制特定单元格,例如,如果我单击一个按钮,指定的单元格将根据其内容进行绘制。

0 投票
1 回答
13396 浏览

delphi - OnDrawCell 中心文本 StringGrid - Delphi

我试图让我的 StringGrid 中的文本居中。经过一些研究,我想出了其他人在这里发布的这个函数,当在 DefaultDraw:False 上使用时应该可以工作。

但是,如果我设置 DefaultDraw:False,StringGrid 就会出现故障。

用文本填充 StringGrid 的函数中的行是

arrpos 和 arrby 是字符串数组。sg 是字符串网格。

之后我需要执行文本以显示在单元格的中心。

更新

对于那些遭受类似问题的人来说,这段代码的关键问题之一是 if 语句

该行意味着它将仅运行第 1 列的代码,例如,第二列,因为 StringGrid 是基于 0 的。您可以安全地删除 if 语句,它将执行和工作,而无需禁用默认绘图。

0 投票
6 回答
5541 浏览

delphi - 为什么我的代码这么慢?

热门(抱歉)答案,适用于那些没有时间进入但可能有类似问题的人。

规则#1,一如既往,尽可能多地移出循环。
2、将 TField var := ADODataSet.FieldByname() 移出循环 3、ADODataSet.DisableControls(); 和 ADODataSet.EnableControls(); 在循环 4 周围,每行上的 stringGrid.Rows[r].BeginUpdate() 和 EndUpdate() (不能在控制时执行)每个都缩短了几秒钟,我把它归结为“比眼睛快可以看到”通过改变

放在stringGrid.RowCount := ADODataSet.RecordCount;循环之前

+1 并衷心感谢所有提供帮助的人。

(现在我会去看看我能做些什么来优化绘制 TChart,这也很慢 ;-)


表中有大约 3,600 行,这需要 45 秒来填充字符串网格。我究竟做错了什么?

更新:

0 投票
7 回答
14976 浏览

delphi - 如何检测用户何时完成编辑 TStringGrid 单元格?

当用户完成输入数据时,我想在字符串网格中返回单元格的内容。当按下键盘上的回车键,或者单击或双击另一个单元格时,用户就完成了。

在 Lazarus 中有 FinishedCellEditing 的方法,但在 Delphi 中没有。如何在 Delphi 中检测到它?

0 投票
2 回答
9735 浏览

image - Delphi - 在字符串网格中绘制到选定单元格的画布 - 可能吗?

我想在字符串网格中的单元格的画布上绘制。这将位于预加载到字符串网格中的图像之上。

我有什么

目前,我不是在图像顶部绘制,而是加载第二个透明图像,然后在单元格顶部绘制。这是我使用的代码,它可以工作。

该过程首先绘制引用到单元格的图像。如果存在“玩家”,它将在顶部绘制玩家块。因为“播放器”图像是透明的 .PNG 图像,所以下面的原始图像仍然可见。

我想要的是

这种方法的缺点是由于图像是恒定的,“玩家棋子”位于单元格内的设定位置。我希望能够根据选择的单元格在单元格内的不同位置绘制“播放器”。我有大约 200 个单元格,所以我真的不想手动创建那么多具有不同位置的图像。

我试过的

我尝试在 drawcell 过程中直接绘制到 stringgrid 的画布,但这似乎引用了整个 stringgrid 而不是正在绘制的当前单元格。

我看过但我似乎无法引用当前单元格的画布 - 我认为它不存在?

我尝试的下一件事是绘制到临时图像,然后将图像绘制到单元格。

这在一定程度上起作用,它确实将图像绘制到单元格,但是图像具有不透明的背景/画布,因此单元格是白色的,上面有圆圈,下面的图像不可见。我做了一些研究,但找不到使图像的画布透明的方法。

我能想到的最后一件事是编写一个算法来定位当前单元格的左上角,然后从那里直接绘制到画布上,但这可能会很麻烦,并且在重绘字符串网格时会产生问题。

任何人都可以看到解决我的问题的方法吗?

在此先感谢,乔希

0 投票
3 回答
5731 浏览

image - Delphi StringGrid 以图片为背景

嗨,有谁知道是否可以将图片显示为字符串网格的背景,或者是否有人知道可以执行此操作的任何免费 Grid 组件。

谢谢

科林

0 投票
3 回答
24669 浏览

delphi - 在 Delphi 的 TStringGrid 中放置一个 TCheckBox

我想在某个列的每个单元格中放入TCheckBox一个在 Delphi 中的内部。TStringGrid我正在使用德尔福 XE。