Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Разукрасьте Ваше приложение (Skins)


Открылся благотворительный фонд сбора средств на новый Boening 747 для глобальной реконструкции здания Microsoft.

SkinForm - это компонент, который поможет Вам создать "не-квадратное" окно и вто же время применить к нему так называемую технологию "skin", наподобие таких популярных программ как WinAMP, WPlay ..., зачем тратить часы на программирование, когда это можно сделать за пару минут! Скачать сам компонент можно с http://www.qwerks.com/download.asp?ProductID=2447. WYSIWYG скин билдер, который входит в состав архива, предназначен для создания информационного файла, описывающего структуру нашей формы. Всё, что надо сделать - это создать несколько картинок, и нарисовать кнопки, текстовые поля и т.д.. Есть возможность постоянно смотреть превью!

Теперь посмотрим, какие нам предоставлены возможности:

  • поддержка файлов bmp и jpeg
  • поддержка графических кнопок, а так же переключающиеся и радои кнопки
  • поддержка текста, графического текста и цифр
  • поддержка графического track bar
  • поддержка multi skin-ов, то есть Вы можете создать свой скин для каждой формы приложения
  • поддержка внутренних скинов, то есть скины могут быть сохранены в ресурсном файле

Теперь наши действия:

  • Создаём bitmap файлы для скина
  • Запускаем Skin Builder для создания информационного файла
  • Создаём новый проект.
  • Помещаем компонент TSkinForm в форму
  • Компилируем

Посмотрим на script файл, созданный SkinBuilder-ом:


[VERSION]
Ver=210 // Версия скин-файла 

[BITMAPINFO] 
MaskBitmap=PlayerMask.bmp 
// Bitmap файл маски поверхности формы 
MouseUpBitmap=PlayerMain.jpg 
// Bitmap файл, если кнопка мыши была отпущена 
MouseDownBitmap=PlayerSel.jpg 
// Bitmap файл, если кнопка мыши была нажата 
MouseOnBitmap=PlayerSel.jpg 
// Bitmap файла, если на объекте находится курсор мыши 
NumbersBitmap= 
// Bitmap файл для графических цифр (не обязательно)
TextBitmap= 
// Bitmap файл для графического текста (не обязательно) 

[HOTAREAINFO] 
Count=19 // Общее количество кнопок 
// Описание каждой кнопки 
// number=ID, top, left, width, height, hint [, button state, group name] 
// Значения в [ ] не обязательны 
1=BUTTON_PLAY, 54, 165, 34, 35, Play/Pause 
2=BUTTON_STOP, 129, 165, 19, 35, Stop 
3=BUTTON_NEXT, 90, 165, 18, 17, Next 
4=BUTTON_PREV, 109, 165, 18, 17, Previous 
... 

[DISPLAYINFO] 
Charset=1 // Charset текстовой области 
Count=3 // количество тектовых полей 
// Описание каждой текстовой области 
// number=ID, font name, bold, italic, size, color, top, left, style, default text, hint, width, height 
1=TEXT_LEN, Arial, TRUE, FALSE, 9, $00366835, 116, 137, Normal, [00:00], Length, 51, 18 
2=TEXT_POS, Arial, TRUE, FALSE, 12, $00366835, 55, 133, Normal, 00:00, Position, 52, 23 
3=TEXT_SONG, MS Sans Serif, FALSE, FALSE, 7, $00366835, 56, 112, Normal, Song name, Song name, 111, 21 

[TRACKBARINFO] 
Count=2 // Количество track-баров 
// Описание каждого трак-бара 
// number=ID, trackbar bitmap file, trackbar bitmap file, top, left, length, style, position, hint 
1=TRACKBAR_VOLUME, TrackBar.BMP, TrackBar.BMP, 79, 205, 88, H, 65, Volume 
2=TRACKBAR_POS, TrackBar.BMP, TrackBar.BMP, 79, 217, 88, H, 0, Time

Ну вот Ваше приложение и разукрасилось и, как видите, безо всякого программирования.

Теперь можно добавить код, чтобы перехватывать события на кнопках - MouseUp, Down, Over ...

Далее следует пример кода:


...

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Загружаем скин файл
  SkinForm1.LoadDefaultSkin;
  SkinForm1.SetDisplayText('VOLUME', IntToStr(SkinForm1.GetTrackBarPos('TRACKBAR_VOLUME')));
  SkinForm1.SetDisplayText('TIME', IntToStr(SkinForm1.GetTrackBarPos('TRACKBAR_POS')));
  SkinForm1.SetTrackBarMinMax('TRACKBAR_VOLUME', 20, 80);
end;

procedure TForm1.SkinForm1MouseUpNotify(ID: string; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  pos: TPoint;
begin
  if (Button = mbLeft) then
  begin
    if ID = 'BUTTON_EXIT' then
      Close;
    if ID = 'BUTTON_MINIMIZE' then
      Form1.Perform(WM_SYSCOMMAND, SC_MINIMIZE, 0);

    if ID = 'BUTTON_MENU' then
    begin
      pos := ClientToScreen(Point(X, Y));
      PopupMenu1.Popup(pos.x, pos.y);
    end;
  end;

  if (Button = mbRight) then
  begin
    pos := ClientToScreen(Point(X, Y));
    PopupMenu1.Popup(pos.x, pos.y);
  end;

...

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay