Скрыть кнопку панели задач формы без использования WS_EX_TOOLWIN

StackOverflow https://stackoverflow.com/questions/261601

  •  06-07-2019
  •  | 
  •  

Вопрос

Мне нужно скрыть форму Windows на панели задач, но я не могу использовать WS_EX_TOOLWINDOW , потому что мне нужны системное меню и кнопки min / max в строке заголовка формы.

Если я переключаю форму на окно инструментов во время выполнения, обложка формы заполняется. Из поиска в Интернете я вижу, что у VB есть свойство ShowInTaskbar, и мне интересно, будет ли это делать то, что я хочу, и может ли это быть реализовано в Delphi 2006. Также этот проект является COM-сервером и не имеет MainForm и т. Д.

Это было полезно?

Решение

Здесь есть интересное обсуждение этой конкретной проблемы здесь (с точки зрения VB6).

Самый важный момент с точки зрения вашего вопроса:

  

" Когда вы создаете окно, панель задач   исследует расширенный стиль окна   чтобы увидеть, если либо WS_EX_APPWINDOW   (& amp; H40000) или WS_EX_TOOLWINDOW (& amp; H80)   стиль включен. Если WS_EX_APPWINDOW   включен, панель задач показывает   кнопка для окна, и если WS_EX_   TOOLWINDOW включен, панель задач   не показывает кнопку для окна.   Окно никогда не должно иметь оба   эти расширенные стили. Если окно   не имеет ни одного из этих стилей,   панель задач решает создать кнопку   если окно не владеет и не   создать кнопку, если окно   . Принадлежит & Quot;      

Кстати, вы используете GetWindow   Функция API с флагом GW_OWNER для   определить, принадлежит ли окно.

Другие советы

Спасибо Стю за то, что так быстро ответили мне на вопрос. В моем случае мне пришлось вручную добавить дескриптор формы-владельца в CreateParams, но в других / обычных случаях это может не потребоваться.

procedure TfrmWord2Site.CreateParams(var Params:TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := <your owner form>.Handle;
  Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW;
end;

в Delphi XE (2010) это прекрасно работает: Вы должны редактировать основную форму,

program prog;  

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

begin
Application.Initialize;

// this value is set to "true", but you shoud set it "false"
Application.MainFormOnTaskbar := false;

Application.CreateForm(TForm1, Form1);
Application.Run;
end.

(для поиска этой основной формы в окне "представление моделирования")

после этого перейдите в unit1.pas, ваш основной блок форм и " OnShow " событие form1 do:

procedure TForm1.FormShow(Sender: TObject);

begin

ShowWindow(Application.Handle, SW_HIDE);

end;

это поможет, у меня была такая же проблема, искал всю сеть, но без разрешения

Решил мои проблемы в этой области с помощью BordersStyle bsDialog / bsToolWindow (но тогда мне не понадобилось min / max ...). Но мне интересно, почему вы должны захотеть объединить эти атрибуты? Не смущает ли это «нормального» пользователя?

Я ищу фрагмент кода для интеграции Textbox с панелью задач Windows.

Я планирую создать панель инструментов и не могу интегрировать ее в панель задач.

Спасибо за вашу помощь рг

Один из способов сделать это в C #:

ShowWindow(_window, SWHide);

int style = GetWindowLong(_window, GWL_EXSTYLE);
style |= WS_EX_TOOLWINDOW;
SetWindowLong(_window, GWL_EXSTYLE, style);

ShowWindow(_window, SWShow);
scroll top