Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Problema con PaintBox (https://www.clubdelphi.com/foros/showthread.php?t=46179)

b3nshi 25-07-2007 22:03:46

Problema con PaintBox
 
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:

Código Delphi [-]
  // 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:

Código Delphi [-]
{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:

Código Delphi [-]
 
{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}


La franja horaria es GMT +2. Ahora son las 12:37:19.

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