2012-02-06 61 views
1

我正在顯示一個自定義窗體作爲提示。我希望提示窗口不要焦點。提示形式的提示窗體和焦點

Enabled屬性設置爲False,我也處理WM_MOUSE_ACTIVATE窗口消息並返回MA_NOACTIVATE。不過每次顯示提示窗口時,我的主窗口的邊框都會閃爍(帶有透明邊框的Windows 7)。

我該如何避免這種閃爍?

+1

我建議你看一下'THintWindow'(Controls.pas)。特別是它的'THintWindow.CreateParams'和'ActivateHint'方法。 – kobik 2012-02-06 13:57:10

+1

任何提示什麼是重要的?情況有點不同,我嘗試了大部分來自'THintWindow'的事情,但無法讓它工作...... – jpfollenius 2012-02-06 14:14:01

+0

我在我的評論中提到了我認爲重要的事情(*特別*)。 我只能猜測沒有看到你的代碼... – kobik 2012-02-06 21:22:03

回答

3

我假設你在處理Application.OnShowHint時會顯示你自己的提示表單,例如,如下:

procedure TMainForm.ApplicationShowHint(var HintStr: string; 
    var CanShow: Boolean; var HintInfo: THintInfo); 
var 
    HintForm: THintForm; 
begin 
    CanShow := False; 
    HintForm := THintForm.Create(nil); 
    HintForm.HintLabel.Caption := HintStr; 
    HintForm.Left := HintInfo.HintPos.X; 
    HintForm.Top := HintInfo.HintPos.Y; 
    ShowWindow(HintForm.Handle, SW_SHOWNOACTIVATE); 
end; 

最後一行的伎倆在這裏與D7(和一個THintFrom作爲一個正常的形式使用默認設置,例如啓用=真)在XP和W7。

+0

謝謝!似乎我一次嘗試了很多東西。我曾經在窗體樣式中添加了一個額外的'fsStayOnTop',這似乎會導致閃爍。使用'ShowWindow'就像你建議的那樣很好用! +1並被接受。 – jpfollenius 2012-02-07 07:42:18

+0

此示例非常有用,謝謝! – 2012-03-29 14:43:03