Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-08-2016
joel hernandez joel hernandez is offline
Registrado
NULL
 
Registrado: may 2016
Posts: 5
Poder: 0
joel hernandez Va por buen camino
Asignacion de evento OnEditValueChanged

Buenos dias.

Primero que nada Quiero presentarme, soy nuevo en este foro, y con delphi igual.

Tengo un detalle con el cual espero me puedan ayudar.

estoy construyendo un cxGrid con columnas dinamicas, entre ellas tengo 3 columnas (teorico, fisico, diferiencia) de las cuales Fisico es editable, lo que requiero es que al editar el valor de esta columna se realice una operacion de la diferiencia entre teorico y fisico, y el resultado este en la columna Diferiencia.

Esa es la idea. y el codigo que estoy ocupando cara asignar ese evento a la columna fisico.
Código Delphi [-]
procedure TFrmPreInventario.pHabilitaColumnaEdicion;
  begin
      if cxCol_Mod <> nil then
      begin
        cxCol_Mod.Options.Editing := True;
        cxCol_Mod.Options.Focusing:= True;
        cxCol_Mod.Focused:=True;
        cxCol_Mod.Properties.OnEditValueChanged:= Diferiencias;
      end;
  end;
En funcion Diferencias lo unico que hago es setear una variable, antes le habia puesto un mensage de dialogo, crei que ese era el problema asi que lo cambie por el seteo de una variable.
Código Delphi [-]
 procedure TFrmPreInventario.Diferiencias(Sender: TObject);
    var
    ant  : string;
    begin
        ant   := cxCol_Mod.EditValue;
     end;
El problema es me manda un mensaje de acces violation, que estaré haciendo mal ? ya que si asigno otro evento como por ejemplo OnMosueClk funciona correctamente.

De antemano agradezco la ayuda que puedan brindarme.

Última edición por ecfisa fecha: 01-08-2016 a las 22:27:03. Razón: Agregar etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #2  
Antiguo 01-08-2016
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Creo que lo que intentas hacer se explica en éste link.

Principalmente veo que debes trabajar con el Sender que es de tipo TcxCustomEdit, asi:

Código Delphi [-]
Var
Edit: TcxCustomEdit;
Ant: String;
y dentro de tu código "typecastearlo" asi:

Código Delphi [-]
Edit := Sender as TcxCustomEdit;
Ant:= Edit.EditingValue;

Por otro lado, veo que se sugiere utilizar una variable variant para recibir el valor "por si acaso", para que no te de un problema de conversión en caso que no pueda transformarse en string, algo asi:

Código Delphi [-]
 var
 Edit: TcxCustomEdit;
 ANT: Variant;

begin
 Edit := Sender as TcxCustomEdit;
 ANT := Edit.EditingValue;

Espero que te sirva... pues no he utilizado estos componentes
Responder Con Cita
  #3  
Antiguo 02-08-2016
joel hernandez joel hernandez is offline
Registrado
NULL
 
Registrado: may 2016
Posts: 5
Poder: 0
joel hernandez Va por buen camino
Buenos dias creo que ese no es problema para obtener los valores y realizar la operación, el problema es al momento de asignarle un proceso al evento que estoy creándole a esa columna.


cxCol_Mod.Properties.OnEditValueChanged:= Diferiencias;

Específicamente en esa linea de codigo, ya intente ponerla al momento de crear el grid. pero marca el mismo error de Acces violation.
el problema es que si pongo otro evento si se crea correctamente el evento y se manda a llamar.
Responder Con Cita
  #4  
Antiguo 03-08-2016
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Si el error es en esa línea,

Código Delphi [-]
cxCol_Mod.Properties.OnEditValueChanged:= Diferiencias;

entonces hay tres posibilidades:

1) Que el objeto cxCol_Mod no esté instanciado, lo cual no es cierto, pues lineas antes ya hiciste otras asignaciones
2) Que el objeto cxCol_Mod.Properties no esté instanciado, lo cual tampoco creo, pues este objeto se debe crear al momento de instanciarse el objeto cxCol_Mod
3) Por último, está el procedimiento diferencias, que debiste haber definido dentro de algún objeto :

Procedure OnEditValueChanged(Sender:Tobject) of object

Lo único que se me ocurre es que éste procedimiento se haya definido dentro de un objeto que al momento de la asignación aun no esté instanciado.

saludo
Responder Con Cita
  #5  
Antiguo 03-08-2016
joel hernandez joel hernandez is offline
Registrado
NULL
 
Registrado: may 2016
Posts: 5
Poder: 0
joel hernandez Va por buen camino
Podrias explicarme un poco mas sobre esto como podria solucionarlo. en caso de que este fuera mi erro.


Cita:
Empezado por gatosoft Ver Mensaje
Si el error es en esa línea,

Código Delphi [-]
cxCol_Mod.Properties.OnEditValueChanged:= Diferiencias;

entonces hay tres posibilidades:

1) Que el objeto cxCol_Mod no esté instanciado, lo cual no es cierto, pues lineas antes ya hiciste otras asignaciones
2) Que el objeto cxCol_Mod.Properties no esté instanciado, lo cual tampoco creo, pues este objeto se debe crear al momento de instanciarse el objeto cxCol_Mod
3) Por último, está el procedimiento diferencias, que debiste haber definido dentro de algún objeto :

Procedure OnEditValueChanged(Sender:Tobject) of object

Lo único que se me ocurre es que éste procedimiento se haya definido dentro de un objeto que al momento de la asignación aun no esté instanciado.

saludo
Responder Con Cita
  #6  
Antiguo 03-08-2016
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Una solucion mas simple podria ser, agregar un campo calculado (Diferencia) al dataset
Responder Con Cita
  #7  
Antiguo 03-08-2016
joel hernandez joel hernandez is offline
Registrado
NULL
 
Registrado: may 2016
Posts: 5
Poder: 0
joel hernandez Va por buen camino
Claro Gracias, esta seria la solucion si los calculos no se hicieran en tiempo d eejecucion.

es decir yo edito la columna Fisico y en el evento OnEditValueChange se deve hacer el calculo de Fisico menos Teorico = Diferencia que debe colocarse en dicha columna.

Si me doy a entender?

Cita:
Empezado por Kipow Ver Mensaje
Una solucion mas simple podria ser, agregar un campo calculado (Diferencia) al dataset
Responder Con Cita
  #8  
Antiguo 03-08-2016
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Cita:
Empezado por joel hernandez Ver Mensaje
Claro Gracias, esta seria la solucion si los calculos no se hicieran en tiempo d eejecucion.

es decir yo edito la columna Fisico y en el evento OnEditValueChange se deve hacer el calculo de Fisico menos Teorico = Diferencia que debe colocarse en dicha columna.

Si me doy a entender?
Exactamente para eso existe el campo calculado de los dataset, cada vez que se realiza un cambio en la data se ejecuta. probalo.
Responder Con Cita
  #9  
Antiguo 03-08-2016
joel hernandez joel hernandez is offline
Registrado
NULL
 
Registrado: may 2016
Posts: 5
Poder: 0
joel hernandez Va por buen camino
Vale me parece una buena opción si esto funciona cada vez que tecleo algo en la celda del grid.


en ese caso me puedes ayudar con un ejemplo estoy ocupando un TAdoStoreProc y un TrvDataSetConnection, para obtener los datos de mi BD

Lo que estuve revisando son ejemplos con un ADOQuery y en modo diseño.


Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
OnEditValueChanged Keys RebeccaGL Varios 2 29-12-2011 18:18:40
quantumgrid.OnEditValueChanged RebeccaGL MySQL 0 19-09-2011 15:31:30
Asignación de un evento en tiempo de ejecución dec Trucos 0 29-06-2006 23:44:25
Asignación IP juanchi Internet 1 24-09-2003 19:07:05
Asignacion de un evento en tiempo de ejecución Periyo Varios 1 02-06-2003 18:42:55


La franja horaria es GMT +2. Ahora son las 03:25:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi