Для начала напишу макросы, которые забыл добавить в конфиг в архиве. Точнее, всю секцию в последнем варианте.
Код: Выделить всё
[Macros]
; Некоторые константы для функции show
SW_HIDE=0
SW_SHOWMAXIMIZED=3
SW_MINIMIZE=6
SW_RESTORE=9
; Некоторые константы для функций style/set_style
WS_CAPTION=$00C00000
WS_MAXIMIZE=$01000000
WS_VISIBLE=$10000000
WS_MINIMIZE=$20000000
WS_EX_TOPMOST=$00000008
WS_EX_TOOLWINDOW=$00000080
; Некоторые константы для функции msg
WM_TC_COMMAND=$433
WM_KEYDOWN=$0100
WM_KEYUP=$0101
WM_SYSCOMMAND=$0112
; Некоторые номера команд TCFS2Tools (могут быть изменены в TCFS2Tools.ini)
tt_ShowMainMenu=65537
tt_HideMainMenu=65538
tt_SwitchMainMenu=65539
tt_TrackMainMenu=65540
tt_LeftIsActive=65551
tt_RightIsActive=65552
tt_LeftGetViewMode=65553
tt_RightGetViewMode=65554
tt_SeparatorGet=65561
tt_SeparatorSet=65562
tt_GetSystemMetrics=65570
tt_GetWorkArea=65571
hasCaption=style(# & $00C00000)
isMaximized=style(# & $01000000)
isTopmost=style(, # & $08)
; Некоторые команды, возвращающие информацию (необходим активный TCFS2Tools.dll)
GetSystemMetrics=msg($433, tt_GetSystemMetrics, #1)
cxScreen=GetSystemMetrics(0)
cyScreen=GetSystemMetrics(1)
cxWorkArea=msg($433, tt_GetWorkArea, 0)
cyWorkArea=msg($433, tt_GetWorkArea, 1)
sepPos=msg($433, tt_SeparatorGet)
L_isActive=tcm(tt_LeftIsActive)
R_isActive=tcm(tt_RightIsActive)
L_viewMode=tcm(tt_LeftGetViewMode)
R_viewMode=tcm(tt_RightGetViewMode)
S_viewMode=(L_isActive ? L_viewMode : R_viewMode)
Соответственно, пара команд по управлению сепаратором:
Код: Выделить всё
[Items]
set_separator=msg($433, tt_SeparatorSet, #1)
sp_set_active=run_item(set_separator, L_isActive ? (#1) : 100 - (#1))
Flasher писал(а):Где тут простота, я не понял.
Проще стало в том плане, что теперь можно организовать проверку условия внутри одного вызова функции, а не городить кучу дополнительных команд через палки |. И, думаю, смысл записи
test(isTopmost) куда яснее, чем записи
style(, # & $08). Ничто не заставляет использовать новые функции, всё старое осталось работоспособным.
Flasher писал(а):Использование везде run_item - вообще отход от простоты. Убор решётки из параметров сюда же. Было куда удобней. Зачем убрал то?
Как я и говорил,
единственное, что изменилось - команды с
set_separator и
separator. Поэтому определение "
везде" здесь, мягко говоря, не уместно. Причина - вынос костыля из TCFS2 в отдельный модуль (я давно хотел это сделать). Следствия - переход от функции к команде и невозможность использовать
# в параметрах (так как вначале вычисляется выражение, а потом отправляется сообщение с числом).
У меня работает. Но для этого необходимо прописать команду
set_separator (в
моём предыдущем посте).
Flasher писал(а):Зачем в командах использовать номер 1075?
Номер 1075 (или $433) - это номер оконного сообщения, который тотал ожидает для выполнения внутренних команд. Вообще,
tcm(x) делает ровно то же самое, что и
msg(1075, x, 0, 0). А если надо передать в команду параметр, нужно использовать полную форму.
test(isTopmost) - так и будет со словом test? Или это временное название?
Да, так и будет. Напрямую макрос вызвать нельзя, только из какой-либо стандартной функции. Поэтому добавлена функция test для проверки (она просто возвращает результат вычисления выражения в скобках).
SeparatorGet - ИМХО, бесполезная штука.
Я бы не говорил так уверенно. Это теперь единственный способ узнать текущую позицию сепаратора, т.к.
# для этой цели уже не работает.
Flasher писал(а):С GetSystemMetrics и GetWorkArea примеры не помешали бы. Со вторым параметром на примере switch_sp, если можно.
Пара примеров приведена выше -
cxScreen,
cyScreen,
cyWorkArea.
Здесь приведен полный перечень номеров, которые можно передавать в параметре. Да, многим из них сложно будет придумать применение, но остальные вполне могут пригодиться. В
switch_sp, как и в
s00008000_switch_sp, можно писать
cyWorkArea вместо
@-33 - и это должно работать правильно при любой высоте панели задач (при желании можно вычесть еще несколько пикселей для добавления промежутка).
Код: Выделить всё
switch_sp=move(# ? 0 : @*7/64, # ? 0 : @*7/64, @-# ? @ : @*25/32, cyWorkArea-# ? cyWorkArea : @*25/32), , switch_sp