Версия для печати


Вывод информации о пакете в 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 представлена след.константами:

Используя эти предопределенные директивы, определим собственную директиву, по которой будем определять — разрешать или нет вывод в 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 и любуемся.