Отправляет email-рассылки с помощью сервиса Sendsay

Borland C++ Builder - всякая всячина

  Все выпуски  

Borland C++ Builder всякая всячина (№10. Splash-форма при запуске программы)


Служба Рассылок Subscribe.Ru

Приветствую всех получателей рассылки Borland C++ Builder - всякая всячина!

№10. Splash-форма при запуске программы

 

"Все, что ты делаешь, делай хорошо, даже если совершаешь безумство..."
(О. де Бальзак, вольная цитата)

Вы неоднократно могли видеть, как при запуске какой-нибудь программы перед открытием главного окна, а иногда и после его открытия в течении определенного времени, на экране висела заставка данного продукта с названием, рисунком, номером версии, лицензии, прогресс-баром загрузки и т.д. Это уже стало одним из показателей "серьезности" программы. Поэтому, любая программа, предназначенная для "наружного употребления", то есть, если пользоваться ей будет сторонний пользователь, следуя этому неписанному правилу, должна перед запуском главной формы показывать на экране заставку (Splash-форму).

Сделать это не так сложно: создайте новый проект (в моем примере он так и назван - SplashForm.bpr), главную его форму переименуйте в MainForm, создайте также еще одну форму, назовите ее, например, SplashForm, а ее .cpp-файл - Splash.cpp. Примостите на нее метку (TLabel) с размером шрифта поболее (>12пт) и с каким-нибудь текстом на ней или какой-нибудь рисунок, выбраный (или созданый) в качестве заставки к вашей программе (в этом случае для формы и рисунка установите свойства AutoSize= true. Установите для нее следующие свойства:

  1. AutoScroll= false
  2. AutoSize= true (рекомендуется при наличии рисунка на форме)
  3. BorderIcons - все элементы в false
  4. BorderStyle= bsNone
  5. BorderWidth= 0
  6. Caption= ""
  7. Color= clMoneyGreen (просто так, чтобы выделялась)
  8. FormStyle= fsStayOnTop
  9. Name= SplashForm
  10. Position= poScreenCenter

Да, добавьте еще на форму SplashForm таймер (TTimer), который будет задавать время показа формы на экране. Значение Interval для него установите от 3000 до 5000 милисекунд - как раз примерно это время и держатся на экране заставки большинства программ. Его свойство Enabled должно равняться true.

Теперь займемся взломом главного файла проекта - SplashForm.cpp: в нем, прежде всего, после строки
#pragma hdrstop
добавьте строку
#include "Splash.h" для того, чтобы из главного файла проекта можно было обращаться к свойствам и методам формы SplashForm. Кроме того, главную функцию приложения WinMain нужно преобразовать следующим образом (изменения выделены красным цветом):

//---------------------------------------------------------------------------
 
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
      Application->Initialize();
      Application->CreateForm(__classid(TMainForm), &MainForm);
      Application->CreateForm(__classid(TSplashForm), &SplashForm);
      SplashForm->Show();
      Application->Run();
    }
    catch (Exception &exception)
    {
      Application->ShowException(&exception);
    }
    return 0;
}
//---------------------------------------------------------------------------

Тем самым мы заставим Splash-форму появиться на экране раньше, чем появится главная форма приложения. Кроме того, требуется добавить пару строчек кода в модуль Splash.cpp, а именно - в обработчик события OnTimerтаймера SplashTimer:

//---------------------------------------------------------------------------
 
void __fastcall TSplashForm::SplashTimerTimer(TObject *Sender)
{
    SplashTimer->Enabled= false;
    Close();
}
//---------------------------------------------------------------------------
то есть, по истечении определенного выше времени, таймер прекращает отсчет и закрывает свою форму.

Вот и вся идея, в остальном - на ваше усмотрение: пробуйте, экспериментируйте... Да, если ваше приложение разрослось до недетских размеров (>1.5 мегабайт) и инициализируется больше 5-10 секунд, есть смысл повесить на Splash-форму погресс-бар (TProgressBar) и после создания каждой из форм приложения увеличивать его свойство Position на определенное число (в процентах от 0 до 100). При это следует учесть, что формы должны создаваться и запускаться в следующем порядке:

  1. Создается главная форма приложения
  2. Создается Splash-форма
  3. Запускается Splash-форма
  4. Создаются остальные формы приложения и увеличивается значение прогресс-бара
  5. ...
  6. Application->Run();

На сегодня - все, пишите и задавайте вопросы...



С уважением, Васильев Евгений...

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное