скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Разукрасьте Ваше приложение (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;

...






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook