2014-01-05 107 views
-1

我似乎無法得到狀態欄更新/刷新/重繪:德爾福XE3 TStatusBar重繪

TopFormmlcmpStatusPanel1.Invalidate; 
    SendMessage(TopFormmlcmpStatusPanel1.Handle, WM_PAINT, WParam(0), LParam(0)); 

在另一個場景中我曾嘗試:

SendMessage(TopFormmlcmpStatusPanel1.Handle, WM_ERASEBKGND, WParam(0), LParam(0)); 

我只是想重繪狀態欄與更新的顏色。

回答

0

我假設TopFormmlcmpStatusPanel1TStatusBar類型。

您不發送WM_PAINTWM_ERASEBKGND消息。系統做到了。

您的代碼:

TopFormmlcmpStatusPanel1.Invalidate; 

將導致一個新的油漆循環。當消息循環下一次清空時,將產生一個繪畫循環並且控件將被重新繪製。

或者您可以使用:

TopFormmlcmpStatusPanel1.Refresh; 

如果你想控制,應立即重新上漆。

所以,我想你的問題比你想象的更微妙。我的期望是,您的控件是由系統使用系統主題繪製的。而您嘗試改變顏色根本無法產生任何效果,因爲主題會覆蓋控件的顏色屬性。沒有SSCCE,很難確定這是否是問題。


在評論中您聲明您的控件是所有者繪製的。可以想象,你的老闆畫代碼有問題。我顯然無法評論我無法觀察到的代碼。但是,我會重申一個事實,即InvalidateRefresh方法都會導致繪製循環。

+0

狀態欄是通過所有者繪製生成的。 –

+0

我也嘗試了無效和刷新,並沒有任何命令工作。 –

+0

「無效」和「刷新」都會導致繪畫循環。也許你的老闆畫代碼有問題。你沒有出席SSCCE。另外,TopFormmlcmpStatusPanel1是什麼類型?我假設它是TStatusBar。那是對的嗎? –