Уведомления о стиле Windows 7
В отношении рекомендаций области уведомлений от Microsoft я ищу идеи или компонент Delphi для реализации "Отправки уведомлений" .
![alt text]()
Первой "естественной" идеей является использование стандартной формы Delphi, но я столкнулся с двумя проблемами:
- Я не могу получить поведение границы формы, используя стандартное свойство "BorderStyle". Пытался "имитировать" границу, используя свойство GlassFrame вместе с BorderStyle, установленным в bsNone, но там нет GlassFrame, когда нет границы (по крайней мере, в Delphi 2007).
- Я не могу понять, как закрыть форму, когда пользователь щелкает всюду вне самой формы. Вчера я пытался с разными сообщениями, но никто не работает так, как ожидалось.
Я благодарю любую подсказку или компонент, чтобы это произошло:)
С уважением.
jachguate.
пс. В есть связанный с этим вопрос, связанный с значком области уведомлений на значок программы в Win7 (Delphi).
обновление [0]
Я все еще ищу совет. @skamradt ответ выглядит очень хорошо, но, к сожалению, на практике это не работает.
обновление [1]
Наконец, поведение auto-close работает с сообщением WM_ACTIVATE после вызова SetForegroundWindog, чтобы принудительно активировать "активацию"
begin
FlyoutForm.Show;
SetForegroundWindow(FlyoutForm.Handle);
end;
Теперь я хочу посоветовать достичь поведения границы и визуального стиля, потому что самое близкое поведение достигается со стилем WS_POPUP или WS_DLGFRAME, в то время как ближайшая визуальная цель достигается установкой стиля как WS_POPUP или WS_THICKFRAME.
Ответы
Ответ 1
Я верю, что ваше следующее:
TForm1 = class(TForm)
:
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure WMActivate(Var msg:tMessage); message WM_ACTIVATE;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := WS_POPUP or WS_THICKFRAME;
end;
procedure TForm4.WMActivate(var msg: tMessage);
begin
if Msg.WParam = WA_INACTIVE then
Hide; // or close
end;
Это даст вам большое всплывающее окно со стеклянным фреймом. Вы не можете перемещать окно без дополнительного программирования, так как отсутствует стандартная подпись Windows. Когда другое окно получает фокус, событие FormDeactivate запускается... но только если вы переключитесь на другую форму в том же приложении. Чтобы обработать его независимо от переключения приложения, используйте метод захвата сообщения.