Главная » Delphi » Демонстрация заставки

0

Сворачивание в иконку сразу при запуске, как правило, должно сопровождаться демонстрацией окна-заставки — иначе пользователь может просто не заметить того, что программа запущена. Это правило не абсолютно — демонстрация заставки с точки зрения программы, как правило, есть совершенно пустое времяпрепровождение, потому что она замедляет запуск, а это может раздражать. Совершенно лишней является демонстрация заставки для программ, которые всегда работают в фоновом режиме и загружаются через автозапуск— например, файрволов (firewall) или антивирусов. С другой стороны, многие грамотно написанные крупные приложения (Photoshop, MS Word, сама Delphi) используют демонстрацию заставки с пользой — чтобы иметь время загрузить многочисленные дополнительные библиотеки и модули (плагины). В остальных случаях это чистый "декор" и для особо нервных пользователей неплохо предусмотреть возможность отключать демонстрацию заставки при запуске. Разберемся сначала с собственно демонстрацией.

Окно следует разукрасить, для чего сначала нужно создать подходящую картинку в формате BMP. Можно воспользоваться входящим в комплект Delphi редактором Image Editor (пункт меню Tools), но это не очень удобная программа для данной цели, и к тому же достаточно "глючная". Через нее можно работать непосредственно с файлами ресурсов, и этим свойством мы в дальнейшем не раз воспользуемся, однако для редактирования иконок и тем более простых Ьктар-изображений удобнее воспользоваться специальным редактором. Забегая вперед, отметим, что очень удобной программой для редактирования иконок является Liquidlcon (www.x2studios.com), которая, кроме всего прочего, поддерживает "прозрачный" цвет. А нашу картинку-ЬЬтар можно соорудить, воспользовавшись вообще любым графическим редактором (автор предпочитает Paint Shop Pro). Картинку разместим в файле zastavka.bmp. Размеры картинки надо задавать абсолютные, в пикселах (масштаб в пикселах на дюйм не имеет значения) и для обычного окна-заставки подойдет размер, например, 500×400 точек (рис. 4.1).

Рис. 4.1. Пример оформления окна-заставки

Скопируем опять проект SlideShow из папки Glava4\l в новую папку (папка Glava4\2), изменим номер версии на I.20 (изменения на этот раз более существенны) и добавим к нему еще одну форму — Form2 (пункт File | New | Form). Это и будет окно-заставка, соответствующий файл с текстом модуля назовем zastavka.pas. Файл с картинкой (zastavka.bmp) также перенесем в папку с проектом. Теперь в свойствах Form2 установим для Borderstyle значение bsNone, для Position значение poDesktopCenter, а размеры установим равными размерам нашей картинки: width = 500 и Height = 400. Кроме этого, следуег обратиться к пункту Project | Options и на закладке Forms с помощью кнопки-стрелочки перенести Form2 из списка автоматически создаваемых форм (Auto-Create forms) в список доступных форм (Available forms). На эту форму установим компонент Timer, в свойствах которого установим interval, равный 5000 (или любой другой по вкусу)— это будет задержка при демонстрации заставки.

А как загрузить картинку в форму? Самый простой путь, которым непременно воспользовался бы каждый начинающий, — разместить на форме компонент image и загрузить в него картинку по умолчанию — так, как мы делали для компонента image на главной форме (см. главу 2). Но у любой формы есть свойство Canvas, а это значит, что мы без каких-то дополнительных компонентов можем рисовать прямо на форме — в том числе и размещать на ней готовое изображение. Есть разные способы для того, чтобы это сделать, и мы пойдем следующим путем (вероятно, не самым простым из возможных). Сначала мы в тексте модуля zastavka в секции public объявим объект типа BitMap:

public / Public declarations I

Bmplmage: TBitMap; (о&ычвляем объект типа BitMap}

Затем объявим переменную aRect (также в модуле zastavka)— прямоугольник, ограничивающий нашу картинку:

var

Form2: TForm2; aRect: TRect;

И, наконец, создадим для Form2 следующий обработчик события onPaint:

procedure TForm2. FormPaint (Sender: TObject) ; begin

Form2.Bmplmage:=T3itMap.Create; {создаем экземпляр BitMap) Form2.BmpImage.LoadFromFile(‘zastavka,bmp’);

(загружаем в него картинку) aRect:=Rect(0,0,500,400); (размеры картинки) Form2.Canvas.StretchDraw(aRect,Form2.Bmplmage); /загружаем картинку в канву формы)

end;

Созданный объект типа BitMap надо уничтожать после использования:

prooedure TForm2.FonnDestroy(Sender: TObject); begin

Bmplmage.Destroy; end;

При таком подходе картинка не внедряется в исполняемый файл, а будет загружаться динамически, поэтому файл с картинкой-заставкой придется "таскать" вместе с исполняемым файлом программы. Рассмотрение вопроса о том, как внедрить картинку в число ресурсов приложения и тем самым избавить нас от необходимости следить за размещением файла, мы отложим, а пока заметим, что такой подход имеет и свои преимущества: картинку всегда можно заменить без необходимости перекомпиляции проекта — лишь бы сохранилось имя файла. Более того, вы можете поэкспериментировать и убедиться, что собственные размеры картинки не имеют значения — она всегда будет растягиваться до размеров 500×400, независимо от исходных.

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

procedure TForm2.TimerITimer(Sender: TObject); begin

Timer1.Enabled:=false; end;

После этого мы перейдем опять к файлу SlideShow.dpr и внесем в него следующие изменения. После процедуры предотвращения повторного запуска у нас идут две строки:

Application.CreateFormfTForml, Formi); Appli cat ion. Run ;

Заменим их на следующий текст:

Form2:=TForm2.Create(Application);

{создаем экземпляр формы-заставки – автоматически она не создается! Form2.Show; fпоказываем заставку}

while Form2.Timer1.Enabled do Application.ProcessMessages;

(пустой цикл, пока таймер активен} Application.CreateFormCTForml, Formi); /создаем главную форму) Form2.Free; {уничтожаем заставку} Аррlication.Run; (запуска ем приложение)

Запустим приложение и проверим в работе. В дальнейшем мы покажем, как можно создавать задержку без использования компонента-таймера, и, кроме того, заставить заставку не просто исчезнуть, а красиво свернуться или, наоборот, расшириться во весь экран. Итак, заставка работает, но мы пока не добились главного — как сворачивать приложение в иконку сразу при запуске приложения?

Источник: Ревнч Ю. В.  Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

По теме:

  • Комментарии