PDA

Ver la Versión Completa : Excepción llamando propiedad


Guillermo80
14-05-2008, 20:47:48
Hola, me pasa una excpeción un tanto extraña. Resulta que mi programa principal hace una codificación, pero justo antes de codificar, llamo a una función que me deshabilita (Enabled=false) todos los botones del formulario, y después, cuando termina, llamo a otra que los vuelve a habilitar:

procedure TForm1.BtnDecodeClick(Sender: TObject);
begin

DesHabilitaTodo(Sender);
DecodeFile(EditDest.Text, EditFileName.Text);
HabilitaTodo(Sender);

end;Pues resulta, que todo va bien, pero cuando llama a HabilitaTodo, es cuando salta la siguiente excepción:

Project E:\...\programa.exe faulted with message: 'accesviolation at 0x0044cf17: read of address 0x445c3a43'. Process Stopped.
Use Step or Run to continue.No entiendo por qué ocurre, ya que dehabilita bien, codifica bien, pero al volver a habilitar... ¡ zas, en toda la boca !

Por cierto, DeshabilitaTodo, hace la propiedad de cada boton a Enabled:=false, a todos menos a un botón de Cancelar.

¡¡ HELP !!

roman
14-05-2008, 20:51:06
Si el fallo aparece al llamar a HabilitaTodo, quizá sea mejor que pongas el código que usas en ese procedimiento.

// Saludos

coso
14-05-2008, 20:52:32
Pon el codigo de 'habilitaTodo'

Guillermo80
14-05-2008, 20:59:34
La función no es ningún misterio, y es análoga a DeshabilitaTodo (salvo en el botón de cancelar):

procedure TForm1.HabilitaTodo(Sender: TObject);
begin
EditFileName.Enabled := true;
EditDest.Enabled := true;
Button1.Enabled := true;
BtnDecode.Enabled := true;
Titulo.Enabled := true;
Artista.Enabled := true;
Album.Enabled := true;
Fecha.Enabled := true;
Pista.Enabled := true;
Genero.Enabled := true;
CheckBoxVentana.Enabled := true;
CheckVentanas.Enabled := CheckBoxVentana.Checked;
Memo1.Enabled := true;
end;

Asímismo le añadí la cabecera del método arriba en la declaración de cabebceras:

procedure TForm1.HabilitaTodo(Sender: TObject);

Guillermo80
14-05-2008, 21:01:31
Otro detalle, resulta que si no llamo a HabilitaTodo y hago simplemente:

EditFileName.Enabled := true;

...el fallo sigue saliendo.

coso
14-05-2008, 21:18:54
mira con el debugger a ver si es q te has cargado algun objeto con la funcion decodefile. O con el Ctrl+F3, para saber donde exactamente te salta la excepcion. A veces tb lo q pasa es q si se sale mucho de algun programa (por excepcion o con el ctrl+f2) se quedan restos en memoria ... se fastidia :confused: prueba entonces de cargar otra vez el delphi...

Ahora q estoy pensando, tienes algun evento onchange en alguno de estos objetos q te pudiese provocar la excepcion?

coso
14-05-2008, 21:48:30
y en DecodeFile liberas todos los objetos q creas?

Guillermo80
15-05-2008, 15:33:09
A lo que me comentabas:

Ahora q estoy pensando, tienes algun evento onchange en alguno de estos objetos q te pudiese provocar la excepcion?

No, no lo tengo.

y en DecodeFile liberas todos los objetos q creas?

En principio creo que sí, tendría que analizarlo más minuciosamente tal vez, pero me extraña.

Ctrl+F3, para saber donde exactamente te salta la excepcion

Pues la verdad es que salta justo donde te comentaba antes, no entiendo este punto de depuración.

De todas formas he cambiado un poco el diseño y ya no necesito llamar necesariamente a esta función que comento, pero el problema digamos que internamente "sigue ahí".

coso
15-05-2008, 22:14:08
>> no necesito llamar necesariamente a esta función que comento

q funcion?

Guillermo80
16-05-2008, 18:02:26
q funcion?

La que me da el problema, o siendo precisos, lo que dije antes de que cualquier acceso a propiedad de inhabilitación produce excepción.

coso
16-05-2008, 20:33:38
pero en q objeto te salta? comprueba antes si es nil (y pq)