Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое 
Author Message
MVV



PostPosted: Thu Jun 10, 2010 22:14    Post subject: Reply with quote

ОК, держитесь))) Twisted Evil

1. Откат позволяет использовать кнопку, выполняющую автоматически генерируемую команду undo для отмены изменений, сделанных при прошлом запуске программы. Как работает, я уже писал, повторюсь. Если строка отката команды указана, то она будет дописываться к создаваемой строке undo при выполнении команды. То есть, при выполнении команды c2 в строку отката будет записана она же - то есть, команда возврата изменений, внесенных командой c2 (ведь команда действует, как переключатель). При выполнении команды c1, включающей заголовок, в строку отката попадет команда c0, выключающая его, и так далее (команды, дописываемые к строке отката, мы указываем сами). При этом, если команда содержит условие успеха (второй параметр), оно будет проверено перед выполнением команды. Если условие истинно, команда не выполнится, и откат не добавится - ведь ничего не сделано (например, если в ТК команда переключает состояние элемента, а мы хотим наверняка выключить его, мы указываем ключ в wincmd.ini и значение, которое будет при включенном элементе). Если же условие ложно, то есть, команду надо выполнять, команда выполняется, затем делается маленькая пауза (ее длительность можно задать параметром /d), и условие выполнения проверяется еще раз - если оно стало истинным, откат добавляется (то есть, команда выполнилась успешно). Это позволяет при отмене выключения элемента не выключать его, если вдруг выключение было провалено.
2. Какие функции? В разделе [Actions] можно использовать только имена команд из раздела [Items], разделенные пробелами.
3. Здесь не мешало бы вам, молодой человек, не полениться почитать справку по API-функции ShowWindow, всё и узнаете - значение параметра просто передается ей. Насчет переключателя развернутости напишу в конце поста.
4. Эффект есть от каждой, просто ты его не замечаешь Smile - ширина окна изменяется всего на 1 пиксель. А обе они вместе просто заставляют окно перерисовать себя, не меняясь в размере (размер изменяется и возвращается обратно).
5. И правда. Посмотрю в отладчике, что я изменил, что перестала. Ага, нашел ошибку. Добавил одно, сломал другое. Завтра выложу исправленную.
6. Не понял вопроса. Команда mv в примере просто имитирует клик на пункте системного меню Переместить.
7. Смотри 6, так как mv и begin_move - два названия одного действия. Оно так и работает, как ты написал - вызываешь её, система слушается клаву и мышь, перемещая окно, потом щелкаешь мышью, окно остается на той позиции, куда его перенесли. Но так устроено, что окно не бегает за мышью, пока его не "пихнешь" стрелками с клавы.
8. А как ты себе это представляешь? Команда move_down просто опускает окно ровно на 100 пикселей, вызывая API-функцию SetWindowPos. Больше она ничего не делает.
9. cx, cy - ширина и высота окна. А включение стиля topmost запрещает перекрывать окно другими окнами без этого стиля, даже если они имеют фокус (обычно окна всех полноэкранныех игр и и.т.п. имеют этот стиль, чтобы другие программы не выскакивали поверх них). По наличию стиля topmost в системе есть два типа окон - с ним и без негоSmile. Те, которые без него, всегда располагаются под теми, которые с ним. А между собой и те и другие ведут себя как обычно - сделал окно активным, оно стало на передний план. Сделал другое окно активным - оно стало на передний план, при необходимости перекрыв остальные. Проверять состояние флага topmost пока нельзя, так как он относится к числу расширенных стилей, проверяемых в другом месте (наверное, добавлю параметр функциям style, is_style для расширенных стилей).
10. Опишу, что и как делают все команды. Все подробности - в описании API-функций:
    show вызывает ShowWindow;
    move вызывает GetWindowRect, чтобы получить текущие размер и позицию окна, а затем вызывает SetWindowPos с новыми параметрами;
    set_style вызывает GetWindowLong с параметром GWL_STYLE, получая текущий стиль и устанавливает новое значение стиля, вызывая SetWindowLong (стили описаны здесь);
    msg вызывает SendMessage с заданными параметрами для окна ТК;
    tcm вызывает SendMessage с параметрами WM_USER+51 и номером внутренней команды (ТК обрабатывает такое сообщение, выполняя команду);
    is_style вызывает GetWindowLong с угадай каким параметром (верно, GWL_STYLE Smile) и возвращает 1 или 0 в зависимости от типа сравнения стиля;
    tcini вызывает GetPrivateProfileString, читая заданный параметр заданной секции файла wincmd.ini, и сравнивает с указанным в команде, возвращая 1 или 0 в зависимости от результата сравнения (или от наличия ключа - если ключа нет, возвращается значение, указанное в параметре error_value - то есть, некоторое значение по умолчанию).


Ссылки, которые я привожу - на официальный источник, там же указаны числовые значения параметров. Если на английском читать лень, в инете море сайтов, где описания этих функций переведены на русский - оставляю за читателем право самостоятельно найти их.

А мой инишник практически не отличается от входящего в дистрибутив (разве что со временными командами для отладки). Так что смотри его, и пусть вопросы отпадают автоматически. Wink


Пару слов и мыслей о переключателе развернутости. Вызов функции ShowWindow не допускает обратимых действий, это не флаги, которые можно изменять исключающим ИЛИ. Здесь нужно при наличии флага восстанавливать окно, а при его отсутствии - разворачивать, и больше ничего. Остается понять, можно ли замутить это на имеющейся базе. Если нет, то есть идейка - добавить символ | для разделения команды, выполняемой при истинном условии, и команды, выполняемой при ложном:
Code:
mmax=show(3)|show(9), is_style(&$01000000), mmax

То есть, при ложном is_style(&$01000000) (то есть, если стиля WS_MAXIMIZED у окна нет) будет выполняться show(3), в противном случае - show(9). И в любом случае дописывать откат. Или даже так:
Code:
mmax=show(3), is_style(&$01000000), mmax |show(9),  is_style(!&$01000000), mmax

То есть, если условие истинно еще до выполнения основной команды, то будет произведена попытка выполнить команду, указанную после | (в нашем случае при развернутом окне оно не будет развернуто, но напротив будет выполнена команда восстановления, а если же окно изначально не развернуто, оно будет просто развернуто). И откат у основной команды и else-команды свой.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
View user's profile Send private message ICQ Number


Powered by phpBB © 2001, 2005 phpBB Group