Home > Delphi, Did You Know > Menampilkan Informasi Package pada BDS SplashScreen

Menampilkan Informasi Package pada BDS SplashScreen


Pada artikel kali ini akan dibahas sesuatu yang sedikit berbeda, yaitu bagaimana menampilkan informasi package pada jendela splash screen BDS (Borland Developer Studio) ketika package yang dinginkan di-load di memory oleh Delphi. Cukup simple dan sepele namun pada beberapa kasus akan sangat berguna. Saya rasa Anda semua sudah mengetahui apa dan bagaimana bentuk jendela splash BDS, namun demikian, bagi yang belum mengetahui dan penasaran, berikut saya sertakan gambar nya.

original splash

Pada gambar di atas, dapat dilihat informasi package yang sedang di load, misalnya ada Rave Reports Borland Edition. EurekaLog dan sebagainya. Nah penampilan informasi itulah yang akan dibahas pada artikel ini.

Hack Jendela Splash ?

Oke, salah satu hal yang dipikirkan untuk menambahkan entri informasi ‘loading’ package adalah dengan melakukan ‘hack’ jendela Splash. Pertama, dapatkan handle jendela Splash BDS. Bermodal handle tersebut, Untuk menambahkan teks status, buat object label dari kelas TLabel, set Parent ke handle jendela splash, set caption dengan teks informasi status yang diinginkan dan atur koordinat posisi sebaik mungkin. Cukup mudah namun tidak elegan.

Open The Door

Ya, teknik diatas menurut saya tidak elegan karena Delphi menyediakan solusi khusus untuk hal tersebut. Delphi menyediakan API untuk berinteraksi dengan elemen – elemen yang ada di Delphi.

Delphi Help:
You can extend and customize the IDE with your own menu items, tool bar buttons, dynamic form-creation wizards, and more, using the Open Tools API (often shortened to just Tools API). The Tools API is a suite of over 100 interfaces that interact with and control the IDE, including the main menu, the tool bars, the main action list and image list, the source editor’s internal buffers, keyboard macros and bindings, forms and their components in the form editor, the debugger and the process being debugged, code completion, the message view, and the To-Do list.

Sudah ada gambaran?
… Lanjut.

Unit utama dari ToolsAPI, dimana interface dan service utama dideklarasikan terletak pada unit ToolsAPI.pas, yang terletak pada folder $(BDS)\Source\ToolsAPI dimana $(BDS) adalah folder dimana BDS di-install, misalnya C:\Program Files\Borland\BDS\4.0.

Untuk berinteraksi dengan jendela splash, kita menggunakan interface IOTASplashScreenServices:

ToolsAPI Documentation:
The IOTASplashScreenServices is the first service available during product startup, which is why it is available as a separate specific global variable. When this interface is created, the BorlandIDEServices interface is unavailable since it has yet to be initialized.

Sedangkan Method yang digunakan untuk menampilkan informasi adalah AddPluginBitmap dan AddProductBitmap.

IOTASplashScreenServices.AddPluginBitmap Documentation:
Any IDE plugin may provide an image to be displayed on the splash screen as the product is initializing. If AddPluginBitmap is called, AddProductBitmap should *NOT* be called or a duplicate entry will be displayed. The bitmap should be 48×48 pixels with the lower-left pixel indicating the transparent color. If IsUnRegistered is true, the caption will be painted red. LicenseStatus will be shown in parentheses after the caption. SKUName will be appended to the caption.

procedure AddPluginBitmap(const ACaption: string; ABitmap: HBITMAP;
  AIsUnRegistered: Boolean = False; const ALicenseStatus: string = '';
  const ASKUName: string = '');

procedure AddProductBitmap(const ACaption: string; ABitmap: HBITMAP;
  IsUnRegistered: Boolean = False; const ALicenseStatus: string = '';
  const ASKUName: string = '');

Jump to the Code

