15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Разукрасьте Ваше приложение.

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

Теперь посмотрим, какие нам предоставлены возможности:
a.поддержка файлов bmp и jpeg
b.поддержка графических кнопок, а так же переключающиеся и радои кнопки
c.поддержка текста, графического текста и цифр
d.поддержка графического track bar
e.поддержка multi skin-ов, то есть Вы можете создать свой скин для каждой формы приложения
f.поддержка внутренних скинов, то есть скины могут быть сохранены в ресурсном файле

Теперь наши действия:
- Создаём 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 ...

The following is sample code:
...
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;
...