当前位置:主页>仓库管理软件> 列表

StringGrid的CellRect函数的问题 找用友财务软件官网

进销存软件版1楼: 小弟在开发中发现,调用TStringGrid的CellRect方法,返回的TRect的坐标和所选Cell单元格实际位置有一定的数值差别,大致是纵向差了DefaultRowHeight,横向差了3个象素左右(目测)。

如,这面这段程序的执行结果是浮动的TEdit控件会出现在所选单元格Cells[ACol, ARow]的上一行同列略偏左的位置。

var
Rect: TRect;
begin
Rect := strgCann.CellRect(ACol, ARow);
Edit1.Visible := True;
Edit1.Left := Rect.Left;
Edit1.Width := Rect.Right - Rect.Left;
Edit1.Height := Rect.Bottom - Rect.Top;
Edit1.SetFocus;
end;

请问这是怎么回事?我想取得当前单元格的实际坐标,该如何去做?

2楼: 我在OnDrawCell的函数里使用的Rect函数没有你说的问题 如用友财务软件官网

3楼: 1、单元格Cells[ACol, ARow]的位置是相对StringGrid的原点的,所以你的代码改成以下就可以了。
var
Rect: TRect;
begin
Rect := strgCann.CellRect(ACol, ARow);
Edit1.Visible := True;


Edit1.Left := Rect.Left + strgCann.Left; //左
Edit1.Top := Rect.Top + strgCann.Top; //上
Edit1.Width := Rect.Right - Rect.Left;
Edit1.Height := Rect.Bottom - Rect.Top;
Edit1.SetFocus;
end;

4楼: procedure TForm1.strgCannSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var
Rect: TRect;
begin
Rect := strgCann.CellRect(ACol, ARow);
Edit1.Visible := True;
Edit1.Left := Rect.Left + strgCann.Left + 1;
Edit1.Top := Rect.Top + strgCann.Top + 1;
Edit1.Width := Rect.Right - Rect.Left + 1;
Edit1.Height := Rect.Bottom - Rect.Top + 1;
Edit1.SetFocus;
end;

5楼: 谢谢各位

6楼: 楼主结贴吧

进销存软件版7楼: 谢谢各位!
祝各位网友新年快乐!!