На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Как скрыть значок окна в TaskBar'e
    Доброго времени суток

    Собственно проблема в сабже
    При переходе со старушки delphi7 на delphi 2010 возникла проблемма при скрытии значка окна в TaskBar'e. Он, гад, не скрывается :(

    Нужно чтобы сама форма была на экране, а зачка - небыло

    подскажите как быть пожалуйста
    Сообщение отредактировано: Krid -
      ExpandedWrap disabled
        ShowWindow(Application.Handle, SW_HIDE);
        В Delphi 2010 по-умолчанию нет скрытого окна приложения (Application.Handle). Вместо него - главное окно.
        Дальше сами догадайтесь.

        P.S. Поведение переключается MainFormOnTaskBar.
        P.P.S. Ставить MainFormOnTaskBar := False - плохая идея.
          Ну можно выставить форме стиль WS_EX_TOOLWINDOW через SetWindowLong или через эту функцию подменить родительское окно или можно все это проделать через интерфейс ITaskBarList.
            Спасибо огромное! Сделал таки :)
              Цитата Maksim V. @
              Ну можно выставить форме стиль WS_EX_TOOLWINDOW через SetWindowLong

              Ну, сделать-то можно разными способами. Есть несколько правил, согласно которым приложения появляются на панели задач. Нарушьте любое условие и кнопка пропадёт. Весь вопрос в том, над чем это делать, а уж как именно делать - вопрос скорее вкуса.
                Цитата CodeMonkey @
                Ставить MainFormOnTaskBar := False - плохая идея.

                это с чего это плохая идея? в связке с ShowWindow(Application.Handle, SW_HIDE); отлично работает
                Сообщение отредактировано: Алексей -
                  (вздох) Если что-то работает - это ещё не значит, что это правильно.
                  Вам не приходило в голову, а почему это MainFormOnTaskBar равен True по-умолчанию? Наверное, это не просто так? (это домашнее задание)
                    лучше чем вздыхать, объяснили бы в чём подвох. форум для этого и существует.
                      Это было несложное упражнение на дом, но раз вам так лениво, то жмёте F1:
                      Application.MainFormOnTaskbar:
                      Цитата
                      The MainFormOnTaskBar property controls how Windows taskbar buttons are handled by VCL.

                      If the property is true, a taskbar button represents the application's main form and displays its caption. If false, a taskbar button represents the application's (hidden) main window and bears the application's Title.

                      MainFormOnTaskBar must be true to use Windows Vista Aero effects. These include live taskbar thumbnails, Dynamic Windows, Windows Flip, and Windows Flip 3D.

                      If a change to default behavior is required, MainFormOnTaskBar should be set in the .dpr file after Application.Initialize and before main form creation. The MainFormOnTaskBar setting is intended to persist for the life of the application; later runtime changes of this property could result in unexpected behavior.

                      MainFormOnTaskBar defaults to True for applications created in Delphi 2007 and later products and False for earlier products.

                      The property can be applied to older applications. Note that it affects the Z-order of your MainForm in case your application depends on this.

                      To update existing VCL applications, add the following line to the project's .dpr file after Application.Initialize;:

                      ExpandedWrap disabled
                        Application.MainFormOnTaskbar := True;


                      This line is automatically added to new projects.

                      For further information, see http://www.microsoft.com/windows/products/windowsvista/features/experiences/aero.mspx


                      На случай, если вам лениво делать перевод:

                      Цитата
                      Свойство MainFormOnTaskBar контролирует, как кнопки в панели задач Windows обрабатываются VCL.

                      Если свойство установлено в True, то кнопка на панели задач ассоциирована с главным окном приложения и показывает его заголовок. Если же свойство установлено в False, то кнопка на панели задач ассоциирована со специальным невидимым окном Application и показывает заголовок объекта Аpplication.

                      MainFormOnTaskBar должна быть установлена в True для работы эффектов Аэро в Windows Vista и выше. Это включает в себя предпросмотр (live thumbnails), Dynamic Windows, Windows Flip и Windows Flip 3D.

                      Если вам нужно сменить поведение, то свойство MainFormOnTaskBar должно устанавливаться в .dpr файле сразу после Application.Initialize и до создания главной формы. Свойство MainFormOnTaskBar не следует менять после начальной установки. В противном случае вы получите неожиданное поведение программы.

                      MainFormOnTaskBar устанавливается в True для новых приложений и равно False для старых приложений по соображениям совместимости.

                      Вы можете менять это свойство и в старых приложениях. Заметьте, что это свойство может менять Z-порядок ваших окон.

                      Для обновления старых VCL-приложений, добавьте следующую строку в ваш файл .dpr сразу после Application.Initialize;:

                      ExpandedWrap disabled
                        Application.MainFormOnTaskbar := True;


                      Эта строка автоматически создаётся у новых проектов.

                      Для дальнейшей информации - см. http://www.microsoft.com/windows/products/windowsvista/features/experiences/aero.mspx


                      Если интересно - см. также http://transl-gunsmoker.blogspot.com/2009/03/windows-vista-delphi-1.html
                        ничего страшного не вижу в этом
                          ...ну если вы не видите ничего страшного в том, что программа работает неправильно, то флаг вам в руки...
                            Цитата Алексей @
                            MainFormOnTaskBar должна быть установлена в True для работы эффектов Аэро в Windows Vista и выше. Это включает в себя предпросмотр (live thumbnails), Dynamic Windows, Windows Flip и Windows Flip 3D.

                            Если вы считаете нормальным отказаться от этих трёх примочек(кстати именно из-за них большинство знакомых юзеров перешло с ХР на Vista/7) то я поддерживаю предыдущий пост
                            Цитата CodeMonkey @
                            то флаг вам в руки...

                            ИМХО
                            Отказываясь от поддержки(использования) новых примочек ос, вы заранее обрекаете свои программа на "провал".
                            Сообщение отредактировано: VahaC -
                              Цитата VahaC @
                              Отказываясь от поддержки(использования) новых примочек ос, вы заранее обрекаете свои программа на "провал".


                              К моему глубокому сожалению, вынуждена согласиться с данным утверждением.
                                Вообще, если отвлечься от Vista/7, существует доступная и простая концепция: у вас есть окно? -> на панели задач есть его кнопка. Взаимно-однозначное соответствие.

                                Однако, энцать лет тому назад при разработке Delphi было принято решение, использовать хак для введения иного поведения. Да, это кривой хак, потому что он делает что-то, что не предусматривалось системой (каждое Delphi приложение кидает вам на рабочий стол видимое окно с нулевым размером). Но это как-то работало и потому всех устраивало, не задумываясь о том, что, вообще говоря, это не есть нормально. Хороший пример на тему не идти против системы, кстати.

                                Так что с MainFormOnTaskBar = True программа получается чуть попрямее, чем без него (вне зависимости от новых фишек ОС).
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.0886 ]   [ 15 queries used ]   [ Generated: 24.07.26, 11:04 GMT ]