从单元格坐标到 Delphi 中 tStringGrid 中 OnSelectCell 事件的 Canvas 像素位置
From cell coordinates to Canvas pixel position on OnSelectCell event in tStringGrid in Delphi
OnDrawCell事件给我一个"Rect"记录,这样我就知道真正的像素坐标在哪里:
OnDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
另一方面,OnSelectCell 只给我 row/col 坐标。
OnSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
如何将 row/col 转换为像素坐标?
我需要这些,因为我需要在运行时创建一个 ComboBox 来覆盖整个选定的单元格,但仅当单元格被选中时。我知道如何做所有事情,但我不知道如何获取坐标(现在,我只是在父 tStringGrid 的 0,0 处创建组合)。
我正在使用 Delphi7,但我认为这是一个普遍问题,与 Delphi 版本无关。
PS:我知道有很多商业和免费软件组件可以在单元格内实现组合框,但我不能and/or不想使用它们。
谢谢
您可以使用 CellRect method
确定单元格屏幕坐标
P.S。您是否尝试过将控件集成到 StringGrid 中?
当您遇到控件(将网格作为父级)行为的问题时,请查看 this topic
OnDrawCell事件给我一个"Rect"记录,这样我就知道真正的像素坐标在哪里:
OnDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
另一方面,OnSelectCell 只给我 row/col 坐标。
OnSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
如何将 row/col 转换为像素坐标?
我需要这些,因为我需要在运行时创建一个 ComboBox 来覆盖整个选定的单元格,但仅当单元格被选中时。我知道如何做所有事情,但我不知道如何获取坐标(现在,我只是在父 tStringGrid 的 0,0 处创建组合)。
我正在使用 Delphi7,但我认为这是一个普遍问题,与 Delphi 版本无关。
PS:我知道有很多商业和免费软件组件可以在单元格内实现组合框,但我不能and/or不想使用它们。
谢谢
您可以使用 CellRect method
确定单元格屏幕坐标P.S。您是否尝试过将控件集成到 StringGrid 中?
当您遇到控件(将网格作为父级)行为的问题时,请查看 this topic