Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Detectar cambio en componentes (https://www.clubdelphi.com/foros/showthread.php?t=55708)

capo979 24-04-2008 16:16:45

Detectar cambio en componentes
 
Hola gente!!!

Quisiera preguntarles como detectar cambios en los componentes por ejemplo en un Edit me van a decir que use el evento OnChange pero por ejemplo en un DBLookupComboBox que no tiene un OnChange como se???. Esto lo quiero hacer porque tengo un formulario donde están todos los componentes a guardar y si cierra el formulario y cambio un campo quiero preguntar que ha hecho cambios y si desea guardarlos y si no toco ningún campo que no pregunte nada

Saludos

Caro 24-04-2008 16:46:59

Hola capo979, lo que yo haría sería guardar en variables todos los valores con los que estaría entrando al formulario y una vez que se quiera grabar pregunto esos valores con lo nuevos valores que hay en los componentes. O si quieres usar el OnChange, entonces talvez en vez de usar un DBLookupComboBox, utilizas un ComboBox normal y lo llenas a mano.

Saluditos

capo979 24-04-2008 16:49:40

Tengo que usar un componente de base de datos no puedo usar un combobox. Necesito saber si hay alguna forma más facil de preguntarle al componente si cambio

saludos

MaMu 24-04-2008 17:01:18

Cita:

Empezado por capo979 (Mensaje 282282)
Tengo que usar un componente de base de datos no puedo usar un combobox. Necesito saber si hay alguna forma más facil de preguntarle al componente si cambio

saludos

Lo que dice Caro esta muy bien, en el evento OnShow, almacenas en variables todos los estados de los componentes, y luego, en OnClose comparas uno a uno con el estado al momento del cierre, si alguno es distinto, es porque ha sido cambiado por lo tanto preguntas si ha de ser guardado o no.

Saludos

santus 24-04-2008 17:05:05

Se me ocurre que puedes usar el evento OnDataChange del datasource, si es que lo tienes conectado a un datasource. Este evento se ejecuta cada vez que cambian los datos de un field. En tu caso, me crearia una rutina basica en donde pregunte si el campo se modificó o no y activar una variable booleana en en base a eso mandar un mensaje o no... son ideas..

el evento OnDataChange te pasa como parametro el campo (field) que se está modificando. Quiza te sirva...

Dedalo 24-04-2008 17:10:22

Es mucho mas sencillo que todo eso. Si has alterado algun componente de la base de datos, sea cual sea, el estado del TTable es dsEdit, y si no se ha tocado nada el TTable.Status esta en dsBrowse. Antes de cerrar consultas el estado, si esta en dsBrowse no hay cambios, y si esta en otro estado diferente actuas en consecuencia, pues el estado tambien podria estar en estado dsInsert si se ha metido una linea nueva en un DBGrid.


La franja horaria es GMT +2. Ahora son las 11:22:33.

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