Newsgroup: it.comp.lang.delphi
Titolo: Enable/Disable Highlight

Forse è una cosa semplice, ma non riesco a farla. In rete ci sono molti 
esempi su come fare l'highlight di una riga di un dbgrid, ma nessuno pare 
desideri fare quello che vorrei io, e cioè cliccare su una riga per 
evidenziarla tutta e rimuovere l'highlight con un successivo clic. Attivare 
highlight riesco, ma rimuoverlo no. Qualcuno può aiutarmi ? 
 
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 


wrote:

prova così:
 
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if (dgRowSelect in dbgrid1.options) then
   DBGrid1.Options := DBGrid1.Options - [dgRowSelect]
else
   DBGrid1.Options := DBGrid1.Options + [dgRowSelect];
 
end;
 
 

prova così:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if (dgRowSelect in dbgrid1.options) then
   DBGrid1.Options := DBGrid1.Options - [dgRowSelect]
else
   DBGrid1.Options := DBGrid1.Options + [dgRowSelect];
end;
-----------
No, non è così semplice. La riga così mostra soltanto uno sfarfallio 
continuo... 


Scusa, ho detto una cavolata. Avevo provato nell OnDraw anzichè nell'on 
Click. Il problema è che se clicco su una riga, questa dovrebbe 
evidenziarsi, ma poi se clicco su di un'altra, dovrebbe evidenziarsi 
quest'altra, mentre dovrebbe rimuovere l'highlight se clicco sulla stessa 
riga.
Adesso invece il clic sulla riga la evidenzia e un successivo cli, ovunque 
avvenga, deseleziona .. 


> ovunque avvenga, deseleziona ..
direi che ti serve la property Multiselct settato = true del DbGrid,
cosi' tenendo premuto CTRL potrai selezionare/deselezionare piu' righe.
 

"Maurizio"  ha scritto nel messaggio news:n4758s$kcs$1...@speranza.aioe.org...
direi che ti serve la property Multiselct settato = true del DbGrid,
cosi' tenendo premuto CTRL potrai selezionare/deselezionare piu' righe.
---
Grazie del suggerimento. Nel frattempo sto tentando una strada con i tag per 
tenere traccia dell riga cliccata, che pare funzioni.
Ma vorrei che la riga de-selezionata fosse de-selezionata interamente, 
mentre invece mi rimane sempre highlighted una colonna. Questo come si fa ? 


 Attivare highlight riesco, ma rimuoverlo no. Qualcuno può aiutarmi ?
 
Prova a date un'occhiata a questa griglia (gratuita) SMDBGRID che la trovi 
su 
www.scalabium.com
.
 
