Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 628
Благодарности: 51

Профиль | Отправить PM | Цитировать


Обещанный мануал начал писать в поезде, т.к. являюсь счастливым обладателем КПК. Пожалуй самое сложное при создании графического бутменю это графическое оформление, для этого нужно чуть-чуть фантазии и немного уменеия работы с каким-нибудь граф.редактором. Это касается как CD-Shell так и EasyBoot.

CD-Shell
сдшелл позволяет использовать достаточно гибкий скриптовый язык похожий на используемый в batch-файлах, но гораздо более функциональный. Кроме того сдшелл является модульным, т.е. за счет различных модулей получает новый функционал (Например: memtest - утилита позволяющая тестировать память, rpm - partition manager и ряд других).
Для работы помимо самого CD-Shell'а потребуется также модуль к нему bcdw 2.0a1 (см.прикрепленный файл), кот. и привносит в CD-Shell все возможности обычного bcdw + такие возможности как отображение gif файлов, что очень полезно т.к. bmp-формат которым оперирует cdshell достаточно "тяжёлый", что напрямую влияет на скорость загрузки и работы уже готового меню.
Сд-шелл позволяет работать в 3х режимах: консольном - режим командной строки, в кот. можно выполнять скрипты и команды, текстовом меню - аналог меню bcdw и графическом. Для нас интересен прежде всего графический режим. Как я уже говорил ранее, в этом случае все элементы нашего меню будут явл.картинками (даже текст).
Перед началом работы необходимо поместить папку "boot" из архива с программой CD-Shell в корневой каталог вашего диска, затем из архива bcdw20a1, переписать содержимое папки "cdsh" в туже самую папку "boot" в корневом каталоге вашего будущего диска.
должно получиться примерно вот так (часть модулей можно спокойно поудалять, если они вам не нужны):
Код: Выделить весь код
BOOTCD
.....+Boot\
.........+bcdwdemo\	- папка с ресурсами и исполнимым скриптом CD-Shell
..............bcdwdemo.cs
..............textmode.ini
..............item_a.gif
..............item_p.gif
..............item_07.gif
..............item_08.gif
..............item_06.gif
..............item_05.gif
..............item_04.gif
..............item_03.gif
..............item_02.gif
..............item_01.gif
.........+fonts\
.........+graphics\	- папка с ЛОГО картинками (csi - картинка 640x480)
..............splash.csi
..............splash.bmp
.........+keymaps\
.........+modules\
..............isolinux.csm
..............script.csm
..............basic.csm
..............boot.csm
..............diskemu.csm
..............extend.csm
..............history.csm
..............macro.csm
..............bcdw.csm
..........cdshell.ini	- стартовый файл для запуска скрипта(ов)
..........cdsh.bin
..........loader.bin
.....+I386\
......win51ip.sp2
......bootfont.bin
......win51
......win51ip
Принцип работы следующий:
Загружается CD-Shell лоадер кот.прежде всего подгружает ЛОГО-картинку, если она существует в папке graphics. CD-Shell умеет работать с 2мя типами файлов - splash.csi (640х480 32бита), к CD-Shell прилагается утилита кот. конвертит bmp в csi и splash.bmp (320x240 8бит).
Затем если есть файл cdshell.ini, лоадер выполняет команды указанные в нем, в нашем случае это команда на запуск скрипта bcdwdemo.cs
А уже скрипт подгружает нужные картинки и отслеживает нажатия клавишь и др. действия.
Для нас на первых порах интересны как раз именно эти файлы cdshell.ini и bcdwdemo.cs
cdshell.ini
Код: Выделить весь код
cd bcdwdemo
script bcdwdemo.cs
Слегка модифицированный скрипт bcdwdemo.cs
Ненужно пугаться обилия незнакомых команд (да и так уж они незнакомы?). Для нас важны всего 3 блока в данном файле:
1. собственно блок выполнения команд при запуске какого-либо пункта меню (т.е. что происходит после нажатия ENTER на каком-нибудь из пунктов меню)
состоит из следующих возможных команд
i01_go: - метка перехода (аналогична меткам в batch-файлах)
bcdw SetTextVideoMode - загрузка шрифта по умолчнанию
show console - переход в консольный режим
print "\n" - вывод пустой строчки (аналог echo. в batch-файлах)
print "Boot from hard disk...\n" - вывод текста и перевод каретки на след. строку
bcdw Boot C:\ - загрузка с диска C:
goto ixx_go_err - переход на метку ixx_go_err:, в случае ошибки загрузки с Диска С:


Возможные bcdw команды:
bcdw Dialog "bcdw_ini_filename" - загрузка меню bcdw
bcdw Boot img_filename (or boot command) - загрузка img-образа или команда на загрузку с дискетки A: или жесткого диска C: D: ...
bcdw SetGraphicsVideoMode 640 480 32 - установка разрешения экрана в 640х480 32 бит (разрешения могут самые разл. помните что не все они поддерживаются вашей карточкой, и также высокие разрешения будут медленны в рбаоте)
bcdw ShowGif filename 0 0 WaitKey - отобразить гиф-файл в позиции 0 - по оси X и 0 - по оси Y, после чего скрипт ожидает нажатия клавиши от пользователя (NoWait - не ждет)
bcdw ShowGif filename center center 30 - отобразить гиф-файл по центру экрана и подождать 30 сек, затем продолжить скрипт
bcdw SetTextVideoMode font_filename - переход в консольный режим и загрузка указанного шрифта из файла
bcdw CheckForBcdw - проверить явл. ли текущий диск диском с BCDW
bcdw FindBootableCDLetter - найти букву диска
bcdw Reboot - презагрузка
bcdw PowerOff - выключение

Команды по любому модулю можно получить путем загрузки CD-Shell'а в консольном режиме и выполнением команды например help bcdw (в коснсольном режиме можно загрузить зажав клав. CTRL при загрузки граф. бутменю или удалив наш файл cdshell.ini)

2. Блок загрузки картинки(ок) бутменю (координаты по X и Y)
bcdw ShowGif item_01.gif 0 0
bcdw ShowGif item_02.gif 0 55
bcdw ShowGif item_03.gif 0 110
bcdw ShowGif item_04.gif 0 165
bcdw ShowGif item_05.gif 0 220
bcdw ShowGif item_06.gif 0 275
bcdw ShowGif item_07.gif 0 330
bcdw ShowGif item_08.gif 0 385


3. Блок отработки действий при нажатиях заданных клавиш
i01_active: - метка перехода
bcdw ShowGif item_a.gif 0 0 WaitKey - загрузка картинки селектора (рамки) в активном состоянии, т.е. на картинку кот. была загружена в блоке 2 накладывается картинка селектора,
i01_autorun:
bcdw ShowGif item_p.gif 0 0 - загрузка картинки кот. отображается на месте селектора при смещении самого селектора на др. пункт (восстанавливает оригинальный вид картинки)
if $BCDW_LastKey == key[up]; then goto i08_active - при нажатии клавиши вверх, происходит переход на пункт № 8 (на метку i08_active), т.е. на посл. пункт бутменю
if $BCDW_LastKey == key[down]; then goto i02_active - при нажатии клавиши вниз, происходит переход на пункт № 2 (на метку i02_active), т.е. на сдвигаемся на 1 пункт ниже текущего
if $BCDW_LastKey == key[enter]; then goto i01_go - при нажатии клавиши ENTER, выполняем команды нужные для запуска данного пункта (переходим на метку i01_go)
Call FKeys - переход на метку Fkeys, где происходит проверка не были ли нажаты клавиши F1-F8 или клавиша ESC, в случае если условие подтверждается выполняются переход на нужный пункт из блока 1 и отрабатываются нужные команды.
return - возврат в текущее положение скрипта после выполнения всех Команд из FKeys
goto i01_active - если были нажаты не заданные клавиши то переходим в начало данного блока и выполняем все по новой.


Скрипт сперва проверяет доступность режима VESA вашей видеокарты, если все ок, то начинается отрисовка графики бутменю (в моём случае это 1 картинка, в случ.примера реаниматолога неск-ко - каждая из которых явл.пунктом меню. Считаю что использование одной картнки предпочтительней с точки зрения оптимизации общего объема). При отрисовке картинки задаётся её левый верхний угол.
После этого происходит отрисовка картинки селектора (рамка выбора отдельного пункта) на дефолтном пункте и с заданным таймаутом.
Необходимо помнить, что селектор накладывается оверлэйем (т.е. Перекрывает картинку кот.лежит под ней), и после сдвига селектора на др.пукт вверх или вниз нужно восстановить оригинальный вид исходной картинки, для этого на масто селектора накладывается еще одна катинка. Достаточно коряво неправдали? Жизнь облегчается тем что модуль bcdw позволяет использовать прозрачные гифы.

На самом деле сам процесс настройки программы очень прост, достаточно посмотреть пример от реаниматолога и слегка подпраивть его под свое меню.

Особое внимание советую уделять оптимизации готовой картинки (кто использует фотошоп испоьзуйте пункт save for web - чтобы добиться оптимального соотношение кач/размер картинки). Объем файла не должен превышать 100 кб. Иначе возможен сбой с сообщ. О нехватке основной памяти.
В качестве селектора можно использовать анимационные гифы.
Если ваше картинка с бутменю занимает не полностью весь экрна, то желательно использовать хотя бы одноцветное лого, иначе на заднем фоне, незанятым картинкой возможно будет видно команды консоли.

P.S. Это пока основа, я думаю со временем я ее расширю и внесу еще некоторые пояснения и уточнения.

Последний раз редактировалось EgOrus, 03-08-2007 в 17:53.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:45, 17-12-2005 | #11