Delphi 中 tStringGrid 中的 OnSelectCell 事件从单元格坐标到 Canvas 像素位置

Zio*_*Bit 2 delphi canvas tstringgrid

OnDrawCell事件给我一个“矩形”记录以便我知道真正的像素坐标在哪里:

OnDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
Run Code Online (Sandbox Code Playgroud)

另一方面,OnSelectCell只提供行/列坐标。

OnSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
Run Code Online (Sandbox Code Playgroud)

如何将行/列转换为像素坐标?

我需要这些,因为我需要在运行时创建一个组合框来覆盖整个选定的单元格,但仅当选择该单元格时。我知道如何做所有事情,但我不知道如何获取坐标(现在,我只是在父 tStringGrid 的 0,0 处创建组合)。

我使用的是Delphi7,但我认为这是一个普遍问题,与Delphi版本无关。

PS:我知道有很多商业和免费软件组件可以在单元格内实现组合框,但我不能和/或不想使用它们。

谢谢

MBo*_*MBo 5

您可以使用CellRect 方法确定单元格屏幕坐标

PS 您是否尝试过将控件集成到 StringGrid 中?
当您遇到控件(将网格作为父级)行为问题时,请查看此主题