gpt4 book ai didi

delphi - 具有编辑和范围选择功能的 TStringGrid?

转载 作者:行者123 更新时间:2023-12-03 15:29:52 28 4
gpt4 key购买 nike

题:

任何人都可以在任何地方指向一篇文章或代码示例,以了解如何
在 TStringGrid 中提供编辑和范围选择?

是的,我知道有第三方网格可以做到这一点,但它是
令人沮丧的是内置网格缺乏这种基本功能。

背景:

期望能够同时编辑网格中的单元格是很正常的,
以及选择一系列单元格,例如复制操作。

交付时,TStringGrid 不会这样做。要么/要么。事实上,
文档告诉我们有关网格选项的信息,“当 goEditing 包含在
选项,goRangeSelect 没有效果”。

但是,看起来可以进行编辑和范围选择
无论如何在 TStringGrid 中!!!通过小心使用mousedown,
mouseup, selectcell 和 exit 事件,你可以通过切换来关闭
在正确的时间打开和关闭编辑元素。但我还是没有
它很完美,并且只包括鼠标使用,而不是键盘更改。

最佳答案

我没用过TStringGrid为此,我无法提供具体答案。但是我假设你可以吗manually (in code) start a cell being edited ?该链接意味着即使网格没有 goEditing 也是可能的包含在其 Options 中. (如果这不是真的,请参阅下文以解决此问题。)
如果是这样,我建议采用以下方法:
组合选择和编辑行为
我发现这是一种很好的 Windows 标准行为方式:

  • 将网格保持在选择模式,以便鼠标和键盘交互选择单元格
  • 根据某些标准,自己触发正在编辑的单元格(我认为您正在按照上一段中所说的进行操作。)它们与其他控件执行类似的操作:
  • 选择是正常的。即,单击以选择,单击并拖动以进行多选,使用键盘箭头和 Shift 或 Control 进行选择等。
  • 一个单元格enters edit mode当:
  • 选择一个单元格,用户按下 EnterF2 ( F2 是标准的“重命名”或“编辑”快捷方式,适用于许多程序)
  • 用户在单元格上“慢速双击”——即,慢速双击以选择和编辑,或在暂停后再次单击已选择的单元格。这模仿了资源管理器的行为,如果选择了一个文件并且您稍后单击它,它将进入内联编辑/重命名模式。要实现这一点,记录上次单击(和选择)单元格的时间。如果再次单击,并且时间大于 GetDoubleClickTime 然后他们缓慢地单击了两次,然后进入了编辑模式。这使您可以区分第一次单击以选择、双击(执行某种操作)和第二次缓慢单击以进入编辑模式。
    我也倾向于检查鼠标位置,以便如果一个对象被缓慢双击并且它不是首先被选中(即,这两个对象都选择了对象然后进入编辑模式)我验证鼠标没有移动很多很多。我用 GetSystemMetrics 找到双击距离,并检查慢速双击是否在此框内。 (因为它不是真正的双击,我实际上检查了距离乘以 2。我的操作代码是:const int iMAX_MOVE_AMOUNT = ::GetSystemMetrics(SM_CYDOUBLECLK) * 2; (抱歉,C++ 不是 Delphi,但应该很容易转换!)
    但实际上我不确定这是否完全 100% 符合 Windows 指南。但在实践中,用户发现它按预期工作。)



  • 这应该可以让您在适当的时间使用键盘和鼠标在选择和编辑之间进行切换。
    杂念
    您可能会发现通过子类化 TStringGrid,其中一些更清晰、更容易实现。并创建一个新组件。这将允许您在普通代码中实现它并覆盖内置行为(而不是事件处理程序),同时保持它对表单代码不可见。与简单地通过诸如 OnMouseDown 之类的事件公开相比,它还将为您提供对鼠标事件或 Windows 消息的较低级别的访问权限。 .最后,如果 goEditing时显示编辑器有问题包含在 Options 中,这将允许您更改该行为。如果您希望代码对发生的某些事情做出响应,例如创建 OnBeginEdit,您也可以添加自己的事件。事件,说。
    创建您自己的组件通常被视为高级 Delphi 主题,但一旦您知道如何操作,它实际上非常容易! This site有一些很好的主题可以向您介绍该主题,如果您走这条路并遇到问题,Stack Overflow 当然是提问的好地方:) Embarcadero Delphi » VCL » Writing Components新闻组/论坛也是一个很好的资源,实际上对于这个特定主题甚至可能比 SO 更好。
    希望有帮助!

    关于delphi - 具有编辑和范围选择功能的 TStringGrid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2861020/

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