Вверх ↑
Ответов: 2415
Рейтинг: 691
#1: 2025-04-13 23:49:01 ЛС | профиль | цитата
Скорее всего над правками все. Поправил код и сейчас он выглядит логичней. Флаги удаляются, а не подменяются и нет лишнего. Конечно нужно протестировать все.

Скачать архив


Нашел другую ошибку. Она не связана с текущими правками (можно легко проверить отключив весь код NM_CUSTOMDRAW). Ошибка в следующем:
1. Таблица в множественном режиме (MultiSelect = true)
2. Сбросить все выделенные строки (нажать на пустое поле)
3. Используя курсор мыши выделить первую строку (верхнюю), затем с зажатым Ctrl выбрать вторую строку (следующую за первой), еще раз нажать на вторую строку с зажатым Ctrl чтоб снять выделенную строку
И тут возникает вопрос. Сколько строк выделено в таблице?

На таблице отображается на данный момент 1 строка. onSelect после второго нажатия на одну и туже строку событие не выдает (о чем и сообщает в описании). Но если бы вместо второй строки снять выделение с первой, то onSelect сработал. Черт с ним с onSelect, вернемся к количеству выделенных строк.

Если спросить у MST_Selected то SelCount сообщит что выделена одна строка. Вроде все сходится. Но если задействовать doSelectInvert (инвертировать выделенные строки) у MST_SelectRow, то выделятся все строки кроме двух первых, что значит что все таки две строки выделено.

Если проделать еще один пункт:
4. Зажать Ctrl и с помощью кнопок стрелок вверх или вниз сдвинуть хоть на одну строку рамку фокуса.
Если сейчас инвертировать выбор строк, то будет все правильно (выделятся все строки кроме одной).

Пока вывод такой что что-то в таблице не обновляется. Причем при выборе разных строк (к примеру если выбрать первую и третью ошибки нет), ошибка может появиться, а может и нет. Хорошо бы найти что.

Схема для тестирования ошибки

Add(MainForm,4651952,266,217)
{
Width=683
Height=500
Position=1
link(onCreate,3556725:doEnum,[])
}
Add(StrList,6915816,315,175)
{
Strings=#33:1;test string 111;test string 12;|33:2;test string 121;test string 22;|33:3;test string 131;test string 32;|33:4;test string 141;test string 42;|33:5;test string 151;test string 52;|33:6;test string 161;test string 62;|33:7;test string 171;test string 72;|33:8;test string 181;test string 82;|
}
Add(MST_RowAction,4870764,455,224)
{
MSTControl="testTable"
}
Add(ArrayEnum,3556725,329,231)
{
link(onItem,6192416:doMT,[])
link(onEndEnum,11481923:doWork1,[(375,244)])
link(Array,6915816:Array,[])
}
Add(MTStrTbl,4186365,322,294)
{
Left=15
Top=15
Width=640
Height=355
Font=[MS Sans Serif,12,0,0,1]
Name="testTable"
Columns=#8:test1=80|9:test2=200|9:test3=200|
MultiSelect=0
Point(onSelect)
link(onSelect,11481923:doWork2,[])
}
Add(Label,14464975,448,322)
{
Left=175
Top=395
Width=290
Height=25
Font=[MS Sans Serif,12,0,0,1]
}
Add(MST_Selected,12880888,392,273)
{
MSTControl="testTable"
Point(SelCount)
}
Add(FormatStr,9258879,406,322)
{
DataCount=1
Mask="Выделенно строк: %1"
link(onFString,14464975:doText,[])
link(Str1,12880888:SelCount,[])
}
Add(HubEx,11481923,371,322)
{
link(onEvent,9258879:doString,[])
}
Add(MT_String,6192416,399,224)
{
link(onResult,4870764:doRowAction,[])
}
Add(MST_SelectRow,9185103,322,350)
{
IndexSelect=3
MSTControl="testTable"
Point(doSelectInvert)
link(onSelectRow,12417933:doWork2,[])
}
Add(Button,2053362,273,357)
{
Left=30
Top=395
Width=120
Height=25
Font=[MS Sans Serif,12,0,0,1]
Caption="InvertSelect"
link(onClick,9185103:doSelectInvert,[])
}
Add(Timer,12470391,322,406)
{
Interval=300
Enable=1
link(onTimer,12417933:doWork3,[(375,412)])
}
Add(HubEx,12417933,371,350)
{
Angle=3
link(onEvent,11481923:doWork3,[])
}
Add(CheckBox,9091168,231,399)
{
Left=170
Top=425
Width=200
Font=[MS Sans Serif,12,0,0,1]
Caption="Мониторить"
link(onCheck,6990708:doEvent,[])
}
Add(IndexToChanel,6990708,273,399)
{
link(onEvent1,12470391:doStop,[(313,405)(313,419)])
link(onEvent2,12470391:doTimer,[])
}
карма: 11

0
Редактировалось 5 раз(а), последний 2025-04-14 09:23:49