- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 StringGrid,它能够使用 OnDraw 方法绘制新线。
它工作正常,但现在我希望用户可以使用键盘输入新行。目前,必须将多行文本复制粘贴到 StringGrid 中。
每次按下 VK_RETURN 时,StringGrid 都会离开编辑模式。我必须做什么才能避免这种情况?
对于新线路,我希望使用 Ctrl+Return,就像在 Skype 中一样。
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN) and (ssCtrl in Shift) then // Ctrl+Return = New Line
begin
// TODO: Do NOT cancel edit mode
// TODO: Insert #13#10 at current cursor position
end;
end;
最佳答案
TStringGrid 的内置单元格编辑器不支持多行文本(它是 TCustomMaskEdit
的后代,它是单行文本)。您将必须使用单独的 UI 控件,例如 TMemo
,用于编辑多行文本。有几种不同的方法可以实现这一点:
禁用网格的内置编辑器(从网格的 goEditing
属性中删除 Options
标志)并放置 TMemo
附近TStringGrid
。当用户选择一个单元格(并且可以选择单击按钮/菜单)时,将其当前文本分配到备忘录中。如果用户进行任何更改(并且可以选择单击另一个按钮/菜单),请将新文本分配回单元格。
上述的变体:设计一个单独的 TForm
有一个 TMemo
和保存按钮。当用户选择一个单元格(或按下按钮/菜单)时,将该单元格的当前文本分配给表单的备忘录,然后通过调用其 ShowModal()
显示表单。方法。如果用户单击“保存”按钮,则通过设置其 ModalResult
来关闭表单。属性至mrOk
。如果ShowModal()
返回mrOk
,将备忘录的当前文本分配给正在编辑的单元格,然后 Invalidate()
网格触发重绘。如果ShowModal()
返回任何其他内容,不执行任何操作。
上述内容的变体:启用网格的内置编辑器,并如上所述设计一个单独的表单,但然后配置 TStringGrid
自动触发表单,而无需以任何方式更改 UI 的其余部分。
从 TStringGrid
派生一个新类并让它覆盖虚拟 GetEditStyle()
方法返回esEllipsis
(默认返回 esSimple
),并覆盖虚拟 CreateEditor()
方法返回 TInplaceEditList
的新实例-派生类(默认返回 TInplaceEdit
对象)。这将导致单元格在编辑时显示按钮而不是编辑字段。
有你的TInplaceEditList
-派生类拥有您的 Form 的一个实例,然后覆盖虚拟 UpdateContents()
方法检索当前单元格文本并将其分配给表单的备忘录,并覆盖虚拟 DoEditButtonClick()
方法以模态方式显示 Form 并响应 ShowModal()
的返回值相应地。
关于delphi - 在 StringGrid 中插入新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34667709/
我在使用 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,
我是一名优秀的程序员,十分优秀!