2012-02-06 1 views
1

Я показываю пользовательскую форму в качестве подсказки. Я хочу, чтобы окно подсказки не фокусировалось.Подсказка Форма и фокус

Enabled свойства формы намека установлено на False и я также обрабатывать сообщение WM_MOUSE_ACTIVATE окна и вернуться MA_NOACTIVATE. Тем не менее каждый раз, когда отображается окно подсказки, граница моего главного окна мерцает (Windows 7 с прозрачными границами).

Как я могу избежать этого мерцания?

+1

Предлагаю вам взглянуть на «THintWindow» (Controls.pas). особенно на его методах «THintWindow.CreateParams» и «ActivateHint». – kobik

+1

Любой намек, что именно важно? Ситуация немного другая, и я пробовал большую часть вещей из «THintWindow», но не могу заставить ее работать ... – jpfollenius

+0

Я упомянул о том, что считаю важным (* специально *) в своем комментарии. Я могу только догадываться, не видя ваш код ... – kobik

ответ

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 в нормальной форме с настройками по умолчанию, например, Enabled = True) на XP и W7.

+0

Спасибо! Кажется, что я пробовал много вещей сразу. Я однажды добавил дополнительный стиль 'fsStayOnTop' в стиль формы, который, кажется, вызывает мерцание. Использование 'ShowWindow', как вы предлагаете, работает хорошо! +1 и принято. – jpfollenius

+0

Этот пример полезен, спасибо! –