Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #50, ЯНВАРЬ 2005 г.

Real audio is not skinnable?

Woz3qK (woz3qk@mail.ru)

Спецвыпуск: Хакер, номер #050, стр. 050-074-4


Label1.Height:=intValue;

strValue:=skinINI.ReadString('Track', 'Text', '');

Label1.Caption:=strValue;

{устанавоиваем шрифт текста}

strValue:=skinINI.ReadString('Track', 'FontName', 'System');

Label1.Font.Name:=strValue;

{установим цвет}

Label1.Font.Color:=RGB(

skinINI.ReadInteger('Track', 'FontColorR', 0),

skinINI.ReadInteger('Track', 'FontColorG', 0),

skinINI.ReadInteger('Track', 'FontColorB', 0)

)

end;

А теперь обо всем по порядку. Переменные intValue и strValue используются как временные - в них мы будем помещать считанные с INI-файла значения. В первой переменной будут находиться числовые значения, а во второй - строковые. Conf - это INI-файл, который содержит имя директории, содержащей текущий скин (который в данный момент используется, а при смене скина это значение меняется). В переменной Path мы и прочитаем это имя каталога. Далее читаем из каталога со скином файл skin.ini. Числовые значения параметров (SizeX, PosY и т.д) помещаем в intStr, а затем в соответствии с этими значениями изменяем размеры и позиции элементов (например - Image2.Width, Label1.Top). Для чтения строк нам понадобится strValue. Строковые значения у нас имеют имя файла, текст и имя шрифта. Переменные sPlayMDown. sPlayMUp имеют тип TPicture. sPlayMDown содержит картинку, которая отображается при нажатии на этот элемент формы. А вторая (sPlayMUp) - картинку, отображаемую при отпускании кнопки мыши. При чтении sPalyMUp мы сразу же устанавливаем эту картинку в качестве картинки элемента, чтобы ее сразу было видно. Label1.Font.Name принимает значение с именем шрифта, который мы собираемся использовать. Обрати внимание, что при отсутствии в системе этого шрифта возникнет ошибка (Label1.Font.Color содержит в себе цвет текста). У нас цвет хранится в виде трех составляющих, и нужно перевести этот цвет в RGB. Для этого - одноименная функция RGB, которая принимает три значения байт и преобразовывает их. Все. Теперь приступим к обработчикам.

Ниже приведены обработчики событий нажатия и отпускания кнопок мыши для второго image, a остальные, разумеется, можно увидеть в исходнике на диске.

procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

{при нажатии на картинку, она меняется}

Image2.Picture:=sPlayMDown;

end;

procedure TForm1.Image2MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

{возвращаем все на родину}

Image2.Picture:=sPlayMUp;

end;

Кстати, неплохо было бы написать обработчик ошибок, чтобы проверять отсутствие файла, неверные параметры и проч. Начинающие программисты забывают про это, а потом в самый неподходящий момент всплывают соответствующие глюки. Со временем приходит автоматизм и кодеры при открытии, чтении из файла, при переводе строк в числа и наоборот бессознательно ставят try, catch, finally (SEH правит миром! - прим. AvaLANche'а). Это я перекладываю на широкие плечи читателя.

Нужные элементы можно добавлять по аналогии. Как видно из листинга и INI-файла, у имаджей (кроме фона) есть две картинки. Одна - в нормальном состоянии, а вторая - при нажатии. Потому я и использую OnMouseDown. Когда срабатывает событие на нажатие кнопки мыши, картинка меняется, а когда срабатывает OnMouseUp - восстанавливается прежняя. Я советую применить еще и картинку при наведении на image. Сделать это можно при событии OnMouseMove. Выглядит действительно приятно.

Назад на стр. 050-074-3  Содержание  Вперед на стр. 050-074-5