如何确定TEdit的输入区域大小?

时间:2015-07-22 14:52:23

标签: delphi delphi-2007

很容易获得TEdit控件的外部尺寸,但包括斜角(或框架,取决于Ctrl3d是否为真)。我想找出仅TEdit的白色输入区域的尺寸和位置。

我尝试过TEdit.ClientRect,但是如果Ctrl3D为true,它似乎只给出了正确的大小。我仍然需要在Left和Top上添加两个像素来调整斜角。

如果Ctrl3D为false,则大小太大两个像素,左/上偏移量必须增加一。

有没有办法获得这个区域的正确尺寸和位置,例如使用Windows API函数?

1 个答案:

答案 0 :(得分:3)

在Vista及更高版本上,您可以使用EM_GETRECT消息:

function GetEditRect(Edit: TCustomEdit): TRect;
begin
  SendMessage(Edit.Handle, EM_GETRECT, 0, LPARAM(@Result));
end;

不幸的是:

  

在某些情况下,EM_GETRECT可能不会返回确切的值   EM_SETRECTEM_SETRECTNP设置 - 它大致正确,   但它可能会偏离几个像素。