Newsgroup: it.comp.lang.delphi
Titolo: DbGrid

Ciao a tutti,
       dopo vari tentativi andati non troppo bene, eccomi qui con un nuovo 
problema (cfredo sia nuovo !!!)
Ho un dbgrid con 4 colonne (Data, Nome, Cognome, Codice), e un bottoncino.
Entro nella form, il focus passa alla griglia e la colonna di riferimento e' 
Data.
E' possibile bloccare il movimento del cursore (in definitiva la cella 
evidenziata) solo nella colonna selezionata ??? (in questo caso Data).
Se clicco il bottoncino, passo alla colonna Nome, e il cursore si soposta in 
quella colonna, puo' andare solo su o giu e non a destra sinistra.
Non so come si possa fare !!!
Sempre con il buon D6
Grazie, Ciao e buon week end !!! 

Hai provato con 
if key = VK_Left then torna alla colonna etc.
--- posted by geoForum on 
http://www.delphiedintorni.it


Prova cosi' (non ho tempo di fare la verifica):
aggancia 2 eventi alla tua DBGrid:
object Form1: TForm1
  ...
  object DBGrid1: TDBGrid
    ...
    OnKeyDown = DBGrid1KeyDown
    OnKeyUp = DBGrid1KeyUp
  ...
  end
...
end
E poi il codice:
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift:
TShiftState);
begin
  if (Key  in [VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN]) then begin
    // skip them discarding the key
    Key := 0;
  end;
end;
procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift:
TShiftState);
begin
  Self.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift:
TShiftState);
end;
Ciao,
gp

 ha scritto nel messaggio 
news:49845912$0$1118$4faf...@reader2.news.tin.it...


Ciao a tutti,
       evidentemente ero su un altro pianeta !!!!
Ho risolto lo stesso metodo da vou proposto, ovvero intercettare la 
pressione del tasto e, in relazione al database agganciato (in effetti la 
stessa griglia e' utilizzata per altri data base, ma non tutti insieme ehhh 
:-)))) )processo il tasto premuto.
Ora sempre piu' difficile, le 4 colonne sono "agganciate" a 4 differenti 
file indice. Se si clicca in una colonna diversa da quella in uso, l'effetto 
che cerco e' quello di andare ad agganciarmi sul file indice abbinato. 
Quello che sto studiando e' l'evento oncolenter cosi' quando entro prendo il 
nome della colonna e setto il tutto.
Spero funzioni, adesso provo !!!
Grazie a tutti,
Ciao, Daniele

Ciao a tutti ...
Mi rispondo da solo !!!!!!
Ok, funziona !!!
Grazie a tutti !!! 


Visto che hai fatto, sarebbe carino vedere il codice in questo post!

 Visto che hai fatto, sarebbe carino vedere il codice in questo post!
Ok, scusa .... visto lo scarso contenuto tecnico della mia richiesta pensavo 
che la risposta era data per scontata.
Ecco il codice usato per risolvere il mio problema.
Delphi 6.0, XP SP3
Componente usato TSMDBGrid (Scalabium software free component 
www.scalabium.com
)
Codice usato per rimanere nella stassa colonna, quindi solo i cursori su e 
giu sono attivi
procedure TMain.GPKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  If Key=27 Then B1Click(Sender); // Esco dalla form
  //  abilito solo i tasti su giu
  If (Key in [VK_LEFT, VK_RIGHT]) then Key := 0
end;
Ragazzi, visto questo codice mi chiedo cosa stavo pensando quel giorno che 
ho fatto la richiesta !!!!
Codice usato quando entro nella colonna ...
OB e' una TJvOutlookBar, TP e' una TTable i file .'ind' sono file indice.
procedure TMain.GPColEnter(Sender: TObject);
Var S : String;
begin
  If OB.ActivePageIndex=1 Then
  Begin
    S:=GP.SelectedField.FieldName; // Prendo il nome del campo, quindi della 
colonna ....
    If S='Data' Then
    Begin
      OB.Pages.Items[1].Buttons[3].Caption:='Ord. X Lotto';
      If GP.Columns[0].SortType=stNone Then
      Begin
        GP.Columns[0].SortType:=stDescending;
        TP.IndexName:=PrepDataIndex+'.ind';
      End;
      GP.Columns[0].Title.Font.Color:=clRed;
      GP.Columns[1].Title.Font.Color:=clblack;
      GP.Columns[2].Title.Font.Color:=clblack;
      GP.Columns[3].Title.Font.Color:=clblack;
      GP.Columns[1].SortType:=stNone;
      GP.Columns[2].SortType:=stNone;
    End
    Else
    If S='Lotto' Then
    Begin
      OB.Pages.Items[1].Buttons[3].Caption:='Ord. X Desc.';
      If GP.Columns[1].SortType=stNone Then
      Begin
        TP.IndexName:=PrepLottoDiscIndex+'.ind';
        GP.Columns[1].SortType:=stDescending
      End;
      GP.Columns[0].SortType:=stNone;
      GP.Columns[2].SortType:=stNone;
      GP.Columns[1].Title.Font.Color:=clRed;
      GP.Columns[0].Title.Font.Color:=clblack;
      GP.Columns[2].Title.Font.Color:=clblack;
      GP.Columns[3].Title.Font.Color:=clblack;
    End
    Else
    If S='Descrizione' Then
    Begin
      OB.Pages.Items[1].Buttons[3].Caption:='Ord. X Data';
      If GP.Columns[2].SortType=stNone Then
      Begin
        TP.IndexName:=PreparazioniDiscIndex+'.ind';
        GP.Columns[2].SortType:=stDescending;
      End;
      GP.Columns[0].SortType:=stNone;
      GP.Columns[1].SortType:=stNone;
      GP.Columns[2].Title.Font.Color:=clRed;
      GP.Columns[1].Title.Font.Color:=clblack;
      GP.Columns[0].Title.Font.Color:=clblack;
      GP.Columns[3].Title.Font.Color:=clblack;
    End;
    TP.First;
  End;
end;
Credo si possa fare meglio ....( le mie capacita' in materia sono scarsine 
....) pero' funziona e me lo tengo stretto !!!
Di nuovo grazie a tutti,
Alla prossima
Ciao, Daniele 

 end;
Non vorrei scatenare flame ...
ma il commento giusto è: "disabilito solo i tasti destra e sinistra", in 
quanto se volessi seguire il commento la sintassi giusta sarebbe: if Not 
(Key in [VK_UP, VK_DOWN]) then Key := 0;
Goblin
-- 
Ibis et redibis non morieris in bello
http://goblinland.myminicity.com/

Ciao ...
Nessun flame !!!
Corretto !!!!!
Questa e' la dimostrazione di come questo argomento mi si scappato di 
........... senso !!!
Gia' non lo era all'inizio ..... non lo e' stato alla fine !!!
Alla prossima
Ciao, Daniele