настя юсупова
07.06.2011 15:36:47
Описание телефона фирмы NOKIA, модели X3-02 Touch and Type
Сегодня хотелось бы рассмотреть довольно хорошую модель телефона, фирмы Nokia. Полное название дан ...
  Андрей Жуков
18.04.2011 07:39:06
Фото-проект Anode.ru
Как наверное заметили самые внимательные читатели, в начале 2011 года у Anode.ru появилось ответвл ...
 мультимедиа аудиоконтроллер
(в форуме "Звук и мультимедиа")
 Сопровождение и обслуживание веб сайтов
(в форуме "Продвижение и раскрутка Интернет-проектов")
 PSP Slim - необратимый БРИК
(в форуме "Прошивки и решение проблем с SonyPSP")
 проблема с Samsung sp1213n
(в форуме "Память и накопители")
 Посоветуйте бюдежтный коммуникатор на Windows Mobile
(в форуме "Мобильные телефоны, КПК и смартфоны")


.
  • Облако тегов

  • Архив

    «   Февраль 2012   »
    Пн Вт Ср Чт Пт Сб Вс
        1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29        

TCL и BBInterface. Не вместо, а вместе! (Продолжение)

По мере написания предыдущей статьи я нашёл ещё один способ создания иконок. По видимому автор растёт вместе со своими статьями. Я думаю это неплохо. Ну пробуем.

И так в меню любого элемента bbInterface - Global Options - Desctop OnDrop Command пишем:
@Script [@BBInterface Control Create Button|@tcl confIcon $$LastControl$$ {$$DroppedFile$$} $$Mouse.X$$ $$Mouse.Y$$]

И добавляем tcl-команду следующего содержания:
set iCount 0

Код
proc confIcon {icon file x y} {
broam "@BBInterface Control SetWindowProperty $icon Width 38"
broam "@BBInterface Control SetWindowProperty $icon Height 38"
broam "@BBInterface Control SetWindowProperty $icon X $x"
broam "@BBInterface Control SetWindowProperty $icon Y $y"
broam "@BBInterface Control SetAgent $icon Image Icon \"$file\""
broam "@BBInterface Control SetAgent $icon LeftMouseDown Run \"$file\""
if {[string trim $icon Button]>$::iCount} {incr ::iCount}
}


Разбор полётов. В первых двух способах мы использовали для создания иконок независимые способы. Сейчас всё немного по другому:
@Script [@BBInterface Control Create Button|@tcl confIcon $$LastControl$$ {$$DroppedFile$$} $$Mouse.X$$ $$Mouse.Y$$]

Конструкция @Script нам знакома. @BBInterface Control Create Button также (см способ создания иконок через bbInterface).

А как же работает наша процедура? Четыре параметра отвечают за передачу TCL четырёх переменных bbInterface:
icon - $$LastControl$$ - имя последнего созданного элемента.
file - $$DroppedFile$$ - путь к перенесённому на рабочий стол файлу.
x y - $$Mouse.X$$ $$Mouse.Y$$ - координаты X и Y мыши во время срабатывания скрипта.

Я думаю что вызов всех Bro@m в коде процедуры ясен. Разберём только строчку:
if {[string trim $icon Button]>$::iCount} {incr ::iCount}

оператор if - оператор сравнения. Простой (есть ещё и сложный) формат оператора if:
if {выражение} {действие}. Сначала вычисляется выражение, если оно истинно (=1) то выполняется действие, иначе ничего и скрипт продолжает выполняться дальше.

string trim $icon Button - команда string trim позволяет "обрезать" в строке начальные и конечные символы. Формат такой: string trim строка символы. В нашем случае из строки $icon вырезаются символы Button. Когда bbInterface создаёт кнопку командой @BBInterface Control Create Button то он присваивает ей имя ButtonX где Х первое свободное число. Вырезав из строки ButtonX символы Button мы оставляем только число X.

Далее мы сравниваем это число X с параметром iCount и если X больше то увеличиваем iCount на 1. Для чего это делается мы увидим чуть позже.

Здесь также необходимо пояснить использование ::iCount. Мы объявили iCount вне текста нашей процедуры (как в примере с TCL вариантом создания иконок). Значит если мы хотим использовать переменную внутри процедуры нам необходимо выполнить команду global. Но есть и второй вариант: использовать пространства имён. Объясню подробно. Всё что написано вне процедур выполняется в основном пространстве имён (оно обозначается :: ). Переменные заданные внутри тела процедуры (например её параметры) составляют другое пространство имён. Это позволяет использовать переменные с одинаковыми именами в процедуре и в основном коде, т.е. мы вполне могли бы задать в коде процедуры confIcon переменную iCount (set iCount 0 например) и она не совпадала бы по значению с переменной iCount заданной в основном коде. Если в теле процедуры необходимо использовать переменную из основного кода то можно получить к ней доступ через команду global или через указание её полного имени (включая пространство имён), что мы и делаем (::iCount). Попробуйте убрать в TCL варианте команду global и заменить iCount на ::iCount. Процедура будет работать точно также. Всё это выглядит немного заумно, но впоследствии я попробую на более ярких примерах показать варианты использования пространств имён.

TCL и BBInterface. Не вместо, а вместе!

Сегодня мы поговорим о файлах, ярлыках, drag'n'drop и прочих радостях Explorer. Научимся создавать скрипты для BBInterface. И конечно узнаем ещё немного о TCL.

Мы все привыкли пользоваться ярлыками. В меню Пуск, на рабочем столе, везде ярлыки. У BB свой подход к рабочему столу и создать на нём ярлык не так просто. Мы попробуем эмулировать ярлыки с помощью bbInterface и разберёмся во всех минусах и плюсах данного подхода.

Drag'n'drop привычный способ создания ярлыков, используем его и мы. В меню любого элемента bbInterface - Global options - Desktop OnDrop Command пишем:
@BBInterface Plugin Load [addicon] from system.rc

Теперь в папке с bbInterface создаём файл system.rc и вносим в него следующие строки:

Код
[addicon]
@BBInterface Control Create Button
@BBInterface Control SetWindowProperty $LastControl$ X $Mouse.X$
@BBInterface Control SetWindowProperty $LastControl$ Y $Mouse.Y$
@BBInterface Control SetWindowProperty $LastControl$ Width 38
@BBInterface Control SetWindowProperty $LastControl$ Height 38
@BBInterface Control SetAgent $LastControl$ Image Icon "$DroppedFile$"
@BBInterface Control SetAgent $LastControl$ LeftMouseDown Run "$DroppedFile$"


Сохраняем файл. Перезапускаем BB. Теперь перетянув любой
файл на рабочий стол мы автоматически создадим кнопку bbInterface с иконкой этого файла, а при нажатии на кнопку файл будет запущен. Чем не ярлык? smile8). Разбираемся:

@BBInterface Plugin Load [addicon] from system.rc - При перетаскивании (drag'n'drop) файла на рабочий стол надо выполнить скрипт [addicon] расположенный в файле system.rc. Естественно имя скрипта и файла могут быть любыми.

Теперь само содержание скрипта:
@BBInterface Control Create Button - Создать кнопку bbInterface.
@BBInterface Control SetWindowProperty $LastControl$ X $Mouse.X$ - Установить положение последнего созданного элемента по X в положение мыши по X. Тут использованы переменные bbInterface. Подробнее о них читаем в статье о bbInterface.
@BBInterface Control SetWindowProperty $LastControl$ Y $Mouse.Y$ - тоже самое только для Y.
@BBInterface Control SetWindowProperty $LastControl$ Width 38
@BBInterface Control SetWindowProperty $LastControl$ Height 38 - Устанавливаем размеры кнопки. Кнопка будет квадратной: 38 на 38 пикселей.
@BBInterface Control SetAgent $LastControl$ Image Icon "$DroppedFile$" - Изображение на кнопке иконка взятая их файла $DroppedFile$, то есть того файла который мы перетянули на рабочий стол.
@BBInterface Control SetAgent $LastControl$ LeftMouseDown Run "$DroppedFile$" - При нажатии на кнопку левой кнопкой мыши (простите за тавтологию) запустить перетянутый файл.

Несложно? Я тоже так думаю.

Попробуем другой подход - через TCL. Дежавю smile:). В меню любого элемента bbInterface - Global options - Desktop OnDrop Command пишем:
@tcl addIcon {$$DroppedFile$$} $$Mouse.X$$ $$Mouse.Y$$

Теперь открываем наш файл new.tcl и дописываем в него следующее:

Код
set icount 0

proc addIcon {file x y} {
global icount
broam "@BBInterface Control Create Button Icon$icount"
broam "@BBInterface Control SetWindowProperty Icon$icount X $x"
broam "@BBInterface Control SetWindowProperty Icon$icount Y $y"
broam "@BBInterface Control SetWindowProperty Icon$icount Width 38"
broam "@BBInterface Control SetWindowProperty Icon$icount Height 38"
broam "@BBInterface Control SetAgent Icon$icount Image Icon \"$file\""
broam "@BBInterface Control SetAgent Icon$icount LeftMouseDown Run \"$file\""
incr icount
}


Как обычно разбор полётов:
set icount 0 - устанавливаем значение переменной icount равное 0. Формат процедуры: set переменная значение.
proc addIcon {file x y} {...} - знакомо, создаём процедуру addIcon с тремя параметрами file x y.
global icount - Мы объявили переменную icount не в самой процедуре, а за её пределами. Соответственно использовать её просто так мы не сможем. Надо объяснить программе что переменная icount находиться за пределами процедуры, но её надо использовать. Формат команды: global переменная1 переменная2 переменнаяN. Мы указали только одну переменную, но можно указать любое их количство, отделяя имена одной переменной от другой пробелами.
broam "@BBInterface Control Create Button Icon$icount" - тоже знакомо, создаём кнопку bbInterface с именем Icon$icount. icount у нас равен 0 значит первая созданная кнопка будет называться Icon0.
broam "@BBInterface Control SetWindowProperty Icon$icount X $x"
broam "@BBInterface Control SetWindowProperty Icon$icount Y $y" - то же что и для bbInterface. Переменные x и y мы указали при создании процедуры. А их значение будет передаваться во время drag'n'drop файла и будет соответственно координаты X и Y мыши полученные из bbInterface.
broam "@BBInterface Control SetWindowProperty Icon$icount Width 38"
broam "@BBInterface Control SetWindowProperty Icon$icount Height 38" - аналогично bbInterface варианту. Устанавливаем размер кнопки.
broam "@BBInterface Control SetAgent Icon$icount Image Icon \"$file\""
broam "@BBInterface Control SetAgent Icon$icount LeftMouseDown Run \"$file\"" - и снова всё повторяться. Переменная file указанная при создании процедуры будет содержать полный путь к файлу перенесённо на рабочий стол BB. Про \" вместо " я тоже уже писал.
incr icount - процедура incr позволяет увеличить (или уменьшить) - значение переменной-параметра на определённое число. Формат: incr {имя переменной} {число}. Если число не указано, то оно принимается равным 1. Значит командой incr icount мы увеличили значение переменной icount на 1.

Вот такие вот два способа. Теперь о плюсах и минусах обоих способов.

Способ 1. Чистый bbInterface.
Главное достоинство этого способа в том что нам не приходиться заботиться о наименовании кнопки. bbInterface сам назовёт её Button и добавит первый свободный номер. Чем это хорошо читаем дальше.
Второй плюс - не нужен TCL. Многие отказываются от этого плагина и его возможностей в пользу быстродействия. Довольно спорный вопрос.

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

Способ 2. TCL
Основной плюс в том что мы (теоретически) знаем сколько иконок создано. Мы можем даже сохранять информацию о том какая иконка с каким файлом связана. Это способствует созданию простой системы управления иконками.

Лучше всего объяснить главный минус мне поможет пример. Попробуйте создать несколько иконок. Теперь перезапустите BB и перенесите на рабочий стол ещё несколько файлов. Они заменят существующие иконки. Дело в том что переменная icount после перезапуска снова стала равна 0. И иконки получают имена Icon0, Icon1, Icon2. Но так как элементы с такими именами уже существуют то bbInterface заменят их новыми. Как с этим бороться мы рассмотрим в следующей статье.

TCL продолжение

В прошлый раз я постарался рассказать о принципе работы с плагином bbTCL. Мы написали пару простых команд и подключили их BB. Сегодня я продолжу рассказ о TCL и его использовании для BB.

Пишем... калькулятор!
Попробуем написать нечто полезное. Открываем наш файл new.tcl и дописываем пару строк:
proc calcul {args} {
broam "@BBCore.Message Ответ:[expr $args]"
}
и сохраняем.

Теперь в папке с bbUberbox находим файл aliases.rc и в конце его допишем:
= @tcl calcul

#Внимание после calcul надо поставить два пробела!!!

Перезапускаем BB. Теперь в командной строке bbUberbox можно написать что-то в этом духе:
= 8*128
и получить ответ. Вот мы и написали простой "консольный" калькулятор. Будем разбираться...

С командами proc и broam мы уже знакомы. @BBCore.Message позволяет отобразить стандартный диалог с заданным текстом. Теперь новенькое. Команда expr выполняет математические операции: +, -, *, / и т.д. Формат такой: [expr выражение]
Команда заключена в квадратные скобки - это показывает TCL что команда должна вернуть некое значение после своей работы. В данном случаем команда вычисляет выражение и возвращает ответ. Чтобы лучше разобраться в это попробуем немного изменить нашу программу:
proc calcul {args} {
broam "@BBCore.Message Ответ:[expr 2+$args]"
}
Теперь наш калькулятор будет "неправильным": ответ всегда будет на два больше.

Умные почитав соответствующую документацию уже знают, что expr может вычислять не только простые арифметические операции, но и выполнять довольно сложные математические функции: acos cos hypot sinh asin cosh log sqrt
atan exp log10 tan atan2 floor pow tanh ceil fmod sin и некоторые другие. Их назначение для людей мало-мальски знакомых с математикой не будет вызывать проблем, а остальных отсылаю к всезнающему google.com . Формат для каждой из этих функций такой: функция(параметр). Например: [expr sqrt(4)] вернёт 2. Попробуем набрать = sqrt(4) в bbUberbox и найдём первый баг: bbUberbox не знает символа "(". Будем исправлять как умеем:
proc calcul {args} {
broam "@BBCore.Message Ответ:[expr [string map {\{ ( \} )} $args]]"
}
Начинается самое интересное smile:). Итак команда expr должна вычислить выражение: [string map {\{ ( \} )} $args]. string - команда TCL для работы со строками. У неё много вариантов. Например тот что мы используем (string map) позволяет заменить символы в строке по определённому правилу. У нас оно такое:
1. Меняем все символы { на символ (
2. Меняем все символы } на символ )
Раз команда заключена в кавычки она должна вернуть результат своей работы: новую строку с изменёнными по правилу символами. Итого во время выполнения команды calcul происходит следующее:
1. Команда string map выполняет замену символов по заданному правилу и возвращает результат.
2. Команда expr вычесляет выражение полученное после завершения команды string map и возвращает ответ.
3. Команда broam ... выводит ответ.

Пробуем пользоваться нашим калькулятором? в bbUberbox я ввёл:
= sqrt{4}*8+213
и получил ответ 229. Всё сходится неправда ли?

@TCL = Bro@m + TCL

Итак я начинаю серию статей о программировании на языке TCL для BB. Параллельно этому я опишу много новых Bro@m-команд, т.к. они неотъемлемая часть программирования для BB. Статьи будут построены на примерах и их описаниях. Вначале примеры будут очень подробные, но далее все простые нудные операции я буду опускать.

Приготовления.
Нам понадобиться:
Собственно сам BB (BBClean).
Плагин bbTCL 2.4.8
Плагин bbUberbox 0.1.3 для тестирования команд
Плагин bbInterface 0.9.9
Плагин bbOSD
Блокнот или любой удобный вам инструмент редактирования текстов. Я использую Programmers Notepad
У пользователей моей сборки BB всё это уже есть, а у кого нет то: BB4WIN вам в помощь.

Теоритические знания необходимые для понимания данной статьи:
Представление о командах BB. Читаем предыдущую статью.
Представление о плагине bbInterface. Читаем соответствующую статью.
Желательны (но не обязательны) минимальные знания программирования.

Первая программа.
Так уж сложилось, что при изучении любого языка начинают с программы которая выводит на экран сообщение "Hello World!".
Не будем нарушать традиции, открываем блокнот и пишем:

proc hiWorld {} {
broam "@BBInterface Control Create Label Hi"
broam "@BBInterface Control SetAgent Hi Caption StaticText \"Hello World!\""
}

Сохраняем файл под именем new.tcl например на диск C.
Теперь в директории с bbTCL находим файл tcl-bb.tcl
и вписываем в него следующую строчку:
source C:/new.tcl
Естественно можно расположить файл где вам угодно и записать не C:/new.tcl а полный путь к файлу.
Внимание: слэши должны быть прямые (/)!

Перезапускаем BB (Главное меню - Blackbox - Restart). Внимание: перезапуск требуется после каждого изменения\добавления команды.

Теперь нужно вызвать нашу команду. Вводим в командной строке bbUberbox следующую строчку:
@tcl hiWorld
и жмём Enter. Если вы всё сделали правильно то у вас на экране появиться новый элемент bbInterface с надписью "Hello World!".

Получилось? Я рад. А теперь попробуем построчно разобраться что же мы собственно сделали.

proc hiWorld {} {..} - процедура proc позволяет создавать новые команды. Формат такой: proc имяКоманды {параметры} {Скрипт}. Соответственно у нас имя команды hiWorld, параметров нет (скобки пустые {}), а Скрипт:
broam "@BBInterface Control Create Label Hi"
broam "@BBInterface Control SetAgent Hi Caption StaticText \"Hello World!\"".

broam "@BBInterface Control Create Label Hi" - процедура broam позволяет вызывать команды Blackbox (Bro@m). Формат такой: broam "команда". Команда должна быть заключена в кавычки. В данном случае команда:
@BBInterface Control Create Label Hi
которая создаёт элемент bbInterface метку с именем Hi.
Следущая команда:
@BBInterface Control SetAgent Hi Caption StaticText \"Hello World!\"
устанавливает текст выводимый на метке: Hello World!. Текст должен быть заключён в кавычки. Но почему я пишу \" вместо обычных "? Давайте разбираться, если бы было написано:
broam "@BBInterface Control SetAgent Hi Caption StaticText "Hello World!""
то TCL бы воспринял как команду:
broam "@BBInterface Control SetAgent Hi Caption StaticText"
и выдал бы ошибку. Значит нам надо "экранировать" ненужные символы " чтобы TCL не воспринимал их как конец команды. Для этого и служит специальный символ \.

Несложно? Смотрим дальше:
source C:/new.tcl
Процедура source позволяет подключить к TCL файл содержащий набор команд. Команда у нас пока одна, но это не страшно. Формат процедуры: source путькфайлу.

Теперь о вызове команды. Вызвали команду мы через командную строку Uberbox:
@tcl hiWorld
первый символ тут @, это говорит нам что @tcl это Bro@m команда, далее идёт hiWorld. Это имя написанной нами процедуры. Значит использую Bro@m @tcl мы можем вызывать любые написанные нами процедуры. Следовательно и способы вызова процедур аналогичны способу вызова обычных Bro@m. Попробуем другие варианты?

Открываем наш файл new.tcl и дописываем ещё пару строчек:
proc lastControl {control} {
broam "@BBOSD \"Последний созданный элемент: $control\""
}

Перезапускаем BB. Создаём новый элемент bbInterface кнопку и задаём действие: LeftMouseDown - Bro@m - @tcl lastControl $$LastControl$$.
Нажав на кнопку мы увидим сообщение:
Последний созданный элемент Button1
"А в чём смысл?" - спросите вы. Попробуйте теперь создать ещё один элемент bbInterface и снова нажать на кнопку. Вы увидите сообщение:
Последний созданный элемент ИмяСозданногоВамиЭлемента
Продолжать можно до бесконечности. Каждый раз при создании нового элемента и нажатии кнопки будет выводиться новое сообщение.

Наигрались? Тогда попробуем разобраться как же это работает:
proc lastControl {control} {..} - с этим мы уже знакомы. Но теперь мы создаём процедуру имеющую параметр. Мы назвали его control. Что это значит? Это значит что каждый раз при вызове процедуры нам необходимо передать ей некий параметр, который она будет использовать в своей работе.

Смотрим дальше:
broam "@BBOSD \"Последний созданный элемент: $control\""
Ага тоже понятно. Вызываем Bro@m-команду @BBOSD которая позволяет отобразить некий текст прямо на мониторе. Текст как и в предыдущем примере необходимо заключить в экранированные кавычки. Но что за надпись $control? Данная форма указывает TCL что ему надо вставить значение переменной control на это место скрипта. Указав control параметром нашей процедуры мы автоматически создали переменную с таким именем. И теперь можем её использовать. Не понятно? Тогда сделайте следующее: введите в командной строке bbUberbox (полезная штука как видите smile:)) вот это:
@tcl lastControl Пример
Вы увидите сообщение:
Последний созданный элемент: Пример
Теперь понятно? То что мы передаём нашей процедуре lastControl то и будет записано в переменную control и с помощью формы $control мы может вернуть её значение.

Но что же мы передаём процедуре при нажатии кнопки? В действии кнопки мы задали следующее:
@tcl lastControl $$LastControl$$
$$LastControl$$ это, как мы уже поняли, параметр нашей процедуры, и в данном случае это тоже переменная, но не TCL, а bbInterface. В ней содержится имя последнего созданного элемента. Благодаря этому мы и видим каждый раз при создании нового элемента новое сообщение с именем этого элемента.

Пожалуй на сегодня всё. Поле для размышлений я вам предоставил. А если кому то не терпится то советую почитать следующее:

1. http://www.opennet.ru/links/sml/36.shtml - здесь собраны ссылки на различную документацию по TCL
2. http://www.lostinthebox.com/viewtopic.php?f=50&t=2996 - официальный форум bbTCL
3. Брент Б. Уэлш, Кен Джонс, Джеффри Хоббс Практическое программирование на Tcl и Tk.
4. Разобраться в скриптах которые я использую в своей сборке. Незнаю насколько это полезно, но всё же.

@ - в массы! (ВР №4 2002г)

Уже не раз я упоминал про команды BB - bro@m. Сегодня я постараюсь объяснить/научить как ими пользоваться. Данная статья будет написана в стиле FAQ, на мой взгляд так новичкам будет проще разобраться.

Ступень 1. Узнавание
Что такое Bro@m? Bro@m - это встроенный скриптовый язык BB, а также команды которые он предоставляет. Любая такая команда начинается со знака - @. Что можно делать с помощью команд? Всё что может делать BB - контролировать окна, рабочие столы, плагины, элементы BBInterface, и т.д. и т.п.
Ступень 2. Понимание
Где можно посмотреть список доступных команд? В документации, но не всё так просто. BB построен таким образом, что каждый плагин может добавлять новые команды, так что придётся читать readme. Но есть ещё один способ узнать какие команды добавил тот или иной плагин. Для этого в меню настроек - настройки меню, надо включить опцию ShowBro@m. После этого зайдя в меню плагина(обычно правая кнопка мыши по панели плагина) увидим команды которые он использует:

Их можем использовать и мы. Какие команды поддерживает чистый BB, без плагинов? Переведённый список команд взятый из документации bbLean 1.16.

Команды меню:
@BBCore.ShowMenu - отображает закреплённые меню (или главное при отсутствии таковых).
@BBCore.ShowMenu Root - отображает главное меню.
@BBCore.ShowMenu Workspaces - отображает меню рабочих столов.
@BBCore.ShowMenu Icons - отображает в виде меню все свёрнутый окна на всех рабочих столах.
@BBCore.ShowMenu Configuration - отображает меню настройки.
@BBCore.ShowMenu <path> - отображает <папку> в виде меню.
@BBCore.ShowMenu <menu.rc> - отображает указанный фал меню. О формате файлов меню я уже писал: http://anode.ru/blog/BlackBox/195.php
@BBCore.HideMenu - Скрывает текущее меню.

Работа с окнами.
@BBCore.PrevWindow - переключение на предыдущее окно.
@BBCore.NextWindow - переключение на следующее окно.
@BBCore.PrevWindowAllWorkspaces - переключение на предыдущее окно для всех рабочих столов.
@BBCore.NextWindowAllWorkspac - переключение на следующее окно для всех рабочих столов.
@BBCore.RaiseWindow - переносит нижнее окно на верх.
@BBCore.LowerWindow - преносит верхнее окно вниз.
@BBCore.ShadeWindow -
@BBCore.CloseWindow - закрывает окно
@BBCore.MinimizeWindow - сворачивает окно.
@BBCore.MaximizeWindow - разворачивает окно.
@BBCore.MaximizeVertical -
@BBCore.MaximizeHorizonta -
@BBCore.RestoreWindow - восстанавливает окно.

@BBCore.MinimizeAll - сворачивает все окна.
@BBCore.RestoreAll - восстанавливает все окна.
@BBCore.CascadeWindow - выстраивает окна каскадом.
@BBCore.TileVertical -
@BBCore.TileHorizontal -

Команды для рабочих столов.
@BBCore.LeftWorkspace - переключение на предыдущий рабочий стол
@BBCore.RightWorkspace - ... следующий рабочий стол
@BBCore.MoveWindowLeft - переносит текущее окно на предыдущий рабочий стол.
@BBCore.MoveWindowRight - ... на следующий рабочий стол.
@BBCore.GatherWindows - собирает все окна на текущем рабочем столе.
@BBCore.AddWorkspace - Добавляет рабочий стол.
@BBCore.DelWorkspace - Удаляет последний рабочий стол.
@BBCore.EditWorkspaceNames - Редактирует имена рабочих столов, разделителем служит запятая.
@BBCore.SwitchToWorkspace n - переключает на рабочий стол с номером n (1..n).

Системные команды Blackbox.
@BBCore.toggleplugins - скрывает/отображает плагины.
@BBCore.aboutstyle - отображает информацию о текущем стиле.
@BBCore.aboutplugins - отображает информацию о подключенных плагинах.
@BBCore.reconfig - обновляет настройки стиля и настройки rc файлов.
@BBCore.restart - отключает и заново подключает все плагины.
@BBCore.exit ?-q? - выход из Blackbox. -q = без подтверждения.

Команды редактирования. Редактирование производится редактором указанным в настройках extensions.rc.
@BBCore.editstyle - Стиль.
@BBCore.editmenu - Меню (menu.rc).
@BBCore.editplugins - Плагины (plugins.rc).
@BBCore.editextensions - Дополнительные настройки (extensions.rc).
@BBCore.editblackbox - Основные настройки.
@BBCore.edit <Файл> - Открывает указанный файл для редактирования.

Команды завершения работы.
@BBCore.shutdown ?-q? - выключение компьютера. -q = без подтверждения.
@BBCore.reboot ?-q? - перезагрузка.
@BBCore.logoff ?-q? - завершение сеанса.
@BBCore.hibernate ?-q? - гибернация.
@BBCore.suspend ?-q? -
@BBCore.lockworkstation - блокирование.
@BBCore.exitwindows - отображает стандартный диалог выход Windows.

Прочие команды.
@BBCore.exec <комманда> - выполняет комманду.
@BBCore.style <файлстиля> - применяет указанный стиль.
@BBCore.rootCommand <комманда> - устанавливает изображение рабочего стола.
@BBCore.run - отображает стандартный диалог "Выполнить".
@BBCore.showAppnames - отображает список запущенных приложений.
@BBCore.message <текст> - отображает окно информации с указанным текстом.

Команды настройки.
@BBCfg.plugin.load <плагин> - загружает/выгружает плагин.
@BBCfg.plugin.inslit <плагин> - переключает слит режим для плагина
@BBCfg.plugin.add <путькплагину> - добавляет плагин в список и загружает его.

Данный список команд далеко не полный.
Ступень 3. Осознание
Как можно вызвать ту или иную команду на выполнение?
Способов очень много, перечислю самые распространённые:
1. Uberbox, BroamBox, bbRun - все эти плагины реализуют в том или ином виде командную строку, через которую можно не только запускать программы, но и вызывать команды. Очень полезно при тестировании новых команд.
2. bbKeys - команды можно запускать нажатием клавиш. О том как настраивать bbKeys, я уже писал, повторяться не буду.
3. bbInterface, bbIcons, bbDesctop, bbShelf - данные плагины позволяют создавать кнопки/иконки при нажатии на которые будет выполнена соответствующая команда. Сам я пользуюсь bbInterface, поэтому объясню на его примере: создаём кнопку - назначаем действие(например левая кнопка мыши LeftMouseDown) - Bro@m - @команда:

Более подробно про bbInterface можно почитать в предыдущей статье.
4. Меню. Команды можно вызывать через меню, добавив туда соответствующий пункт. О настройке меню написано в Главе 1 данной серии статей.
Также существует много специфических способов инициализировать вызов команды: bbMediator, bbSocket и т.д.
А как при выполнении одного действия выполнить сразу несколько команд? Для этого также есть командаsmile:) - @Script. Формат у неё такой: @Script [@команда|@команда|..|@команда]
Ступень 4. Творчество
Я пересмотрел документацию, посмотрел схожие плагины, но так и не нашёл нужной мне команды? Выход один - писать самому. Это не так уж и сложно. Есть несколько вариантов:
1. Написать соответствующий плагин на C,C++. Документацию по API BB можно найти на http://xoblite.net.
2. Написать нужную функцию на TCL. Для работы таких функций необходим плагин bbTCL.
3. Написать на любом языке программирования, который может работать с сокетами. Не самый лучший вариант: пострадает быстродействие, да и писать через сокеты не так уж и просто. Плагин bbSocket необходим для обработки таких функций.

Вот собственно и всё про Bro@m. Следующая статья будет про язык TCL и написание собственных команд для BB в частности.

Глава 3. Мой мир

Сегодня я расскажу о принципах работы с плагином BBInterface. Благодаря этому плагину каждый может сделать свой вариант интерфейса для BB. Я не буду описывать все возможности плагина - попрактиковавшись вы и сами сможете во всём разобраться. Я просто постараюсь на примерах показать как делается любой элемент интерфейса. Поехали.

Мы будем делать панельку проигрывателя - не слишком сложно, но в тоже время полезно. Что нам понадобится:
1. BBClean - любой версии.
2. BBInterface 0.9.9

Основы управления.
Основное меню любого элемента вызывается по Ctrl+правый клик по этому элементу интерфейса. Далее я буду просто писать "Menu". Размер элемента можно настроить: Alt + лево\право\верх\низ\ мышь. Переместить элемент: Ctrl + зажать левую кнопку мыши. Переименовать элемент можно через меню Menu элемента - Control Options - Control Name.

Шаг 0. Подготовительный.
Подключив плагин вы увидите новое окно с описанием основных принципов работы с BBInterface. Смело его удаляем: Menu - Interface Operations - Delete This Control. После этого появится новый элемент Last Control, с него и начнём.

Шаг 1. Создаём окно.
Menu Last Control - Interface Operations - Create New Control - Frame.
Появится новый элемент - окно. После этого можно удалить элемент Last Control: Menu Last Control - Interface Operations - Delete This Control. У окна может быть заголовок: Menu окна - Control Options - Has Title Bar. Теперь через Menu окна - Control Options - Caption - Static Text можно настроить что же будет написано в заголовке, у нас там будет "Проигрыватель". Вот что у меня получилось:

Шаг 2. Первая кнопка.
Особенностью окна является то что оно может содержать в себе другие элементы. Ими и займёмся: Menu окна - Interface Operations - Create Child Control - Button. Появится кнопка, но пока на ней нет действий она бесполезна. Добавим действие: Menu кнопки - Control Options - Left Mouse Down - Winamp - Previous Track Button. Это действие переключения на предыдущую песню. Проверяем: запускаем WinAmp и нажимаем Play. Теперь нажав на нашу кнопку мы переключимся на предыдущую песню. Неплохо было бы и обозначить нашу кнопку: Menu кнопки - Control Options - Caption - Static Text - <<. На кнопке появится надпись "<<". Создав ещё несколько кнопок и настроив их размер и расположение получим:

Шаг 3. Полоса прокрутки.
Полоса прокрутки обязательный элемент любого проигрывателя. Сделаем и мы такую: Menu окна - Interface Operations - Create Child Control - Slider. Необходимо чтобы наша полоса отображала именно текущую позицию песни проигрываемой в WinAmp: Menu полосы прокрутки - Control Options - Value - WinAmp - Track Position. Сделать так, чтобы при нажатии переключалось место воспроизведения тоже возможно, но для этого придётся использовать TCL. А это уже совсем другая история. Итак полоса есть, но выглядит "неправильно"? Идём в Menu полосы прокрутки - Control Options - Appearance и выбираем по душе. Я выбрал Scroll Bar. На данный момент наш проигрыватель выглядит так:

Шаг 4. А что играем то?
Не устали? Значит двигаемся дальше. Мы уже можем управлять основными действиями WinAmp, видим текущую позицию воспроизведения, но не видим, что именно воспроизводится. Непорядок! Делаем следующие: Menu окна - Interface Operations - Create Child Control - Label. Label - это текстовая метка (далее просто метка) позволяющая отображать различную информацию. Не забыв настроить размер и выполнив: Menu метки - Control Options - Caption - WinAmp - Track Title получим:

Шаг 5. Время.
Позицию воспроизведения визуально мы отобразили (полоса прокрутки). А можно сделать текстовое отображение данной информации? Да ещё так, чтобы видеть не только текущие время воспроизведения, но и полную длину трэка. Можно! Создадим новую метку: Menu окна - Interface Operations - Create Child Control - Label, и установи действия: Menu метки - Control Options - Caption - Compraund Text - Entry - $/$. Увидим такую надпись на нашей метке [?]/[?]. Теперь задаём значения: Menu метки - Control Options - Caption - Compraund Text Options - Text 1 - WinAmp - Time Elapsed и Menu метки - Control Options - Caption - Compraund Text Options - Text 2 - WinAmp - Time Total. Если вы ещё не выключали WinAmp, то увидите что то вроде этого:

Шаг 6. Громкость.
Что то мы забыли... А точно! В проигрывателе должна быть возможность регулировки громкости. Сделаем: Menu окна - Interface Operations - Create Child Control - Slider. У нас новая полоска "громкости". Надо задать значение: Menu полоски громкости - Control Options - Value - Mixer - а далее всё зависит от вашей звуковой карты. У меня это: Mixer - Realtek HD Audio output - Общая громкость - Общая громкость. Привычнее когда громкость настраивается вертикально, сделаем это: Menu полоски громкости - Control Options - Appearance - Vertical.

Шаг 7. А оно нам надо?
Постоянно видимая панель проигрывателя не всегда удобно да и места на рабочем столе занимает. Попробуем это исправить. Создаём новый элемент: Menu - Interface Operations - Create New Control - Button. Для действия зададим: Menu кнопки - Control Options - Left Mouse Down -
BBInterface Control - Global - название вашего окна - Visible
. Теперь перейдём к самому окну: Menu окна - Window Options - Make Invisible - Control Lose Focus.
После всех этих действий попробуйте сделать любое действие: запуск программы, банальный alt-tab или что там ещё на ум придёт. Панелька проигрывателя исчезнет, но при нажатии на кнопку возникнет опять.

Итак рассмотрев основные принципы работы с bbInterface. можно перейти к более интересным возможностям. Пробуем?

Шаг 8. Использование плагинов
Ранее я уже упоминал о возможности загрузить плагины в слит. Вот ей мы и воспользуемся. Создадим новое окно: Меню - Interface Operations - Create New Control - Frame. Теперь через Меню окна - Control Options - Plugins - Load Plugin загружаем нужный плагин. Для нашей панели проигрывателя неплохо бы сделать визуализацию: bbOscilloscope и bbSpectrum помогут в этом. Далее в настройках плагина ищем опцию Slit/UseSlit и включаем её (true). Перезапускаем BB (Включение опции и перезапуск BB не всегда обязательны т.к. многие плагины умеют сами определять в каком виде они подключены). После этого плагин появиться внутри нашего окна. Теперь нужно установить его расположение в окне: зажимаем Ctrl и перемещаем плагин мышкой в нужную позицию.

Существую некоторые проблемы/особенности c таким использованием плагинов:
1. Плагин не перещается в окне - изменяем положение плагина через файл его настроек вручную. Следует учитывать что координаты x и y в данном случае считаются относительно окна bbInterface, а не относительно экрана. Левый верхний угол окна имеет координату 0,0.
2. Установил расположение плагина вручную, но при перезапуске плагин всё равно оказывается в координате 0,0 - сделаем хитрее. Выгружаем наш плагин из текущего окна Меню окна - Control Options - Plugins - Unload Plugin. Создаём новое дочернее к нашему окно Меню окна - Interface Operations - Create Child Control - Frame. Размещаем новое окно как нам надо. Подгружаем плагин в новое окно Меню дочернего окна - Control Options - Plugins - Load Plugin.
3. Когда плигин загружен в Slit не открывается меню настроек самого плагина - очень редкая проблема, я с ней столкнулся только в bbIconBox. Настройки плагина в таком случае придётся изменять вручную.

Шаг 9. А что у нас с настройками?
bbInterface не использует стандартный формат настроек плагинов. Внутри файла bbInterface.rc находится список команд bro@m которые плагин и выпоняет при своей загрузке.
Соответсвенно изменив данные в файле мы заставим bbInterface выполнить нужные нам команды. Следует учитывать что в файл можно поместить не только команды bbInterface но и любые другие bro@m.

Шаг 10. Переменные.
Ещё одной интересной возможностью bbInterface является использование переменных. Подстановка значений переменных происходит с виде: $ИмяПеремнной$. Переменные могут содержать в себе любые данные: числа, строки, команды. Переменные бывают системные и пользовательские. Системные переменные:
$Mouse.X$ - текущая координата Х мыши.
$Mouse.Y$ - текущая координата Y мыши.
$LastControl$ - имя последнего созданного элемента.
$ИмяЭлемента.X$ - координата Х элемента.
$ИмяЭлемента.Y$ - координата Y элемента.
$ИмяЭлемента.Width$ - ширина элемента.
$ИмяЭлемента.Height$ - высота элемента.
$DroppedFile$ - переменная появляется если перенести мышью (Drag'n'Drop) какой либо файл на элемент bbInterface. В таком случае она содержит полный путь к этому файлу.
$DroppedFile.Name$ - Тоже что и предыдущая, но содержит только имя файла (включая расширение).
$BroadcastValue$ - переменная для работы с полосами прокрутки. Содержит текущее значение полосы прокрутки.
...

Глава 2. Под покровом тайны

Итак мы немного освоились в широком выборе плагинов для BB. Но подключить плагин - это ещё не всё. Надо его правильно настроить. Настройки плагинов, как и настройки BB, хранятся в .rc файлах. Также большинство плагинов поддерживают графический интерфейс настройки. Вызвать его можно либо по клику правой кнопкой мыши по панели плагина, либо по Ctrl+правый клик по панели плагина. Первоначально давайте разберёмся в настройках стандартных плагинов.

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

KeyToGrab(Клавиша),WithModifier(Модификатор),WithAction(Действие)
Клавиша - почти любая клавиша на вашей клавиатуре: A-Z, 0-9, F1-F12, Spacebar, Delete, Home, End, PageUp, PageDown, LWIN, RWIN, Escape, Insert. Теоретически можно использовать VK - виртуальные клавиши, но у меня получилось заставить работать далеко не все. Здесь можно узнать все возможные VK http://msdn2.microsoft.com/en-us/library/ms927178.aspx.
Модификатор - дополнительные клавиши, такие как Ctrl, Alt, Shift, Win. Можно указать несколько модификаторов, объединив их знаком "+".
Действие - собственно то, что будет выполнено при нажатии клавиш. Несколько примеров возможных действий:
ExecCommand - выполняет команду или запускает программу. После данного действия следует дописать ещё один параметр DoThis(Параметр). Параметр - путь к файлу для запуска или команда Bro@m.
Workspace1(2,3,4) - переключить рабочий стол.
PrevWorkspace - предыдущий рабочий стол.
NextWorkspace - следующий рабочий стол.
GatherWindows - переместить все окна на текущий рабочий стол.
Run - показать стандартный диалог "Выполнить".
Restart - перезапустить BB.

Из практики становится ясно, что чаще всего используется действие ExecCommand. Примеры назначения клавиш:
KeyToGrab(W), WithModifier(Win), WithAction(ExecCommand), DoThis(C:\Program Files\Winamp\winamp.exe) - запуск Winamp по нажатию Win-W.

KeyToGrab(M), WithModifier(Win+Alt), WithAction(ExecCommand), DoThis(@BBCore.ShowMenu) - Показать главное меню при нажатии Win-Alt-M.

BBLeanSkin - плагин перерисовывает стандартные окна Windows. У плагина два файла настроек: BBLeanSkin.rc - сами настройки, exclusions.rc - исключения. Рассмотрим настройки плагина:
bbleanskin.titlebar.buttons: Элементы отображаемые на заголовке окна. Параметр представляет собой строку цифр. Каждая цифра обозначает определённый элемент. Возможные элементы:
0 - пустой элемент
1 - кнопка "Закрыть"
2 - кнопка "Развернуть"
3 - кнопка "Свернуть"
4 - кнопка "Свернуть в полоску". Наследие Linux. Скрывает окно, оставляя видимым только заголовок окна.
5 - кнопка "Поверх всех окон".
6 - кнопка "На всех рабочих столах".
7 - иконка окна.

Настройка иконок окна.
bleanskin.titlebar.icon.size: Размер иконки окна. -1 - авто настройка размера.
bbleanskin.titlebar.icon.saturation: Цветность иконки.
bbleanskin.titlebar.icon.hue: Яркость иконки.

Настройка действий мыши. Все действия срабатывают при определённых кликах по заголовку окна. Формат настроек таков:
bbleanskin.titlebar.(Модификатор)(Клик)Click:(Действие)
(Модификатор) - Дополнительная клавиша модификатор. Варианты: shift, ctrl, или отсутствует.
(Клик) - Собственно действие мыши. Варианты: Left, Right, Mid, Dbl. Клик левой, правой, средней кнопкой мыши или двойной клик соответственно.
(Действие) - одно из следующих вариантов.
Maximize - развернуть окно.
Minimize - свернуть окно.
MinimizeToTray - свернуть в трэй. Только если окно поддерживает данную возможность.
Rollup - свернуть в полоску. См. выше.
Close - закрыть окно.
Lower -

Основные настройки.
bbleanskin.option.applyToOpen: Если отключить то все окна запущенные на данный момент не будут обрабатываться плагином.
bbleanskin.option.snapWindows: Приклеивать окно к краям экрана.
bbleanskin.option.nixShadeStyle: Стиль свёрнутого в полоску окна. Значения true/false.
bbleanskin.option.enableLog: Отобразить окно лога.
bbleanskin.option.adjustCaptionHeight:

Настройки внешнего вида окон.
bbleanskin.windows.menu.Height: Высота полосы меню окна. Полоса меню - это то где обычно пишут: "Файл", "Правка", "Вид" и прочее.
bbleanskin.windows.menu.Font: Шрифт меню окна.
bbleanskin.windows.menu.FontHeight: Размер шрифта меню окна.
bbleanskin.windows.ScrollbarSize: Размер полосы прокрутки.
bbleanskin.windows.setToolTipColor: Установить цвет всплывающих подсказок.
bbleanskin.windows.safeMetrics: Проверять обработанные окна на возможность изменения размера. Возможно уже бесполезная опция.
bbleanskin.windows.fontShadows: Тень шрифта.
bbleanskin.windows.fontEmboss: "Объёмный" шрифт.
bbleanskin.windows.shadowsQwilk: Базировать цвет тени на цвете окна, а не цвете текста.
bbleanskin.windows.fontShadowsTint:
bbleanskin.windows.focusTransparency: Прозрачность активного окна. 255 - нет прозрачности.
bbleanskin.windows.unfocusTransparency:Прозрачность неактивных окон. 255 - нет прозрачности.

В файле исключений содержится список окон, которые BBLeanSkin не должен обрабатывать. Есть возможность не обрабатывать только определённые классы окна. Формат настройки:
программа:?класс?
Примеры:
nero.exe - не обрабатывать окно Nero.
BROWSEUI.DLL:OTClass - не обрабатывать класс OTClass приложения BROWSEUI.DLL.
Список текущих приложений можно получить из меню Configure-Misc-Show Appnames или через лог BBLeanSkin.

BBLeanBar - плагин обрабатывает панель задач, трэй и некоторые другие элементы. Настройки плагина:
bbleanbar.item: Добавляет элемент на панель плагина. Возможные элементы:
Clock - стандартные цифровые часы.
WorkspaceLabel - отображает название текущего рабочего стола.
WorkspaceButtonL - кнопка "предыдущий рабочий стол".
WorkspaceButtonR - кнопка "следующий рабочий стол".
Tasks - панель задач.
CurrentOnlyButton -
Tray - трэй.
WindowButtonL - кнопка "предыдущая задача".
WindowButtonR - кнопка "следующая задача".
TaskStyleButton - кнопка "стиль панели задач".
WindowLabel - заголовок текущего окна.
NewLine - дополнительная нижняя панель.
Space - пустой элемент.
Элементы отображаются в том порядке в котором добавлены.

Основные настройки.
bbLeanBar.placement: Относительное расположение.
bbLeanBar.position.x: Абсолютная позиции по X.
bbLeanBar.position.y: Абсолютная позиция Y.
bbLeanBar.widthPercent: Размер. В % от размера экрана.
bbLeanBar.useSlit: Поместить в слит.
bbLeanBar.smallicons: Маленькие иконки.
bbLeanBar.pluginToggle: Приклеивать к плагинам.
bbleanbar.OnTop: Поверх всех окон.
bbLeanBar.autoHide: Автоматически убирать с экрана.
bbleanbar.autoRaise:
bbleanbar.snapToEdge: Приклеивать к краям экрана.
bbleanbar.alpha.enabled: Прозрачность.
bbleanbar.alpha.value: Уровень прозрачности.
bbLeanBar.balloonTips: Разрешить всплывающие подсказки.
bbLeanBar.balloonTimeout: Задержка скрытия всплывающих меню.
bbLeanBar.balloonRightDismiss: Закрывать всплывающие меню по правой кнопке мыши.
bbLeanBar.autoFullscreenHide: Скрывать при запуске полноэкранных приложений.

Настройки панели задач.
bbLeanBar.tasks.style: Стиль панели задач. 1 - только заголовок окна , 2 - только иконка, 3 - заголовок и иконка.
bbLeanBar.tasks.reverse: Обратный порядок отображения задач.
bbLeanBar.tasks.current: Отображать задачи только текущего рабочего стола.
bbLeanBar.tasks.sysmenu: Отображать системное меню при клике правой кнопкой по задаче.
bbLeanBar.tasks.drawBorder: Рисовать рамку вокруг текущей задачи.

Настройки иконок
bbLeanBar.icon.saturation: Цветность иконок панели задач.
bbLeanBar.icon.hue: Яркость иконок панели задач.
bbLeanBar.tray.saturation: Цветность иконок трэя.
bbLeanBar.tray.hue: Яркость иконок трэя.
bbLeanBar.icon.size: Размер иконок.

Настройка формата времени.
bbleanbar.strftimeFormat: Информацию по настройке формата можно посмотреть в документации.
bbLeanBar.strftimeTipsFormat: Формат всплывающей подсказки для часов.

Фикс для иконок трэя. Использовать при проблемах с отображением контекстного меню.
bbleanbar.tray.FocusDelay: 60

Вот и всё по настройке стандартных плагинов. Теперь зная принципы настройки стандартных плагинов можно с лёгкостью настроить практически любой плагин. А если что то не получится - пишите, с радостью помогу вам.

Глава 1. Страна чудес

Вот мы и разобрались с настройками BB. Теперь надо расширить функционал. Это возможно благодаря плагинам. Плагины можно скачать на http://xoblite.net/plugins.html. В стандартный дистрибутив входит три плагина:

1. bbKeys - Реализовывает поддержку горячих клавиш. Можно самому назначить комбинацию клавиш на любое действие.
2. bbLeanBar- Панель задач, трэй, часы. Неплохие возможности для перенастройки.
3. bbLeanSkin - Обрабатывает окна - рамку, заголовок. Можно добавить эффект прозрачности.

Далее я привожу список и описание часто используемых плагинов. Если это возможно, будут указаны альтернативные варианты.

1. SystemBarEx 2.2 - замена стандартному bbLeanBar. Обладает огромным количеством настроек.
Альтернатива - bbLeanBar, bbSystemBar, bbIconBox

2. bbInterface 0.9.9 - плагин позволяющий самому создавать любые элементы управления: кнопки, переключатели, полосы прокрутки, метки. По сути это простая система RAD (Rapid Aplication Development - быстрое создание приложений). Поясню на примере: создали кнопочку - разместили на экране - выбрали через меню нужную функцию. Следующая статья будет посвящена исключительно этому плагину.

3. bbTCL 2.4.8.2 - плагин представляет собой интерпретатор языка программирования TCL для BB. Язык TCL (произносится "тикль") предоставляет все необходимые инструменты для создания высокоуровневых скриптов и в тоже время очень прост в изучении.

4. bbOSD 2.0.0 - позволяет отображать различную текстовую информацию на рабочем столе. Полезен для облагораживания интерфейса.

5. bbMemLimiter 0.0.4 - плагин решает главную проблему BB - утечку памяти. Где то в кодах BB затерялась ошибка, что в некоторых случаях приводит к непомерному потреблению памяти. Никто не стал разбирать код в поисках ошибки, просто написали плагин, которых через заданный интервал времени очищает память. Интересно, что плагин хранит свои настройки в файле extension.rc, а не в собственном файле конфигурации.
Альтернатива - bbMemShrink.

6. bbWinColors 0.0.1 - автоматически настраивает цветовую схему Windows под используемый стиль BB. Есть много за и против данного плагина, но для себя лично я решал "за".
Альтернатива - bbColorEx, bbColor3dc, bbColor.

7. Uberbox 0.1.3 - настраиваемая командная строка с поддержкой bro@m, поиска (включая интернет), автозаполнения строк. Очень полезная в работе вещь. Особенно пригодится при отладке скриптов.
Альтернатива - BroamBox, bbRun, bbZCmdEx.

8. bbMemo 0.0.5 - маленький блокнотик напоминалка. Те кто до этого пробовал Aston знают как это удобно.
Альтернатива - ?

9. bbSky - плагин отображающий прогноз погоды. Работает через службу Yahoo! Weather. Немного устарел: Yahoo! постоянно обновляет службу, добавляя новые варианты прогнозов, плагин их получает нормально, но вот иконки для неизвестных ему прогнозов не рисует. Требует подключение к интернет.
Альтерантива - bbWeather, nWeather.

10. bbRSSFeed - читалка RSS. Сейчас каждый уважающий себя сайт имеет свою рассылку. Теперь чтобы её почитать вам не понадобится сторонний софт.
Альтернатива - bbRSS, bbRssReader.

11. Liam 1.2.4 - реализует удобный механизм проверки почты. Узнать количество писем можно прямо с рабочего стола!
Альтернатива - bbMail.

12. bbMuse 0.9.7 - плагин связывает всеми любимый Winamp c BB посредством bro@m. Также отображает название текущего трэка.
Альтернатива - bbPlayer, multiapm, bbFoomp, bbAmpTitle.

13. bbTaskSwitch 0.1.1 - плагин заменяет стандартное меню Alt-Tab. Благодаря Shadest(http://shadest.livejournal.com/) появилась поддержка иконок.

14. bbOscilliscope 1.2.2, bbSpectrum 0.5.3b - два плагина реализующие простейшую визуализацию звуковых эффектов. При должной настройке смотрятся довольно красиво, особенно bbOscilliscope.

15. bbAnalogEx 0.0.6 - красивые часы, с простым и гибким механизмом настройки. Есть функция будильника.
Альтернатива - bbAnalog, bbBinaryClock, bbDigitalEx.

16. bbCalendar 1.1.1 - календарь. Возможность прописывать события для дат, придётся по вкусу людям планирующим всё наперёд.

17. bbSysTraffic 0.0.4 - отображает информацию о системе: загрузку CPU, памяти, время работы компьютера, IP-адрес, свободное и занятое место на локальных дисках.
Альтернатива - bbSysMonPlus, bbSysMon, bbSysMeter

18. bbNetTraffic 0.0.4 - отображает состояние сети: входящий, исходящий, суммарный трафик. Имеет встроенный механизм подсчёта стоимости.

19. bbIcons 2.1 - позволяет создавать иконки на рабочем столе или в слите. Параметры каждой иконки придётся прописывать вручную,но настроить можно всё до мелочей.
Альтернатива - bbDesctop, bbInterface, bbShelf.

20. bbMagnifier 1.0 beta 5 - Экранная лупа, показывающая позицию курсора и цвет под ним. Очень полезно при подгонке стиля под конкретную картинку.

21. FreeStyler 4.0.1 - Плагин реализует графический интерфейс для создания собственных стилей. Кому то так проще.

22. bbIme 0.1 - добавляет пару команд, для переключения на следующую/предыдущую раскладку клавиатуры.
Альтернатива - LangDis

23. bbMediator 0.0.1 - перехватывает сообщения посылаемые BB и выполняет указанные действия. Полезно при написании сложных скриптов.

24. bbMouseGesture 0.1.6 - позволяет добавить действия для сложных движений мыши. Например мышь вниз-влево: предыдущий рабочий стол, вниз-вправо: следущий рабочий стол.

25. bbGimme 1.1 - менеджер буфера обмена. Добавляет команды для работы с буфером обмена, и меню для удобного контролирования этих команд.

26. bbPager 1.3 beta 5 - менеджер рабочих столов. Позволяет управлять рабочими столами в графическом виде: переключаться между ними, перемещать окна и т.д.

...

Глава 1 (окончание)

Мы почти разобрались с настройками. Осталось немного smile:) Поехали!

В файле plugins.rc BB хранит список подключенных плагинов. Прописав путь к файлу плагина, мы подключаем его. Закомментировав путь, соответственно, отключаем. Если удалить путь мы удалим плагин из списка плагинов BB.

Файл shellfolders.rc - это файл меню, хранящий список системных директорий. Думаю объяснять не надо.

Файл stickywindows.ini содержит список приложений, которые по умолчанию должны отображаться на всех рабочих столах.
По одному приложению на строку. Следует учитывать, что записывать надо именно внутреннее имя приложения. Список внутренних имён текущих приложений можно получить из меню Blackbox - Configure - Misc - Show Appname.

Несколько замечаний:
Как начало комментария BB воспринимает символы "!" и "#".
Опция меню Blackbox - Сonfigure - Menus - show Bro@m не нашла себе место ни в одном файле настроек.

Вот пожалуй и всё что можно сказать по стандартным настройкам. Дальше рассмотрим имеющиеся плагины и их возможности.

Глава 1 (продолжение)

В файле extensions.rc хранятся дополнительные настройки программы. Только часть этих настроек доступна через графическое меню. Давайте разбираться.

blackbox.editor: Стандартный редактор для стилей, настроек, меню. Именно он вызывается при двойном клике по пункту в меню Edit(Изменить).

blackbox.appearance.bullet.unix: Размер "стрелок раскрытия меню". True = 4 пикселя, False = 6 пикселей.
blackbox.appearance.arrow.unix: Стиль стрелок. Пробуйте smile:) Значения также true\false.
blackbox.appearance.cursor.usedefault: Вид курсора мыши при перетаскивании меню. Значения true\false.

blackbox.background.enabled: Разрешить\Запретить изменения обоев рабочего стола. Не всё понятно с этой опцией: обои можно изменить даже если опция false.
blackbox.background.smartWallpaper: Использовать обои прописанные в файле стиля.
blackbox.background.rootCommand: Не знаю smile:(

blackbox.workspaces.altMethod: Альтернативный метод обработки рабочих столов. Разницы не заметил. Теоретически разница в том, что неактивные рабочие столы скрываются, а не переносятся за пределы экрана.
blackbox.workspaces.followActive: Автоматически переключать рабочий стол для активной задачи. Опция не ясна.
blackbox.workspaces.restoreToCurrent: восстанавливать свёрнутые окна на текущий рабочий стол.

Отступы по краям экрана.
blackbox.desktop.marginTop: Отступ сверху
blackbox.desktop.marginBottom: Отступ снизу
blackbox.desktop.marginLeft: Отступ слева
blackbox.desktop.marginRight: Отступ справа
Если у вас два монитора то можно настроить отступы и на втором мониторе в виде: blackbox.desktop2.marginTop и так далее.

"Приклеивание" к плагинам и краям экрана
blackbox.snap.threshold: Расстояние срабатывания
blackbox.snap.padding: Отступ
blackbox.snap.toPlugins: "Приклеивать" к плагинам.

Опции мыши.
blackbox.desktop.xxxClick: Вызывает нужную команду при щелчке мышью на рабочем столе. Значение xxx определяет условие вызова. Может принимать значения Left Right Mid. Также возможно наличие модификаторов. Например Alt Ctrl Win Shift. Итого запись вида blackbox.desktop.CtrlRightClick: @BBCore.ShowMenu отобразит стандартное меню при щелчке правой кнопкой мыши с зажатым Ctrl. Впоследствии мы сами научимся писать команды (правильно они называются Bro@m).

blackbox.options.openFolderCommand: Команда которая выполняется при двойном щелчке по папке в меню.

Опции шрифтов. Данные опции позволяют настроить шрифты. Шрифты прописанные данными опциями имеют максимальный приоритет т.е. они заменяют и системные шрифты и шрифты указанные в файле стиля.
blackbox.global.fonts.enabled: Разрешить\Запретить

blackbox.global.toolbar.font: Шрифт Toolbar
blackbox.global.toolbar.fontHeight: Размер шрифта
blackbox.global.toolbar.fontWeight: Нормальный\Жирный вид шрифта

blackbox.global.menu.title.font: Шрифт заголовка меню
blackbox.global.menu.title.fontHeight: Размер шрифта
blackbox.global.menu.title.fontWeight: Нормальный\Жирный

blackbox.global.menu.frame.font: Шрифт элементов меню
blackbox.global.menu.frame.fontHeight: Размер шрифта
blackbox.global.menu.frame.fontWeight: Нормальный\Жирный

blackbox.global.window.font: Шрифт заголовка окна
blackbox.global.window.fontHeight: Размер шрифта
blackbox.global.window.fontWeight: Нормальный\Жирный

Приоритет оболочки для процессора:
blackbox.processPriority: Принимает значения в диапазоне от 0 до 4, где 4 максимальный приоритет.

Также в файле extensions.rc[FONT=Times][FONT=Impact] можно настроить несколько специфических параметров, неизвестной мне природы smile:D
Привожу их список, без описания:
blackbox.contextmenu.itemAdjust:
blackbox.workspaces.xpfix:
blackbox.workspaces.followMoved:
blackbox.tweaks.noOleUnInit:

Глава 1 (продолжение)

В файле blackbox.rc хранятся все основные настройки программы. Также они доступны через меню. Разберём подробнее.

Секция Toolbar. Toolbar - это панель инструментов управления окнами. В настоящее время почти не используется. Тут всё прозрачно:

session.screen0.toolbar.enabled: Включить\отключить
session.screen0.toolbar.placement: Расположение
session.screen0.toolbar.widthPercent: Размер в процентах
session.screen0.toolbar.onTop: Поверх всех окон
session.screen0.toolbar.autoHide: Скрывать автоматически
session.screen0.toolbar.pluginToggle: "приклевать" к плагинам
session.screen0.toolbar.alpha.enabled: Прозрачность
session.screen0.toolbar.alpha.value: Уровень прозрачности

Секция Menu. Определяет стандартные настройки меню.

session.menu.position.x: Расположение по X
session.menu.position.y: Расположение по Y
session.menu.maxWidth: Максимальная ширина
session.menu.popupDelay: Задержка появления\скрытия меню.
session.menu.mouseWheelFactor: Точно не знаю smile:)
session.menu.alpha.enabled: Прозрачность
session.menu.alpha.value: Уровень прозрачности
session.menu.onTop: Поверх всех окон
session.menu.snapWindow: Приклеивать меню к краям экрана и плагинам.
session.menu.pluginToggle: "Приклеивать" к плагинам
session.menu.bulletPosition: Определяет расположение "стрелок раскрытия меню". Может быть: Left Right Default.
session.menu.sortbyExtension: Сортировать элементы меню по расширениям
session.menu.shadows.Enabled: Тень меню
session.menu.icon.size: Размер иконок меню
session.menu.icon.saturation: Цветность иконок
session.menu.icon.hue: Яркость иконок
session.menu.separateFolders: Сортировать папки\файлы
session.menu.separatorStyle: Стиль разделителя.
Может быть: Gradient, Flat, Bevel, None.
session.menu.scrollPosition: Расположение "полосы прокрутки"
session.menu.scrollButton.hue: Цветность "полосы выбора"

Несколько советов\замечаний:
Если вы хотите чтобы меню не раскрывалось автоматически а только по щелчку то установите значение popupDelay -1.
Если вы хотите отключить все иконки всех меню установите значение icon.size -1
Расположение по X и Y отвечает за то где появится меню после нажатия клавиши "Windows".

Секция Slit. Что такое Слит? Это своего рода "коробка" для ваших плагинов. Как это использовать, расскажу как только, мы до этих самых плагинов доберёмся.

session.screen0.slit.placement: Расположение
session.screen0.slit.direction: Направление расширения
session.screen0.slit.autoHide: Скрывать автоматически
session.screen0.slit.ontop: Поверх всех окон
session.screen0.slit.toggle: Включить\Отключить

Стоит заметить, что встроенный Слит BB почти не находит применения.

Секция Other Options.

session.screen0.workspaces: Количество рабочих столов
session.screen0.workspacenames: Имена рабочих столов
session.screen0.focusModel: Варианты фокусировки окон.
session.screen0.fullMaximization: Максимализировать окна на весь размер экрана.
session.screen0.strftimeformat: Формат времени

Данные опции до сих пор остаются для меня загадкой. Даже не знаю как их описать. Попробуйте поменять их и сравните результат, это всё что я могу предложить.
session.autoraisedelay:
session.opaqueMove:
session.imageDither
:


Секция Menu & Style.
session.menufile: Путь к файлу стандартного меню.
session.styleFile: Стандартный стиль

Несколько общих замечаний:
Опция Placement может принимать значения Top-Center-Bottom и Left-Center-Right в любых вариациях. Например: TopRight.
Для того чтобы сделать иконки меню (или любого другого элемента) "цветными" надо установить опции Saturation 255 и Hue 0.
О настройке формата времени можно почитать в документации. Там всё довольно прозрачно, но если будут вопросы пишите.

Сорри...

Народ извините сейчас проблемы с интернетом( Провайдер меняет линейные данные), как только появится интернет блог "оживёт".

Глава 1. А что внутри?

Проблема всех программ пришедших с Linux заключается в сложности настройки. BB не исключение. Настройки по традиции хранятся в .rc файлах. Их несколько - menu.rc, blackbox.rc, plugins.rc, extensions.rc, shellfolders.rc. Разберём по порядку:

menu.rc - хранит настройки основного меню. Имеет несложную структуру: [команда] (имя) {параметр} <иконка>. В качестве [команда] может выступать:
[begin] - начало меню. Нет параметров.
[separator] - графический разделитель. Нет параметров.
[nop] - пустая стока. Нет параметров.
[path] - раскрывать папку. {параметр} - путь к конкретной папке.
[exec] - выполнить. {параметр} - путь к файлу, команда консоли, или Bro@m.
[edit] - редактировать. {параметр} - путь к файлу для редактирования.
[include] - включить в основное меню дополнительно меню. {параметр} - путь к файлу меню.
[submenu] - начинает подменю. Нет параметров. в конце каждого подменю должна стоять команда [end].
[end] - конец меню. Нет параметров.
Также существует множество специфических команд, например:
[reboot] [shutdown] [config] [stylesmenu] [exit].
Вместо (имя) может стоять любое слово, словосочетание или даже предложение. Именно это и будет отображаться в меню.
<иконка> - путь к файлу иконки. Есть возможность использовать иконку из пакета (например из dll), для этого после пути к пакету через запятую необходимо указать номер конкретной иконки. Например <C:\Windows\System32\shell32.dll,37> укажет на 37 иконку из библиотеки shell32.dll.
Также можно использовать относительные пути т.е вместо предыдущего можно было написать <%systemroot%\system32\shell32.dll,37>. Иногда возникает необходимость определить размер иконки, это также возможно : <32 | icons\media.ico>, установит размер иконки media отображаемой в меню 32, тогда как остальные иконки могут быть например 16 в размере.

Ну вот пожалуй и всё что можно сказать о настройке меню. Если возникнут вопросы - пишите, постараюсь ответить.

Пролог: а как это делается?

Мне часто задавали вопрос как сделать свою сборку BB (Здесь и далее для краткости BB - BlackBox for Windows). Напрашивающийся ответ - руками. Но это всё прелюдия.

Итак есть желание сделать свою "сборку", свой индивидуальный вариант интерфейса? Да! Что для этого надо? Немного:

1.Минимальное представление о том, как должен выглядеть ваш интерфейс.
2.bbClean последней версии (берём тут http://www.lostinthebox.com/viewtopic.php?f=3&t=2907&p=22951#p22951), набор плагинов (ищем то что надо на http://xoblite.net/plugins.html).
3.Минимальное знание программирования (можно и без него)и документация по TCL (начинаем поиск тут http://ru.wikipedia.org/wiki/TCL)

Ещё советую для знающих английский http://wiki.bb4win.org/

Посмотрели? Скачали? Ну что ж приступим...
комментарии | тесты    
Все права защищены
Anode.ru [2004г.-2009г.]