2010-04-07 1 views
3

Работа с сервисным приложением в Delphi 5, предназначенным для работы в Windows XP - 7. Большинство приложений прекрасно сочетаются, но у меня возникает одна проблема. Часть этого сервисного приложения - это форма, которая иногда отображает данные (аналогично блоку слайдера, который использует Avast, чтобы вы знали, что его обновили). Когда служба показывает форму, форма отображается на панели задач, но мы этого не хотим. Есть ли у кого-нибудь какие-либо предложения относительно того, как скрыть кнопку формы на таксбаре? До сих пор ни один из стандартных методов, которые я нашел для обычных приложений. Благодарю.Сервисное приложение слишком видимое

+4

Если это услуга, то она не сможет отображать какие-либо формы в Windows Vista и Windows 7. Но в любом случае этот аспект обслуживания не имеет отношения к вашему вопросу. Вы просто хотите отобразить форму без ее появления на панели задач. –

ответ

1

Переопределите метод формы CreateParams и добавьте значение WS_EX_TOOLWINDOW в поле Params.ExStyle. Это будет обозначать его как окно инструмента, в котором не будет записи на панели задач.

+1

Прекрасно работает. Благодарю. –

1

Нашел на http://delphi.about.com/od/adptips1999/qt/hidefromtaskbar.htm

procedure TMainForm.FormCreate(Sender: TObject) ; 
begin 
    ShowWindow(Application.Handle, SW_HIDE) ; 
    SetWindowLong(Application.Handle, GWL_EXSTYLE, getWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW) ; 
    ShowWindow(Application.Handle, SW_SHOW) ; 
end; 

С Delphi 2007, чтобы скрыть кнопку на панели задач вам потребуется несколько строк кода:

Set MainFormOnTaskBar в FALSE

Внутри OnShow главной формы вызов обработчика событий

ShowWindow(Application.Handle, SW_HIDE); 

Внутри OnActivate вызов обработчика события главной формы

ShowWindow(Application.Handle, SW_HIDE); 
+1

Да, я тоже это нашел, но это не сработало, к сожалению, поскольку оно предназначено для приложений winforms, а не для приложений-служб (тип переменной приложения). Спасибо хоть. –

7

Это звучит так, как будто Вы предполагаете, имеющий значок в области уведомлений (а.к.а. значок в системном трее), чтобы информировать пользователя о событиях в /, относящихся к службе.

Вам необходимо отделить этот GUI-аспект обслуживания от самой службы и использовать какой-то IPC, чтобы разрешить апплету значка в лотке общаться с сервисом по мере необходимости. В зависимости от потребностей вашего IPC это может быть именованный канал, общий доступ к файлу с отображением памяти или что-то более сложное.

Тогда методы управления поведением GUI w.r.t панели задач должны работать должным образом.

 Смежные вопросы

  • Нет связанных вопросов^_^