Версия для печати
Вывод информации о пакете в Splash
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1334Дмитрий Кузан
дата публикации 25-12-2007 03:04Меня всегда, как разработчика компонентов интересовала, как в новых версиях Delphi (начиная с вер. 2005) выводится информация о загружаемых пакетах в Splash-окне которое показывается при загрузке самой среды (см.рис 1).
рис.1Очень хотелось сделать так же для собственного сборника компонент. Долго не доходили руки, однако время пришло и наконец-то ежедневную сквозь рутину я добрался до решения, которое и хочу вам представить.
Первое что нам нужно сделать это создать ресурс и поместить в него пиктограмму, которую мы будем выводить. Например, ресурс назовем RegisterSplashScreen.res и битмап поместим в секцию SPLASH (см.рис 2).
рис.2Далее в модуле, где происходит регистрация компонент, подключим данный ресурс:
{$R RegisterSplashScreen.res}Так как вывод на spalch-окно появился совсем недавно, а именно начиная с Delphi 2005 и выше мы должны предусмотреть, что пакет может собираться в более ранних версиях поэтому мы должный определить версию компилятора в котором собирается пакет. Делается это с помощью предопределенных директив VERxx где версия Delphi представлена след.константами:
- VER80 -— Delphi 1
- VER90 -— Delphi 2
- VER93 -— C++Builder 1
- VER100 -— Delphi 3
- VER110 -— C++Builder 3
- VER120 -— Delphi 4
- VER130 -— Delphi 5
- VER140 -— Delphi 6
- VER150 -— Delphi 7
- VER160 -— Delphi 8
- VER170 -— Delphi 2005 (9)
- VER180 -— Delphi 2006 (10)
- VER185(190) — Delphi 2007 (11)
Используя эти предопределенные директивы, определим собственную директиву, по которой будем определять — разрешать или нет вывод в Splash-окно или нет. Определяем так.
{$IFDEF VER170} // Delphi 9.0 {$DEFINE SPLASH} {$ENDIF} {$IFDEF VER180} // Delphi 10.0 {$DEFINE SPLASH} {$ENDIF} {$IFDEF VER185} // Delphi 11.0 {$DEFINE SPLASH} {$ENDIF}Далее в секцию Uses подключим модуль ToolsAPI.pas при условии что версия Delphi 2005 и выше -
Uses Classes, {$IFDEF SPLASH} ToolsAPI, Graphics, {$ENDIF} DesignIntf;Подводные камни: Почему-то в ToolsAPI.pas вместо модуля uDockForm был указан DockForm в секции Uses. Соответственно ToolsAPI не компилировался. После поисков — DockForm.pas был не найден, зато был найден uDockForm.pas. После исправления DockForm на uDockForm модуль ToolsAPI.pas скомпилировался на ура.
Ну и наконец создадим процедуру вывода RegisterWithSplashScreen и используя метод SplashScreenServices.AddPluginBitmap выведем наш логотип и название пакета на Splach-окно, при условии что версия Delphi позволяет—
{$IFDEF SPLASH} procedure RegisterWithSplashScreen; var Bmp: TBitmap; begin // Register TestSplash Icon on Delphi Splash Screen Bmp := TBitmap.Create; Bmp.LoadFromResourceName( HInstance, 'SPLASH' ); try SplashScreenServices.AddPluginBitmap('KD Pack - Component Package', Bmp.Handle, False, 'KDPack - Kuzan component package', '1.0.0.0'); finally Bmp.Free; end; end; {$ENDIF}в методе регистрации внесем код вызывающий наш процедуру при первичной регистрации компонента.
{ Общая регистрация компонентов } procedure Register; begin …. {$IFDEF SPLASH} RegisterWithSplashScreen; {$ENDIF} …. end;Компилируем, перезапускаем Delphi и любуемся.