Ver Mensaje Individual
  #9  
Antiguo 18-07-2017
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Reputación: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por _Leo Ver Mensaje
Como bien dice Caminante, cuando se edita in situ un campo en el DBGrid, en realidad se está haciendo en un "TEdit" (TDBGridInplaceEdit) sobrepuesto, por lo que todavía no está el contenido que estamos editando en el DBGrid.

Se podría hacer capturando el evento OnKeyPress de ese Edit sobrepuesto, pero también podemos hacer algo más sencillo ya que las pulsaciones que van destinadas a ese control también pasan por el OnKeyPress del DBGrid. A ver si te sirve esta chapucilla como base:

Código Delphi [-]
procedure TForm1.DBGridKeyPress(Sender: TObject; var Key: Char);
var
  texto: String;
begin
  if (DBGrid.SelectedField.FieldName = 'CANTIDAD') then
  begin
    // Comprobamos que existe algún control "inplace" en el DBGrid
    if (DBGrid.ControlCount > 0) then
    begin
      // Obtenemos el texto del TDBGridInplaceEdit
      texto := TEdit(DBGrid.Controls[0]).Text;
      // ...
      // Como ejemplo, si ya existe una coma en "texto" no permitimos otra
      if (Key = ',') AND (Pos(',', texto) > 0) then Key := #0;
    end;
  end;
end;
Lo he probado de esta manera y no funciona correctamente, me explico la primera vez digito 2 y la variable texto = '', luego de digitar 2 digito 1 osea 21, ahi si cuando entra a esta validación me aparece el 2, y si escribo otro número más ahi si me aparece el 1, y lo que necesito es que a medida que vaya digitando la variable texto valga lo mismo que escribí en la celda.

Es un buen indicio la manera en que lo planteas pero aún falta esa cosa y quedaría como lo necesito.

Muchas gracias.
Responder Con Cita