Здравствуйте, Serge.
Вы писали среда 3 мая 2006 г., 11:15:54:
>> Кстати, как руки доберутся, напишу вопрос по поводу озвучивания
>> выделенности в списке файлов.
> А Вы вроде его уже писали и Вам на него уже ответили, разве нет?
Да, я пытался как-то решить этот вопрос, но результат не очень меня
обнадёжил. Позволю себе немного поразмышлять на тему функции
NewTextEvent. Насколько мне известно, она срабатывает всегда, когда
на экране появляется новый текст. В таком случае вопрос - срабатывает
ли она, если текст не изменился, но поменял цвет, если текст на экране
не изменился, но фокус перешёл с одного элемента на другой?
По итогам прошлого обсуждения я пришёл к выводу, что придётся писать
отдельный скрипт на каждую команду перемещения - и выделения - пробел,
инсерт, стрелки, end/home, pgup/pgdn и т.д. Меня эта перспектива
как-то не очень прельщает. Кроме того, я подозреваю, что указанную
проблему выделения можно решить одной лишь функцией NewTextEvent. Тем
более, что когда я с ней экспериментировал, в результате моих действий
изменялся способ озвучивания выделенных и невыделенных файлов при
навигации и выделении.Вот я и хочу послушать мнения более умных людей
по этим вопросам, тем более, что в JAWSRUI описания функций в
соответствующем диспетчере как раз и не переведены, а без этих
описаний смысл некоторых функций остался для меня загадочным.
В общем, ниже приведу те несколько скриптов из моего файла скриптов
для Total Comander'а, которые относятся к данной проблеме.
Include "HjGlobal.jsh"
Include "hjconst.jsh"
;Include "totalcmd.jsm"
globals
string filename,
string filecolor,
String FileStatus,
Script SayNextLine ()
var
int TheTypeCode
NextLine()
If GetWindowClass (GetCurrentWindow ()) == "TMyListBox" then
if GetActiveCursor () == 0 then
sayline ()
return
endif
if IsVirtualPCCursor () == 1 then
sayline ()
return
endif
let filename = GetTextInFocusRects (GetCurrentWindow ())
let filecolor = GetColorName (GetColorText ())
SayFocusRect (GetCurrentWindow ())
If GetColorText () != "red" then
SayString ("отмечен")
EndIf
Return
EndIf
if (IsLeftButtonDown ()) then
SelectingText(TRUE)
pause ()
SelectingText(false)
return
endIf
if not IsPCCursor () then
SayLine ()
return
endIf
let TheTypeCode = GetWindowSubTypeCode (GetCurrentWindow ())
If ! TheTypeCode then
Let TheTypeCode = GetObjectSubTypeCode ()
EndIf
If (TheTypeCode == WT_TASKBAR) then
SayWord ()
Return
endIf
if (TheTypeCode == WT_UPDOWNSLIDER) || (TheTypeCode == WT_LEFTRIGHTSLIDER) then
SayWord ()
return
endIf
if (TheTypeCode == WT_TABCONTROL) then
SayWord()
return
endIf
if theTypeCode==wt_edit_spinbox then
Say(GetLine(),OT_LINE)
return
endIf
if theTypeCode==wt_editCombo then
;sayWindow(globalFocusWindow,read_everything)
return
endIf
if CaretVisible () then
SayLine ()
return
endIf
If ((TheTypeCode == WT_MULTISELECT_LISTBOX) || (TheTypeCode == WT_EXTENDEDSELECT_LISTBOX))
then
SayLine()
endIf
If TheTypeCode==WT_TreeView Then
SayTreeViewLevel()
endIf
EndScript
Script SayPriorLine ()
var
int TheTypeCode
PriorLine()
If GetWindowClass (GetCurrentWindow ()) == "TMyListBox" then
if GetActiveCursor () == 0 then
sayline ()
return
endif
if IsVirtualPCCursor () == 1 then
sayline ()
return
endif
let filename = GetTextInFocusRects (GetCurrentWindow ())
let filecolor = GetColorName (GetColorText ())
SayFocusRect (GetCurrentWindow ())
If GetColorText () != "red" then
SayString ("отмечен")
EndIf
Return
EndIf
if (IsLeftButtonDown ()) then
SelectingText(TRUE)
pause ()
SelectingText(false)
return
endIf
if not IsPCCursor () then
SayLine()
return
endIf
let TheTypeCode = GetWindowSubTypeCode (GetCurrentWindow ())
If ! TheTypeCode then
Let TheTypeCode = GetObjectSubTypeCode ()
EndIf
If (TheTypeCode == WT_TASKBAR) then
SayWord ()
Return
endIf
if (TheTypeCode == WT_UPDOWNSLIDER) || (TheTypeCode == WT_LEFTRIGHTSLIDER) then
SayWord ()
return
endIf
if (TheTypeCode == WT_TABCONTROL) then
SayWord()
return
endIf
if theTypeCode==wt_edit_spinbox then
Say(GetLine(),OT_LINE)
return
endIf
if theTypeCode==wt_editCombo then
;sayWindow(globalFocusWindow,read_everything)
return
endIf
if CaretVisible() then
SayLine()
return
endIf
If ((TheTypeCode == WT_MULTISELECT_LISTBOX) || (TheTypeCode == WT_EXTENDEDSELECT_LISTBOX))
then
SayLine()
endIf
If TheTypeCode==WT_TreeView Then
SayTreeViewLevel()
endIf
EndScript
Script SayLine ()
var
int TheTypeCode,
string strVal
;If not PCCursor, let internal processing speak.
If IsSameScript () then
SpellLine ()
Return;
EndIf
If ((! IsPcCursor ()) ||
(IsVirtualPcCursor ())) then
SayLine ()
Return;
EndIf
If GlobalMenuMode then
SayLine ()
Return
EndIf
Let TheTypeCode = GetWindowSubTypeCode (GetFocus ())
;If ! IsVirtualPcCursor () &&
If ! TheTypeCode then
Let TheTypeCode = GetObjectSubTypeCode ()
EndIf
If ((TheTypeCode == WT_MULTISELECT_LISTBOX) ||
(TheTypeCode == WT_EXTENDEDSELECT_LISTBOX) ||
(TheTypeCode == WT_LISTVIEW ) ||
(TheTypeCode == WT_LISTBOX)) then
Let strVal = GetObjectValue ()
If ! strVal then
Let strVal = GetObjectName ()
EndIf
if GetWindowClass (GetCurrentWindow ()) == "TMyListBox" then
saystring (getline ())
if GetColorName (GetColorText ()) == "red" then
saystring ("отмечен")
else
saystring ("неотмечен")
endif
return
endif
SayMessage (OT_LINE, strVal)
SayMessage (OT_POSITION, PositionInGroup ())
Return
EndIf
If CaretVisible () then
If TheTypeCode != WT_EDITCOMBO then;Edit combos should not speak FormatAndText
info.
let globalSayingCurrentItem = 1
EndIf
EndIf
SayLine ()
let globalSayingCurrentItem = 0
EndScript
Void Function NewTextEvent (handle hwnd, string buffer, int nAttributes,
int nTextColor, int nBackgroundColor, int nEcho, string sFrameName)
; Handles all newly written text. If the text is contained in a
; frame, then the frame name is passed as a parameter
; handle MSN conversations wanting attention
CheckForUrgentConversation (hwnd, buffer)
if (ProcessSelectText(nAttributes,buffer)) then
return
endIf
if (nAttributes & ATTRIB_HIGHLIGHT) then
SayHighlightedText(hwnd,buffer)
else
SayNonHighlightedText(hwnd,buffer)
endIf
If GetWindowClass (GetCurrentWindow ()) != "TMyListBox" then
return
endif
if filename != GetTextInFocusRects (GetCurrentWindow ()) then
saystring (GetTextInFocusRects (GetCurrentWindow ()))
endif
let filename = GetTextInFocusRects (GetCurrentWindow ())
if filecolor != GetColorName (GetColorText ()) then
saystring (filename)
if GetColorName (GetColorText ()) == "red" then
pause()
saystring ("отмечен")
else
pause ()
saystring ("неотмечен")
endif
endif
let filecolor = GetColorName (GetColorText ())
EndFunction
; этот скрипт я практически весь написал сам. Чтобы сделать
; озвучивание выделения файлов пробелом корректным, мне пришлось
;выдрать большой кусок из другого скрипта и вставить в этот.
Script SpaceBarHandling ()
SpeechOff ()
{SpaceBAR}
Pause ()
SpeechOn ()
If GetWindowClass (GetCurrentWindow ()) == "TMyListBox" then
if GetActiveCursor () == 0 then
sayline ()
return
endif
if IsVirtualPCCursor () == 1 then
sayline ()
return
endif
let filename = GetTextInFocusRects (GetCurrentWindow ())
let filecolor = GetColorName (GetColorText ())
SayFocusRect (GetCurrentWindow ())
If GetColorText () != "red" then
SayString ("отмечен")
EndIf
Return
else
SayString ("пробел")
EndIf
EndScript