2012-03-13 61 views
4

我正在构建一个自定义编辑控件,它包括在编辑控件内部添加左侧的图标和右侧的图标按钮。这需要将文本(和光标)的起点向右移动X个像素。这也意味着我需要'限制'文本的绘制范围,以便为右侧的按钮留出空间。其目的是在左侧提供一个自定义图标,例如在浏览器中,以及右侧的“X”按钮以清除编辑控件的内容。如何在编辑控件中偏移光标的位置?

如何抵消在TCustomEdit后代中将文本和光标绘制在哪里的Rect

+0

或者我会更好地创建另一个自定义控件并在其中嵌入“TEdit”? – 2012-03-13 02:08:16

+0

为什么不使用剪裁来确保您的绘图不会打扰外部小部件? – OnTheFly 2012-03-13 08:41:22

回答

6

如果您使用的是更新版本的Delphi,应该已经有一个TButtonedEdit控件并且可以完成您的工作。

如果不是,我想你可以发送一个EM_SETMARGINS消息给你的TCustomEdit来设置左右页边距。

SendMessage(CustomEdit.Handle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, MakeLong(LeftMargin, RightMargin)); 
+0

这是正确的(+ 1ed),但我不得不问,当你打这个话题时,我已经在很多例子中看到使用'TWinControl'作为“内部”控制的底层,我想知道为什么。那是因为即使按照您在此处显示的方式设置边距,编辑也会闪烁?如果我创建实例按钮并将其父设置为没有底层的编辑控件,会发生什么? – TLama 2012-03-13 02:33:16

+0

+1看起来像这样做,谢谢!实际上,我不知道XE2中已经进行了按钮编辑,但我也添加了更多功能。它本质上是一个搜索框。 – 2012-03-13 02:37:17

+1

@TLama我没有真正实现这个控制,但是我看到Delphi使用EM_SETMARGINS来实现TButtonEdit的正式版本,所以我认为它可以是一种有效的实现方式。 – Justmade 2012-03-13 03:09:06