PDA

Ver la Versión Completa : Problema con PaintBox


b3nshi
25-07-2007, 22:03:46
Les explico lo q hice: tengo una aplicacion q hace graficas... un formulario principal MDIform y un hijo: MDIchild...
en el formulario hijo tengo un Tpagecontrol con dos paginas...

En pagina1 pido q ingrese la funcion y en pagina2 realizo la grafica de los datos ingresados en un paintbox q tengo... para ello en el evento onpaint tomo los datos de la pagina1 y luego voy graficando.

Mi problema esta cuando quiero cerrar este formulario mdi, luego de haber ingresado a pagina2 me aparece un error q dice control " has not parent window... y si no ingreso y cierro el formulario no hay ningun problema... es decir lo cierra correctamente...

Supongo q el problema estara en el PaintBox, pero no se bien porq... ya q una vez q lo pinta empieza el problema... alguien puede ayudarme?

Desde ya muchisimas gracias!

{Saludos}

Neftali [Germán.Estévez]
26-07-2007, 10:33:42
Se me ocurre que esté "saltando" el evento OnPaint cuando estás destruyendo el formulario (cerrando) y cuando ya hay cosas que están destruídas.

En el evento OnPaint prueba a colocar esto al principio:


// Se está destruyendo
if (csDestroying in Self.ComponentState) then begin
Exit;
end;

...aqui sigue en OnPaint

b3nshi
26-07-2007, 16:10:35
Hola... muchas gracias por tu respuesta... pero parece q por ahi no viene la mano... asi q lo q hice fue empezar a probar por porciones el codigo para ver a donde estaba el error... y resulta q aparece aqui:


{aib1 es un archivo binario, info es un registro,
Tam es una variable q almacena "filesize(aib1)"
arreglo_valor es un arreglo q almacena la informacion del archivo (solo el valor, ya q el registro tiene otros datos)}

{Tamaño del arreglo}
Setlength(arreglo_valor,tam - 1);

{Ahora cargo el arreglo y voy almacenando el valor maximmo}
seek (aib1,tam);
for i:= 0 to tam - 1 do begin
seek(aib1, tam - 1);
read(aib1,info);
if valormax < strtofloat(info.valor) then
valormax := strtofloat(info.valor);//Actualizo el valor maximo
arreglo_valor[i]:= strtofloat(info.valor);
end;



y bueno lo q hice fue cambiar por estas lineas de codigo y ya no me causa el error:



{Tamaño del arreglo}
Setlength(arreglo_valor,tam); //<--Primer cambio,e l tamaño, ya no es tam -1

{Ahora cargo el arreglo y voy almacenando el valor maximmo}
seek (aib1,tam);
pos := filepos(aib1); //Declaro esta variable q va guardando la posicion del archivo
for i:= 0 to tam - 1 do begin
seek(aib1, pos - 1);
read(aib1,info);
if valormax < strtofloat(info.valor) then
valormax := strtofloat(info.valor);//Actualizo el valor maximo
arreglo_valor[i]:= strtofloat(info.valor);
pos := filepos(aib1);
end;


Y ahora como dije ya no causa el error... pero no entiendo porq... será porq el tamaño del arreglo q estaba definiendo es menor q el tamaño q realmente necesitaba? :confused:

No se... la verdad ni idea... si alguien encuentra el motivo del error y su solucion voy a estar muy agradecido...:p

{Saludos}