Ver Mensaje Individual
  #4  
Antiguo 04-08-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 22
andres1569 Va por buen camino
Hola de nuevo:

En el ejemplo que te puse, la comprobación de si es ReadOnly la efectúa sobre la propiedad SelectedField del DBGrid. Esta propiedad obtiene el valor a partir del DataSet al que está enlazada, de modo que funciona si el campo está definido como ReadOnly en la Tabla/Consulta correspondiente. Si no quieres cambiarlo allí sino sólo a nivel del Grid, entonces habría que hacer la comprobación sobre la propiedad Columns, tal como indica el código que te pongo corregido:

Código:
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
var
  AntIndex : Integer;
begin
  AntIndex := CurIndex;
  with DBGrid1 do
  begin
    CurIndex := SelectedIndex;

    if ((SelectedField <> nil) AND (SelectedField.ReadOnly)) OR
       ((Columns[CurIndex] <> nil) AND (Columns[CurIndex].ReadOnly)) then

    begin
      if AntIndex > CurIndex then
        if ValidFieldIndex(CurIndex - 1) then SelectedIndex := CurIndex - 1
        else
      else if ValidFieldIndex(CurIndex + 1) then SelectedIndex := CurIndex + 1
    end;
  end;
end;
Ahora hacemos ambas comprobaciones, puesto que si es ReadOnly en el Dataset, tampoco se podrá editar aunque no lo esté a nivel de columnas en el DBGrid.
__________________
Guía de Estilo
Responder Con Cita