Gondom a TStringGrid RangeSelectMode = rsmMulti beállításával, azon belül a sorkijelölés visszavonásával és a SelectedRangeCount és SelectedRange[] adataival kapcsolatos.
a) A Ctrl + bal egérgomb kombó beállítja egy sor 'Selected' jellegét, de ismételt kattintásra ezt a kijelölést nem hogy visszavonná, hanem a SelectedRangeCount értékét megemelve a sort ismét felveszi a SelectedRange[] listájába, és ezt akár ugyanarra (vagy bármilyen más, korábban kiválasztott) sorra kattintásonként ismétli, tehát a kijelölt sorok darabszámáról a SelectedRangeCount és SelectedRange[] adatából nyert infó teljességgel hamis lesz, mert minden egyes sor konkrétan annyiszor szerepel benne, ahányszor rákattintottak. (Ez pl. olyankor izgalmas, amikor a user figyelmét felhívom, hogy 77 tételt készül törölni a 20 tételes állományból ... és még izgalmasabb lenne, ha a program ezt meg is kísérelné.)
b) Úgy tűnik számomra (és a fórumokon se láttam jobb megoldást), hogy ha ilyen rsmMulti állapotban egy sort a user bejelölt, akkor annak "deselect"-jére az egyetlen mód, ha teljesen új kijelölést indít a táblának egy szűz helyén, azaz az összes addigi kijelölést törli. Ez annál is inkább kellemetlen, mert a rsmMulti módnak éppen az lenne az előnye, hogy teljesen random helyeket lehessen egy menetben kijelölni, vagyis a kijelölés elölről kezdése nem néhány automatikus odakattintást igényel.
Mellékelek egy pár soros programot a dolog illusztrálására.
Már 2015-ből is (!) datálódik olyan infó a netes fórumokon (igaz, TDrawGrid-del kapcsolatban), hogy ez "így működik" (a Selectedrange-adatok hibássá válnak és nincs egyedi kijelölés-törlés).
forum.lazarus.freepascal.org/index.php/topic,26955.0.html
Kérdéseim:
a) tudunk-e olyanról, hogy újabb verziókban ez esetleg változni fog?
b) hogyan érhetném el legalább azt, hogy ismételt kattintásra a kijelölés megszűnjön?
(a kijelölt sorok összeszámlálására nyilván vannak elfogadható módszerek. Esetemben a táblázat csak párszáz tételes, egy szekvenciális végigpörgetés is megteszi.)
Köszönöm!