E' un a griglia molto ben fatta che non fa rimpiangere quelle commerciali.
Come ti e' gia' stato suggerito per evidenziare la riga su cui stai puntando 
devi usare RowSelect (se e' nelle opzioni evidenzia la riga altrimenti no).
Infine, essendo una griglia, da qualche parte la griglia deve sapere a cella 
sta puntando, quindi se eliminando dalle opzioni il RowSelect, e' vero che 
perdi la visualizzazione dell'intera riga, ma
e' anche vero che la griglia ricordera' la riga (Row) e la colonna (Col) che 
sara' impostata (verosimilmente) a Row:=riga attuale Col:=1, cosi' da 
evidenziare la prima cella della riga puntata.
 
Se vuoi perdere visivamente la posizione (riga) a cui stavi puntando, 
potresti giocare con qualche proprieta' della cella evidenziata andando ad 
impostare come colore di sfondo il bianco o quello che hai scelto tu.
In questo caso, la griglia puntera' sempre su [Row,1] ma non te accorgi 
perche' hai "camuffatto" il colore della cella puntata; In questo caso lo 
imposti addirittura nell'IDE.
Ricorda pero' che poi, se usi i tasti per navigare, a parte il puntino sulla 
sinistra (colonna 0 e sempre se lo hai attivato) non hai piu' niente (ovvero 
non sai piu' su che riga sei).
 
Spero di aver capito bene.
 
Ciao
 
Daniele
 
 
 
 

 su 
www.scalabium.com
.
 
Tu usi questa griglia abitualmente? Usa solo dataset o può usare altro?
 
A.

"Daniele"  ha scritto nel messaggio news:n48rar$5rq$1...@speranza.aioe.org...
Prova a date un'occhiata a questa griglia (gratuita) SMDBGRID che la trovi
su 
www.scalabium.com
.
 
E' un a griglia molto ben fatta che non fa rimpiangere quelle commerciali.
Come ti e' gia' stato suggerito per evidenziare la riga su cui stai puntando
devi usare RowSelect (se e' nelle opzioni evidenzia la riga altrimenti no).
Infine, essendo una griglia, da qualche parte la griglia deve sapere a cella
sta puntando, quindi se eliminando dalle opzioni il RowSelect, e' vero che
perdi la visualizzazione dell'intera riga, ma
e' anche vero che la griglia ricordera' la riga (Row) e la colonna (Col) che
sara' impostata (verosimilmente) a Row:=riga attuale Col:=1, cosi' da
evidenziare la prima cella della riga puntata.
 
Se vuoi perdere visivamente la posizione (riga) a cui stavi puntando,
potresti giocare con qualche proprieta' della cella evidenziata andando ad
impostare come colore di sfondo il bianco o quello che hai scelto tu.
In questo caso, la griglia puntera' sempre su [Row,1] ma non te accorgi
perche' hai "camuffatto" il colore della cella puntata; In questo caso lo
imposti addirittura nell'IDE.
Ricorda pero' che poi, se usi i tasti per navigare, a parte il puntino sulla
sinistra (colonna 0 e sempre se lo hai attivato) non hai piu' niente (ovvero
non sai piu' su che riga sei).
 
Spero di aver capito bene.
Ciao
 
Daniele
-----
Hai capito bene e grazie dei suggerimenti. andrò a vedere questa SMDBGrid, 
più per curiosità che per altro, perchè nel frattempo sono quasi arrivato 
alla soluzione, utilizzando i tag per ricordare su quale riga ero. Ho un pò 
di ritegno a mostrare il codice perchè certamente è scritto in modo un pò 
elementare, ma questo è il mio livello: eccolo quindi:
- Nell'evento OnCellClick del DBGrid ho inserito:
with aDBGrid do
begin
  if dgRowSelect in Options then
    if Tag <> Row then
      HighlightRiga(true)
    else
      HighlightRiga(false)
  else
     HighlightRiga(true);
  Tag:= Row;
  Repaint;
end;
 
procedure TEntryForm.HighlightRiga(YesNo: boolean);
begin
   if YesNo then
      aDBGrid.Options := aDBGrid.Options + [dgRowSelect]
   else
      aDBGrid.Options := aDBGrid.Options - [dgRowSelect];
end;
In questo modo, il comportamento è, come volevo, che se clicco su una riga 
questa viene evidenziata, se faccio un successivo clic, la riga evidenziata 
perde l'evidenziazione e se ho cliccato su una riga diversa è questa che 
viene 'highlighted'. Mi rimane da eliminare l'highlight sulla prima colonna, 
e proverò con la soluzione che mi suggerisci tu. Ma per cambiare il colore 
dello sfondo devo usare l'OnDraw ?


Ciao Alberto,

L'ho usata in passato (per le mie piccole necessita') e solo con i dataset, 
non ho provato le query ma un tentativo lo si puo' fare.
Adesso uso le griglie della TMS, in modo particolare la stringgrid, pero' a 
volte per db molto grandi (sull'ordine di 2.5-3 milioni di record) per una 
visualizzazione
rapida mi appoggio alla SMGrid.
 
Per la parte dati sto usando FireDac / ZeosLib per firebird, per i dati 
proprietari le librerie TurboDB.
 
Considerata la tua esperienza, credo ti possano bastare pochi minuti per 
capire se la SMDBGrid sia una valida alternativa alla DBGrid standard.
 
Buon fine settimana
 
Ciao
 
Daniele
 
 

 devo usare l'OnDraw ?
 
Penso sia piu' OnDrowDataCell ma non so dirti di piu' perche' io sono 
passato alle griglie della TMS che sono molto piu' avanti della SMDBGrid 
(anche se in determinate situazioni quest'ultima si fa valere).
In queste griglie ci sono due proprieta'
 
ActiveCellColor
ActiveCellColoTo
 
che permettono di gestire i colori e i font della cella selezionata (pero' 
non e' gratuita)
 
Alla prossima
 
Ciao
 
Daniele