我正在構建一個自定義編輯控件,它包括在編輯控件內部添加左側的圖標和右側的圖標按鈕。這需要將文本(和光標)的起點向右移動X個像素。這也意味着我需要'限制'文本的繪製範圍,以便爲右側的按鈕留出空間。其目的是在左側提供一個自定義圖標,例如在瀏覽器中,以及右側的「X」按鈕以清除編輯控件的內容。如何在編輯控件中偏移光標的位置?
如何抵消在TCustomEdit
後代中將文本和光標繪製在哪裏的Rect
?
我正在構建一個自定義編輯控件,它包括在編輯控件內部添加左側的圖標和右側的圖標按鈕。這需要將文本(和光標)的起點向右移動X個像素。這也意味着我需要'限制'文本的繪製範圍,以便爲右側的按鈕留出空間。其目的是在左側提供一個自定義圖標,例如在瀏覽器中,以及右側的「X」按鈕以清除編輯控件的內容。如何在編輯控件中偏移光標的位置?
如何抵消在TCustomEdit
後代中將文本和光標繪製在哪裏的Rect
?
如果您使用的是更新版本的Delphi,應該已經有一個TButtonedEdit控件並且可以完成您的工作。
如果不是,我想你可以發送一個EM_SETMARGINS消息給你的TCustomEdit來設置左右頁邊距。
SendMessage(CustomEdit.Handle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, MakeLong(LeftMargin, RightMargin));
這是正確的(+ 1ed),但我不得不問,當你打這個話題時,我已經在很多例子中看到使用'TWinControl'作爲「內部」控制的底層,我想知道爲什麼。那是因爲即使按照您在此處顯示的方式設置邊距,編輯也會閃爍?如果我創建實例按鈕並將其父設置爲沒有底層的編輯控件,會發生什麼? – TLama 2012-03-13 02:33:16
+1看起來像這樣做,謝謝!實際上,我不知道XE2中已經進行了按鈕編輯,但我也添加了更多功能。它本質上是一個搜索框。 – 2012-03-13 02:37:17
@TLama我沒有真正實現這個控制,但是我看到Delphi使用EM_SETMARGINS來實現TButtonEdit的正式版本,所以我認爲它可以是一種有效的實現方式。 – Justmade 2012-03-13 03:09:06
或者我會更好地創建另一個自定義控件並在其中嵌入「TEdit」? – 2012-03-13 02:08:16
爲什麼不使用剪裁來確保您的繪圖不會打擾外部小部件? – OnTheFly 2012-03-13 08:41:22