Ver Mensaje Individual
  #16  
Antiguo 04-10-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Reputación: 17
rgstuamigo Va por buen camino
Arrow

Pues entonces estás haciendo uso de un dataset, ya decía yo y parece ser que no me entendiste sobre el uso del evento OnGetText,
Todo sabemos que en Delphi se puede asignar un evento tanto en tiempo de diseño como en tiempo de Ejecucion, en éste caso podrías asignar el evento OnGetText en tiempo de Ejecucion de la siguiente manera:
Primeramente debo implementar un Procedimiento o funcion, segun sea el caso,con cualquier nombre, pero que tenga los mismo parámetros que tiene nuestro evento que queremos asignarle: Por ejemplo el evento OnGetText tiene como declaracion y parametro en mi caso:
Código Delphi [-]
procedure ZTable1CampoXGetText(Sender: TField; var Text: String;DisplayText: Boolean);
Entonces como todo evento en delphi es un Puntero a un Procedimiento o funcion,segun sea el caso; lo que se puede hacer es declarar nuestro propio Manejador de evento en este caso puedo creame un Procedimiento de ésta forma:
Código Delphi [-]
 Procedure Cambiar_Vista_de_Columna(Objeto: TField; var Texto: String; MostrarTexto: Boolean);
Si observamos la declaracion del procedimeinto "Cambiar_Vista_de_Columna" tiene la misma cantidad de parámetros y los mismos parametros que el evento OnGetText y tiene que ser así:
Ahora vamos a su implementacion:
Código Delphi [-]
procedure TForm1.Cambiar_Vista_de_Columna(Objeto: TField; var Texto: String; MostrarTexto: Boolean);
begin
   Texto:=Encryptar(Texto);//Aquí cambio el valor de mi varible texto por el valor cifrado 
end;
Ahora para asignarlo en tiempo de ejecucion sencillamente podemos hacerlo de la siguiente manera:

Código Delphi [-]
DBGrid1.DataSource.DataSet.Fields[3].OnGetText:=Cambiar_Vista_de_Columna;
Lo que estamos haciendo en la anterior linea de código es hacer que el puntero del evento OnGetText del cuarto campo de nuestro DataSet, apunte a la primer direccion de memoria del nuestro procedure "Cambiar_Vista_de_Columna", de esa manera tiene una direccion de memoria válida con lo cual Delphi ejecutará las lineas de código de nuestro procedimiento; es lo que comunmente se llama "Asignacion dinámica de Eventos", ésta linea la puedes poner justo antes de ejecutar el Script o sentencia SQL o simplemnete usar el evento OnCreate del formulario; por supuesto que tambien puedo anular la ejecucion del evento(en éste caso OnGetText) en el momento que yo quiera,con tan solo hacer:
Código Delphi [-]
DBGrid1.DataSource.DataSet.Fields[3].OnGetText:=Nil;// 
No sé si me he dejado entender, pero creo que con solo hacer eso puedes solucionar tu problema, sin estar recorriendo tu dataset, así como lo haces, cosa que lo veo no muy práctica ni óptima en éste caso.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 04-10-2010 a las 23:57:13.
Responder Con Cita