Отправляет email-рассылки с помощью сервиса Sendsay

Screen reader JAWS for Windows Russian

За 2007-03-26

[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

   2007-03-26 16:56:42 (#651057)

[JFWRus] Исправление Скриптов для TotalCommander

Всем привет!

Хочу разобраться в таком деле:
Недавно обратил внимание, что при работе с Тоталом, когда
отмечаю файл пробелом, Джос говорит "Неотмечен". Потом проверяю курсором -
оказывается всё же "отмечен".
Тогда я полез в Тоталовские скрипты для JAWS 7.10 и обнаружил,
там в функции NewTextEvent такое условие:

if GetColorName (GetColorText ()) == "red" then
saystring ("отмечен")
else
saystring ("неотмечен")
endif

Тогда проверки ради вставил оператор
SayString (GetColorName (GetColorText ()))

И оказалось, что эта функция выдаёт строку "красный".
А сравнение-то происходит со словом "red"!
Тогда я заменил в условии строку "red" на строку "красный" и всё
заработало как нужно.
В то же время в скриптах SayNextLine и SayPriorLine оператор

If GetColorText () != "red" then
SayString ("отмечен")
EndIf

Отрабатывает правильно.
Здесь мне вообще непонятно, как можно сравнивать целочисленную
функцию GetColorText со строкой?
Правда, как я понял, содержимое сравнивамой строки на результат
работы скриптов SayNextLine и SayPriorLine никак не влияет. Так
я вообще убрал оператор сравннения, так что получилось:

If GetColorText () then
SayString ("отмечен")
EndIf

И это тоже работает.
А вот в функции NewTextEvent такой фокус не прошёл! Почему?

Тогда я просто сделал глобальную замену слова "red" на слово
"красный"
И всё заработало как нужно.

В чём же дело? Как это понять?!
Почему численную функцию GetColorText можно сравнивать со
строкой?

Прошу прощения за столь длинную питицию. Но уж очень интересно
это понять...

С уважением

   2007-03-26 15:34:59 (#651034)