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;
请问这是怎么回事?我想取得当前单元格的实际坐标,该如何去做?
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;
如,这面这段程序的执行结果是浮动的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楼: 谢谢各位!
祝各位网友新年快乐!!