【问题标题】:How can I determine the input area size of a TEdit?如何确定 TEdit 的输入区域大小?
【发布时间】:2015-07-22 14:52:23
【问题描述】:

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

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

如果 Ctrl3D 为 false,则尺寸过大 2 像素,Left / Top 偏移必须增加 1。

有什么方法可以得到这个区域的正确大小和位置,例如使用 Windows API 函数?

【问题讨论】:

  • 我很好奇这个问题的动机是什么
  • @DavidHeffernan 我的动机是这个问题 stackoverflow.com/q/31549854/49925 以及它需要启用主题才能工作的事实。我不想为某些程序启用主题,因为它会对自定义突出显示造成严重破坏。但是编辑字段的提示很好,我认为使用编辑区域内的面板来模拟它会相对容易

标签: delphi delphi-2007


【解决方案1】:

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

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

不幸的是:

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

【讨论】:

  • 感谢您的指点,但它不能可靠地工作。我还没有确定在哪种情况下会失败,但是在使用 Border、Bevel 和 Ctrl3D 的各种设置时,我得到了错误的值。
猜你喜欢
  • 2010-12-12
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
相关资源
最近更新 更多