Nah setelah mengetahui teknik yang digunakan, langkah selanjutnya adalah bagaimana menerapkan teknik tersebut pada package yang diinginkan. Cukup mudah, tinggal jalankan method AddPluginBitmap atau AddProductBitmap pada bagian Initialization.

Misalkan saya mempunyai kode package sebagai berikut (beberapa baris kode yang tidak perlu telah dihilangkan):

package kumpulan;

{$R *.res}
...
{$DESCRIPTION 'Bayu''s components n unsorted collections'}
...
contains
  FlatDBGrid in 'FlatDBGrid.pas',
  EnhancedProgressBar in 'EnhancedProgressBar.pas';
end.

Rutin AddPluginBitmap dapat saya letakkan pada unit FlatDBGrid.pas atau EnhancedProgressBar.pas. Namun untuk mempermudah pemahaman dan kode yang jelas, saya membuat unit baru yaitu RegisterMyPackage.pas yang hanya berisi rutin untuk menjalankan method AddPluginBitmap dan deklarasi penyertaan resource RegisterMySplash.dcr yang berisi bitmap yang akan digunakan pada saat menjalankan method AddPluginBitmap. Sehingga kode package kumpulan menjadi:

package kumpulan;

{$R *.res}
{$R 'RegisterMySplash.dcr'}
...
{$DESCRIPTION 'Bayu''s components n unsorted collections'}
...
contains
  FlatDBGrid in 'FlatDBGrid.pas',
  EnhancedProgressBar in 'EnhancedProgressBar.pas',
  RegisterMyPackage in 'RegisterMyPackage.pas';
end.

Langkah berikutnya yang terpenting adalah isi dari unit RegisterMyPackage.

unit RegisterMyPackage;

interface

implementation

uses
  ToolsAPI, Windows, Graphics;

resourcestring
  resPackageName = 'Bayu Prasetio''s Components Collection';
  resLicense = 'Internal Usage';

procedure RegisterSplashScreen;
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  bmp.LoadFromResourceName(HInstance, 'SPLASH');
  SplashScreenServices.AddPluginBitmap(resPackageName, bmp.Handle, False, resLicense, '');
  bmp.Free;
end;

initialization
  RegisterSplashScreen;

end.

Pada bagian implementasi pada unit RegisterMyPackage.pas berisi prosedur RegisterSplashScreen dengan rangkaian perintah sebagai berikut:

  • Buat object bmp yang merupakan kelas dari TBitmap. Object ini digunakan untuk menampung gambar yang ingin ditampilkan pada jendela splash
  • Isikan object bmp dengan gambar yang diambil dari resource, dalam hal ini gambar dengan pengenal ‘SPLASH’. Gambar yang dimaksud adalah gambar yang sudah dimasukan ke dalam resource RegisterMySplash.dcr
  • Jalankan method AddPluginBitmap sesuai dengan parameter yang disertakan. Parameter pertama adalah informasi nama package yang ingin ditampilkan pada jendela splash. Parameter kedua merupakan handle dari gambar yang ingin ditampilkan. Parameter ketiga merupakan flag kondisi registrasi plugin, jika Trus maka plugin belum terdaftar (unregistered), jika False maka sudah terdaftar (registered). Jika parameter ini bernilai True, maka warna teks yang ditampilkan berubah menjadi warna merah. Parameter keempat adalah informasi lisensi yang digunakan. Dalam hal ini saya menggunakan ‘InternalUsage’. Anda bisa menggunakan teks ‘GPL’ atau ‘MPL 1.1’ atau ‘Registered’ atau teks lain atau bahkan tidak sama sekali. Parameter kelima merupakan informasi versi SKU.
  • Bebaskan object bmp

Agar prosedur RegisterSplashScreen secara otomatis dijalankan ketika package di-load, maka tambahkan rutin untuk menjalankannya pada bagian initialization.

Dan berikut cuplikan jendela splash:
modified splash

Semoga bermanfaat.

Categories: Delphi, Did You Know
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: