И так в меню любого элемента 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. Процедура будет работать точно также. Всё это выглядит немного заумно, но впоследствии я попробую на более ярких примерах показать варианты использования пространств имён.












Привет.
Я не нашел ваших контактных данных, поэтому пишу тут, в надежде на помощь.
Я использую blackbox уже довольно давно, но столкнулся с одной неприятностью. Я пользуюсь программой Skype, она работает так что для сворачивания в трэй надо нажать на крестик сверху справа. Так вот, при использовании blackbox сворачивание в трэй Skype-а не происходит. Его кнопка остается на панели задач(кстати в качестве панели задач я использую bbLeanBar). И я не знаю как это исправить, как спрятать окно Skype с панели задач? Может есть какие-то настройки или плагин, который умеет выборочно прятать с панели задач кнопки запущенных программ?
Заранее спасибо за помощь.
опа давно я на блоге не появлялся.
честно надо попробовать себе поставить скайп, если смогу эмулировать проблему то смогу и найти решение. А пока попробуйте добавить скайп в список exclusion.rc в настройках bbLeanSkin. Возможно это поможет.
Я не использую плагин BBLeanSkin, мне нравится классический вид окон Windows. Кстати временно проблему решаю путем отправки мешающей кнопки Skype на второй виртуальный рабочий стол, там она и болтается, пока не нужна, а если нужна, без проблем вызываю окно из трэя, правда потом опять приходится ее прятать на другой рабочий стол.
Поставил Skype на чистый BBClean последней версии. Плагины bbLeanBar, bbLeanSkin, bbKeys. Всё работает как надо: при сворачивание - сворачивается в панель задач, при закрытии - сворачивается в трей. bbLeanSkin на работу ни как не влияет. Попробуй поставить чистый BB и проверь как будет работать.
Дай пожалуйста ссылку на тот BBLean который ты скачал и поставил.
Уже скачал и поставил последнюю версию BBClean, у меня только версии плагинов отличаются (BBLeanBar и BBkeys).
Проблема с неисчезающей кнопкой Skype осталась.
После установки новых версий плагинов, в частности bbKeys перестала работать клавиша Win на открытие главного меню. Хотя в настройках включена
KeyToGrab(LWIN), WithModifier(), WithAction(ExecCommand), DoThis(@BBCore.ShowMenu root)
KeyToGrab(RWIN), WithModifier(), WithAction(ExecCommand), DoThis(@BBCore.ShowMenu root)
У меня усткановлено следующее:
bbLean 1.16 (bbClean) Built at Mar 1 2008 01:50:43 from SVN
плагины:
bbKeys 1.16 by grischka (2005-05-02)
bbLeanBar 1.16 by grischka (2005-05-02)
BBKeyhook v0.62b by Kaloth & GDR (23-05-2007)
Кстати, Skype по началу нормально скрывается в трее, а позже начинает выдрючиваться.
Если есть желание может поговорим в аське? 53933805