2012-05-30 188 views
4

我有一些data output text boxes(文本框沒有邊框,並且與窗口的其餘部分具有相同的背景)我試圖使用標準編輯控件+旋轉按鈕對齊以表示列號碼,其中的一個可以被編輯:對齊文本框

screen shot

我可以手動在Delphi/C++生成器表單設計這些對準,但是當我然後查看窗體上的一個不同的版本的Windows或在一個不同的DPI,文本不再是右對齊的,可能是因爲旋鈕間距,邊框等的差異。

我可以使用EM_GETMARGINS來確定旋轉按鈕的寬度,但是如何確定編輯控件邊距和邊框的大小?我已經嘗試了EM_POSFROMCHAR,ClientToScreen,GetSystemMetrics(SM_CXBORDER),GetSystemMetrics(SM_CXEDGE)和GetThemeMargins的各種組合,但到目前爲止,我找不到可行的組合。

更多細節:

  • 環境是的Delphi/C++生成器XE2。
  • 數據輸出控件是帶BorderStyle bsNone的TEdits。
  • 編輯+旋轉按鈕是一個TJvSpinEdit。從查看它的源代碼,它使用EM_SETMARGINS來爲其旋轉按鈕留出空間。

回答

2

使用Win32 API GetWindowRect()和​​方法。接壤處將是兩個矩形的區別。儘管如此,這隻會讓你接近。客戶區域內可能會有額外的空間。

+0

我以前嘗試過,但沒有奏效。顯然,它從TFrame的構造函數完成時失敗,但在完成表單顯示時工作。仍然有1個像素差異;它看起來可能來自TJvSpinEdit的實現,雖然我看不到任何可能導致它的東西。 –

+0

然後嘗試使用「EM_GETRECT」消息。它返回Edit控件可以渲染其文本的邊界矩形。如果該方法有效,那麼可以將控件放置在其右側的矩形邊緣上。 –

+2

如果您安裝了VCL源代碼,您可以選擇查看以下類的實現,這是Form Designer在啓用「Designer Guidelines」功能時用於計算各種對齊的功能:「DesignIntf​​.TBaseComponentGuidelines」 ,「設計編輯器.TComponent指南」,「VCLEditors.TControlGuidelines」和「VCLEditors.TControlGuidelines」的 。 –