Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

TStringGrid, RangeSelectMode, sorkijelölés, kijelölt sorok darabszáma 2021 nov. 02 19:39 #2559

  • Mck
  • Mck profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 26
  • Köszönetek: 0
Kerülőúton megoldottam: a StringGrid-ben felvettem egy új oszlopot a jelölés számára, és abban egy akármilyen rajzolt szimbólumot (pl. nyíl-szerű háromszöget) jelenítek meg, ha a sor "megjelölt". A szimbólum megjelenítését, az aktuális ill a megjelölt sorok színezését (a táblázat eleve többféle színű sorokkal működött), a sormegjelölésre szolgáló egérkattintások és a kapcsolt Ctrl- ill. Shift-lenyomások, valamint az egérvonszolás kezelését pedig az OnPrepareCanvas, OnCellDraw,  OnMouseDown, OnMouseMove és OnMouseUp eseménykezelőkkel oldottam meg. Macerás, de legalább pontosan olyan, amilyet szerettem volna.

TStringGrid, RangeSelectMode, sorkijelölés, kijelölt sorok darabszáma 2021 okt. 29 10:40 #2558

  • Mck
  • Mck profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 26
  • Köszönetek: 0
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!
 
Mellékletek:

  • Oldal:
  • 1