Вверх ↑
Ответов: 2433
Рейтинг: 693
#1: 2025-04-14 22:06:40 ЛС | профиль | цитата
nesco, проблема скорее всего в MST_SelectRow в процедуре doSelectInvert. Вот смотри:

for i := 0 to sControl.Count - 1 do
if sControl.LVItemState[i] = [] then
sControl.LVItemState[i] := [lvisSelect, lvisFocus]
else
sControl.LVItemState[i] := [];
Получается что он делает выделенными все строки где вообще нет флагов, а всем остальным строкам очищает флаги. Правильнее будет убрать все флаги с строк где есть флаг lvisSelect, а все остальные выделить:

  for i := 0 to sControl.Count - 1 do
if (lvisSelect in sControl.LVItemState[i]) then
sControl.LVItemState[i] := []
else
sControl.LVItemState[i] := [lvisSelect, lvisFocus];
При такой правке начало работать правильно. Да и логичнее выглядит процедура.

nesco писал(а):
А че _OnSelState выдает?
Знать бы что означают значения OldState и newState. Не нашел описания. 0 -чистая строка, 3 -выделенная строка, 1 - фокус, а что 2?
карма: 11

0