【发布时间】:2013-06-03 22:29:01
【问题描述】:
问题
好吧,我设计了一个对话框,当用户在 TStringGrid 组件上选择某些单元格(单选,而不是多选)时调用它。
此对话框将位于其中一个选定单元格的中心。
但它没有发生:(
可能的解决方案 = 我想要的
我想获取一个单元格的屏幕位置,即屏幕绝对坐标,而不是CellRect()获得的那些。
我在做什么
为了计算单元格的中心,我目前必须以这种方式对以下组件的坐标求和:
TRect pos;
pos = table->CellRect(Col,Row);
pos.Left += form->Left + panel->Left + frame->Left + table->Left;
pos.Right += pos->Left;
pos.Top += form->Top + panel->Top + frame->Top + table->Top;
pos.Bottom += pos->Top;
然后将对话框居中:
dialog->Left = (pos->Left + pos->Right)/2 - dialog->Width/2;
dialog->Top = (pos->Top + pos->Bottom)/2 - dialog->Height/2;
由于某些未知原因,Col 和 Row 为对话框的正确位置添加了偏移量,因此较大的 Col 和 Row 值将对话框位置设置为距离正确位置(所选单元格的中心)很远。
___screen________________________________________
| |
| ___form___________________________________ |
| | | |
| | | |
| | ___panel____________________________ | |
| | | | | |
| | | ___frame_______________ | | |
| | | | | | | |
| | | | | | | |
| | | | ___table_________ | | | |
| | | | | | | | | |
| | | | | _cell_ | | | | |
| | | | | |______| | | | | |
| | | | | | | | | |
| | | | |_________________| | | | |
| | | |_______________________| | | |
| | |____________________________________| | |
| | | |
| | | |
| |__________________________________________| |
|_________________________________________________|
如果我有表格或所选单元格的屏幕位置
实现和检测这些偏移误差将变得如此容易,因为上面总和上的分量坐标将更少......
【问题讨论】:
标签: screen c++builder