Относительно рекомендаций области уведомлений Microsoft я ищу идеи или компонент Delphi для реализации области уведомлений Flyouts.
Первая "естественная" идея состоит в том, чтобы использовать стандартную форму Delphi, но я сталкиваюсь с двумя проблемами с нею:
Я буду благодарить любую подсказку или компонент, чтобы заставить его произойти :)
С уважением.
jachguate.
PS. Существует связанный вопрос в преобразовании значка области уведомлений к Значку программы в Win7 (Delphi).
обновление [0] я все еще ищу, советуют. ответ @skamradt выглядит очень хорошим, но к сожалению не работает хорошо на практике.
обновление [1] Наконец, автоблизкое поведение работает с сообщением WM_ACTIVATE после вызова SetForegroundWindog для принуждения flyout "активации"
begin
FlyoutForm.Show;
SetForegroundWindow(FlyoutForm.Handle);
end;
Теперь, я ищу, советуют для достижения поведения границы и визуального стиля, потому что самое близкое поведение достигается со стилем как WS_POPUP или WS_DLGFRAME, в то время как самая близкая визуальная цель достигается, устанавливая стиль как WS_POPUP или WS_THICKFRAME.
Я верю, что ваш после следующего:
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 становится уволенным ... но только если вы переключитесь в другую форму в том же приложении. Чтобы обработать его независимо от коммутации приложения, используйте метод захвата сообщений.