Newsgroup: it.comp.lang.delphi
Titolo: Domanda "lettere" dbgrid

Ciao a tutti io ho una dbgrid con circa 200 campi incolonnati.... mi sarebbe
molto utilie, per esempio, digitando la lettera "s" che il cursore della
dbgrid si posizioni sul primo campo che inizia per "s".... l'operazione non
dovrebbe essere scatenata dal alcun bottone ma dalla sola prssione sulla
tastiera della lettera.... insomma avete presente quando avete molti file in
una cartella di windows e che per cercarli digitate la prima lettera e lui
si posizione sul file che inizia per quella lettera?
spero di essermi spiegato grazie 1000
-- 
Lorenzo Mendini Iz2FOS
ICQ: 26993628 (Ayrton)
http://www.polopositivo.org
 (Home Page)

Lorenzo Mendini Iz2FOS
	Ciao
	MassimoB
 

Ciao io ho copiato il tuo codice nell onkeypress ma non funziona... non fa
nulla come ceh non lo avessi fatto.....mi sono scordato una cosa...la
tabella è alimentata da una query..se ti può aiutare...Grazie 1000

tabella è alimentata da una query..se ti può aiutare...Grazie 1000
non conta a cosa attacchi la griglia ... dovrebbe essere un codice indipendente
dal sistema di reperimento dati ma dipende solo dai field a cui sono legate le 
colonne.
prova a inserire, nell'OnKeyPress, prima del codice che ti ho dato
una riga di debug del genere
ShowMessage(Key);
poi esegui e vedi se ti mostra un messageBox con scritto il pulsante premuto.
Se non ti mostra il messageBox allora hai fatto casino con gli eventi della griglia
o c'è qualcosa che non va nel tuo progetto.
Se invece ti mostra il messaggio le uniche possibilità sono che:
Columns.Count<=0;
(Columns[I].Field.DisplayLabel[1] <> key) per ogni I 
(cioè per ogni field della query);
controlla queste due cose.
non so cosa altro dirti ... da me il codice va benissimo ... non fa una piega.
la dbGrid è ReadOnly? ... perchè se no devi fare un controllo se la query è
in edit ... 
la dbGrid ha attivata l'opzione di selezione? ... dai un'occhiata alle Options 
della DBGrid
cmq al posto di copiarlo e basta prova a comprendere il codice
aiutandoti con l'help e vedere dove è il problema ... la logica dovrebbe 
andare bene ... infatti da me va ....
qualche buon'anima vorrebbe provare il codice del post precedente
e darci un feedback??? plz :)
poi se continua a non adare ti consiglio di fare un progetto vuoto di prova
con un form e sopra una dbgrid ... prova il codice e vedi se va ...
	Ciao
	MassimoB
 

Qual'è l'opzione di selezione?

Qual'è l'opzione di selezione?
le impostazioni della dbGrid1 che uso io, su 
cui il codice funziona perfettamente, sono:
ReadOnly = true
option.dgEditing = true
option.dgAlwayShowEditor = false
option.dgTitles = true
option.dgIndicator = true
option.dgColumnResize = true
option.dgColLines = true
option.dgRowLines = true
option.dgTabs = true
option.dgRowSelect = false
option.dgAlwayShowSelection = false
option.dgConfirmDelete = true
option.dgCancelOnExit = true
option.dgMultiSelect = false
(quello che ho scritto è pseudoCodice quindi non funziona se
lo copi nel codeEditor di delphi)
che poi tranne per il ReadOnly sono le impostazioni di base
della DBGrid quando la posizioni sul form.
	Ciao
	MassimoB
 

la mia non č readonly, infatti sulla mia č impostato su false..

la mia non è readonly, infatti sulla mia è impostato su false..
allora dovrai fare dei controlli in più per evitare che quando 
vuoi selezionare la colonna, data la pressione di un tasto, 
il componente DBGrid entri in edit, cosa che di norma fa,
rendendo vano la selezione di colonna. Per questo a te
sembrava che il codice non facesse niente.
E viceversa se il componente è in edit, devi evitare che 
possa cambiare colonna, poichè questo potrebbe significare 
un movimento di dati indesiderato fra componente e DB.
La proprietà che ti devi studiare per eseguire questi controlli
è Dataset.State vedi Help di delphi a riguardo.
un esempio di controllo potrebbe essere il seguente:
If (DBGrid1.Datasource.dataset.State In [dsEdit,dsInsert]) Then
Begin
  .........//esegue il codice solo se il dataset è in edit o insert
           //cioè solo se si stanno modificando i dati o inserendo
           //un nuovo record.
	Ciao
	MassimoB