[JFWRus] Re: Исправление Скриптов для TotalCommander
Здравствуйте,
7.10 и обнаружил,
Вы можете начать пользоваться моими скриптами для тотала, они работают для
челюстей версии 7.10 и выше. Правда они ещё на ранней стадии развития, но в
них данные проблемы решены способом, предложенным мне господином Леонидом
Жилиным из Красноярска, являющиеся дальнейшим развитием идеи Олега Кутищева,
за что им огромное спасибо. Способ этот гораздо более универсален нежели
описанный Вами.
> там в функции NewTextEvent такое условие:
> if GetColorName (GetColorText ()) == "red" then
> saystring ("отмечен")
> else
> saystring ("неотмечен")
> endif
> Тогда проверки ради вставил оператор
> SayString (GetColorName (GetColorText ()))
> И оказалось, что эта функция выдаёт строку "красный".
> А сравнение-то происходит со словом "red"!
> Тогда я заменил в условии строку "red" на строку "красный" и всё
> заработало как нужно.
Дело в том, что названия цветов челюсти берут из файла colors.ini, если он
переведён, то будет красный, а если нет, то red. Лучше Вам написать так:
If getColorText () == 255 then
число 255 в данном случае имеет смысл заменить на число полученное по
sayInteger (getColorText ()). Такой способ во-первых намного быстрее
работает, поскольку числа сравниваются быстрее строк, а во-вторых более
универсален, поскольку не зависит от перевода, правда он зависит от настроек
тотала, но это уже малозначительная в данном случае деталь.
> В то же время в скриптах SayNextLine и SayPriorLine оператор
> If GetColorText () != "red" then
> SayString ("отмечен")
> EndIf
>
> Отрабатывает правильно.
> Здесь мне вообще непонятно, как можно сравнивать целочисленную
> функцию GetColorText со строкой?
> Правда, как я понял, содержимое сравнивамой строки на результат
> работы скриптов SayNextLine и SayPriorLine никак не влияет. Так
> я вообще убрал оператор сравннения, так что получилось:
> If GetColorText () then
> SayString ("отмечен")
> EndIf
> И это тоже работает.
Дело в том, что в скриптах челюстей можно сравнивать всё что угодно с чем
угодно, правда без гарантии корректного результата. В данном случае
результат сравнения всегда истинен, поскольку результат выполнения функции
никогда не будет равен числу полученному из слова red, если Вы конечно не
озадачитесь подбором соответствующего кода цвета выделения. Насколько я
понял из соответствующего эксперимента, число полученное из слова равно
нулю, т. е. чёрному.
> А вот в функции NewTextEvent такой фокус не прошёл! Почему?
см. выше.
> Тогда я просто сделал глобальную замену слова "red" на слово
> "красный"
> И всё заработало как нужно.
Более корректно было бы сделать так как я описал.
> В чём же дело? Как это понять?!
> Почему численную функцию GetColorText можно сравнивать со
> строкой?
А вот этот вопрос я думаю имеет смысл задать особо талантливым программистам
из фирмы производителя... У них кое где очень жёсткий контроль типов, а
кое-где чёрти что. Не последовательно как-то получается
До свидания.
***
Это сообщение No5562
было разослано для 353 участников дискуссионного листа
[JFWRus] Re: Исправление Скриптов для TotalCommander