Newsgroup: it.comp.lang.delphi
Titolo: ListView lenta nel SelectAll

Sto utilizzando una ListView (in modalità virtuale) per visualizzare
un'elevata quantità di informazioni. Nel caso limite che sto testando, ci
sono 120 mila linee (visualizzazione vsReport)
Il problema è che richiamando il metodo SelectAll ci vogliono alcuni secondi
prima che l'operazione venga completata.
Differentemente, se seleziono sul primo elemento poi mi sposto sull'ultimo e
ci clicco sopra tenendo premuto il tasto shift ottengo lo stesso risultato
ma istantaneamente. Come può spiegarsi questa differenza e, soprattutto,
come ottenere la stessa veloce selezione tramite codice?
-- 
Lis                   
www.alessandroghezzi.it
Angolo del buonumore  
www.alessandroghezzi.it/ridere
O'Telma Formula 1     
www.snurl.com/otelma
L’esperienza è un modo per dare un nome agli errori (Oscar Wilde)

 come ottenere la stessa veloce selezione tramite codice?
Hai provato a chiamare /BeginUpdate/ prima di iniziare la selezione con 
/SelectAll/ e, magari con un *try...finally*, chiamare /EndUpdate/ alla 
fine? La butto lì... :-)
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

fine? La butto lě... :-)
AFAIK, la TListView non ha BeginUpdate e EndUpdate.
Magari ti confondi con il TVirtualStringTree della Soft Gems ?

 Magari ti confondi con il TVirtualStringTree della Soft Gems ?
No, ho fatto un po' di confusione. I metodi /BeginUpdate/ e /EndUpdate/ 
sono presenti nella proprietà /Items/ del controllo *TListView*, e 
normalmente li utilizzo quando aggiungo un serie nutrita di elementi per 
evitare che la Collection generi eventi indesiderati rallentando le 
operazioni.
A questo punto, però, credo che sia quindi inefficace e ininfluente 
l'uso di questi metodi per un'operazione di /SelectAll/, a meno che essi 
non impediscano a ciascun *TListItem* di segnalare la variazione del 
proprio stato (che passa a "selezionato", /Selected/ a True) guadagnando 
un minimo di velocità.
Non per niente ho scritto "la butto lì": senza scendere in dettagli, ci 
vuole un attimo a provare e a vedere se si ottiene qualche giovamento, 
ma l'Original Poster mi ha abbandonato e non scrive più nulla. :-)


 testando, ci sono 120 mila linee (visualizzazione vsReport)
Oltre al BeginUpdate e EndUpdate, credo che la lentezza sia dovuta al fatto 
che, utilizzando il SelectAll vengono appunto processati e selezionati tutti 
i record (e quindi, nel caso di una ListView in modalità virtuale, vengono 
caricati), mentre usando la tastiera vengono caricati solo i record della 
prima pagina e quelli dell'ultima... ma può darsi che stia dicendo una 
cazzata.
L'unica cosa sicura è che, se usi la LV in modalità virtuale, IMHO ti 
conviene progettare il tutto in modo che la LV sia solo un "wrapper" intorno 
ai dati veri e propri... mi spiego meglio: se questa LV per esempio è una 
rappresentazione di un file, invece di fare le normali operazioni che si 
fanno di solito sulle LV, agisci sul file stesso e ricaricalo nella LV.
Posso chiederti, nel tuo caso specifico, a cosa ti serve fare una SelectAll?
-- 
Jax
"Il mio pc lo uso come contrappeso per le braccia. Non mi fido di quelle 
persone che fanno tutto col computer. Sono alieni"
Enrico Brignano, autore e attore 

 ma l'Original Poster mi ha abbandonato e non scrive pių nulla. :-)
Non vi ho abbandonato, era venerdė sera e c'č stato di mezzo il we, e a casa
sono senza telefono :)
-- 
Lis                   
www.alessandroghezzi.it
Angolo del buonumore  
www.alessandroghezzi.it/ridere
O'Telma Formula 1     
www.snurl.com/otelma
E' meglio essere ottimisti ed avere torto piuttosto che pessimisti ed avere
ragione (Albert Einstein)

 Posso chiederti, nel tuo caso specifico, a cosa ti serve fare una SelectAll?
...dopo averne parlato un pò con i miei colleghi abbiamo convenuto che una
SelectAll non servirebbe a nulla
-- 
Lis                   
www.alessandroghezzi.it
Angolo del buonumore  
www.alessandroghezzi.it/ridere
O'Telma Formula 1     
www.snurl.com/otelma
Ci inganna più spesso la ragione che la natura (Vauvenargues)

 impostare la proprietà selected del TListItem nell'evento OnData ma...
Giusto per curiosità ho fatto questa prova e...Bingo! ;-)
-- 
Lis                   
www.alessandroghezzi.it
Angolo del buonumore  
www.alessandroghezzi.it/ridere
O'Telma Formula 1     
www.snurl.com/otelma
La paura del pericolo è mille volte più terrificante del pericolo presente
(Daniel Defoe)