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

Функция LoadPicture (свободно) определяет, какие графические форматы «поддерживаются VB6» в собственном смысле. Вот соответствующие подробности:

Загружает графику в свойство Picture форм, элемент управления PictureBox или элемент управления Image.

...

Графические форматы, распознаваемые Visual Basic, включают файлы растровых изображений (.bmp), файлы значков (.ico), файлы курсоров (.cur), файлы кодированных по длине серий (.rle), файлы метафайлов (.wmf), расширенные метафайлы (.emf), GIF (.gif) и JPEG (.jpg) файлы.

blockquote>

Дополнительная информация, основанная на полезном внешнем сообщении :

Существует много типов файлов изображений, и некоторые из них также имеют несколько «подтипов». , К сожалению, несколько популярных типов были созданы (или расширены) с момента выпуска VB6, поэтому он не поддерживает их.

Поддерживаемые типы файлов

Это список типов, показанных в справке для VB6 (под LoadPicture):

Графические форматы, распознаваемые Visual Basic, включают: [ 1118]

  • файлы растровых изображений (.bmp),
  • файлы значков (.ico),
  • файлы курсоров (.cur),
  • длина цикла закодированные (.rle) файлы,
  • файлы метафайлов (.wmf),
  • расширенные метафайлы (.emf),
  • файлы GIF (.gif),
  • [ 119] и файлы JPEG (.jpg).

Примечание о файлах значков (.ico)

Они развивались годами, и многие значки, которые вы найдете в Интернете, не поддерживаются. [1120 ]

VB6 поддерживает только значки размером 32x32 или 16x16 и глубиной цвета «True Color» (24 бита) или «256 цветов» (8 бит) или менее - поэтому нет альфа-канала (32 бита) .

Если вы найдете значки, которые описаны как «значки XP» или «значки Vista», они вряд ли загрузятся в VB - если они это сделают, то это потому, что подходящие значки также включены в файл (файл .ico может содержать несколько изображений).

Вы можете конвертировать иконки в подходящий формат с помощью программы редактирования иконок ...

Другие типы файлов

Если тип файла, который вы хотите загрузить, не указан выше, вам необходимо проделать дополнительную работу.

Самый простой способ (если у вас всего несколько файлов) - использовать программу рисования для преобразования файла изображения в один из перечисленных выше типов.

Во многих ситуациях это недопустимо (например, когда вы хотите, чтобы пользователь мог загружать файлы .png), и в этом случае вам нужно либо найти заранее написанный код (или компонент) для загрузки подайте или напишите код самостоятельно.

BLOCKQUOTE>

5
задан Joel Coehoorn 25 May 2012 в 16:07
поделиться

5 ответов

Существует интересное обсуждение этой точной проблемы здесь (от VB6 persepective).

Самый соответствующий бит с точки зрения Вашего вопроса:

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

Кстати, Вы используете API-функцию GetWindow с флагом GW_OWNER, чтобы определить, принадлежит ли окно.

6
ответ дан 18 December 2019 в 13:20
поделиться

Благодаря Stu для того, чтобы поставить меня к ответу так быстро. В моем случае я должен был вручную добавить дескриптор формы владения в 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;
7
ответ дан 18 December 2019 в 13:20
поделиться

С благодарностью на http://www.scalabium.com/faq/dct0096.htm.

procedure TForm1.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;

Я протестировал его, и это работало с Delphi2006. И меню окон и минимальные кнопки / макс. кнопки все еще видимы.

1
ответ дан 18 December 2019 в 13:20
поделиться

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

0
ответ дан 18 December 2019 в 13:20
поделиться

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

ShowWindow(_window, SWHide);

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

ShowWindow(_window, SWShow);
-1
ответ дан 18 December 2019 в 13:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: