我正在顯示一個自定義窗體作爲提示。我希望提示窗口不要焦點。提示形式的提示窗體和焦點
Enabled
屬性設置爲False
,我也處理WM_MOUSE_ACTIVATE
窗口消息並返回MA_NOACTIVATE
。不過每次顯示提示窗口時,我的主窗口的邊框都會閃爍(帶有透明邊框的Windows 7)。
我該如何避免這種閃爍?
我正在顯示一個自定義窗體作爲提示。我希望提示窗口不要焦點。提示形式的提示窗體和焦點
Enabled
屬性設置爲False
,我也處理WM_MOUSE_ACTIVATE
窗口消息並返回MA_NOACTIVATE
。不過每次顯示提示窗口時,我的主窗口的邊框都會閃爍(帶有透明邊框的Windows 7)。
我該如何避免這種閃爍?
我假設你在處理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。
謝謝!似乎我一次嘗試了很多東西。我曾經在窗體樣式中添加了一個額外的'fsStayOnTop',這似乎會導致閃爍。使用'ShowWindow'就像你建議的那樣很好用! +1並被接受。 – jpfollenius 2012-02-07 07:42:18
此示例非常有用,謝謝! – 2012-03-29 14:43:03
我建議你看一下'THintWindow'(Controls.pas)。特別是它的'THintWindow.CreateParams'和'ActivateHint'方法。 – kobik 2012-02-06 13:57:10
任何提示什麼是重要的?情況有點不同,我嘗試了大部分來自'THintWindow'的事情,但無法讓它工作...... – jpfollenius 2012-02-06 14:14:01
我在我的評論中提到了我認爲重要的事情(*特別*)。 我只能猜測沒有看到你的代碼... – kobik 2012-02-06 21:22:03