Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-07-2003
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 22
ebeltete Va por buen camino
Canvas Does Not Allow Drawing

Por que me aparece este mensaje cuando tengo determinadas aplicaciones abiretas al mismo tiempo, si ejecuto solo mi aplicacion no tengo problema pero si tengo abierto el Kazaa me aparece este mensaje
Responder Con Cita
  #2  
Antiguo 10-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
¿Sobre qué versión de Windows trabajas?.

Este error se lanza únicamente cuando un objeto TCanvas no puede crear un Handle sobre el que dibujar. En otras palabras, si tienes los recursos del sistema bajo mínimos es muy probable que Windows no permita asignar más Handles, y cuando un objeto que necesita dibujarse a través de Un TCanvas lo solicita, Windows se lo deniega, de ahí ese error.

Esto es más común en un sistema Win95 o Win98; en Win2000 los recursos del GDI tienen un límite bastante mayor. A mí me ha aparecido bastantes veces este error bajo Win98 teniendo abierto el IDE de Delphi con varios formularios que contiene gran cantidad de componentes gráficos; si ejecuto sin cerrar el IDE o sin cerrar dichos formularios, los recursos disminuyen de lo lindo.

Habría que ver cuántos recursos GDI consume esa otra aplicación, el Kazaa que comentas, cuando digo recursos GDI me refiero a Cursores, Bitmaps, Fuentes etc... No lo vas a solucionar metiendo más RAM, pues es un límite que tiene el sistema operativo.
__________________
Guía de Estilo
Responder Con Cita
  #3  
Antiguo 10-07-2003
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 22
ebeltete Va por buen camino
Estoy trabajando con Windows 98, pero lo raro es que cambie de maquina y me empezo a suceder, antes tenia menos memoria y una maquina mas lenta y no me pasaba, no hay forma de cambiar esa configuracion en Win98?
Responder Con Cita
  #4  
Antiguo 10-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Quizás los programas que tenías en la máquina vieja no consumían tantos recursos GDI. Ya digo que es algo propio del SO, y creo que es intocable, no creo que se pueda ajustar esos límites desde el registro ni nada similar, sería un riesgo para Windows.
__________________
Guía de Estilo
Responder Con Cita
  #5  
Antiguo 10-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Agrego que es un error MUY COMÚN cuando escasean los recursos, y por eso te ha pasado cuando empezaste a ejecutar tu aplicación en otro equipo, que seguramente tiene una configuración diferente al equipo donde desarrollaste la aplicación.
Este error, como dice Andrés, sucede cuando TCanvas no puede crear un Handle, y esto sucede cuando Windows le "niega" la creación del nuevo Handle para ese canvas porque llegó al tope de los recursos.

Te recomiendo leer este hilo, donde hablo de como "ahorrar" recursos en aplicaciones grandes:
http://www.clubdelphi.com/foros/show...=&threadid=253

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #6  
Antiguo 28-08-2003
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 22
ebeltete Va por buen camino
Puede ser que el problema sea porque en el timage tengo archivos jpg???? antes tenia bmp y no me daba error, lo cambie a jpg para "achicar" el ejecutable, tal vez sea eso????

Me pasa lo mismo en una pequeña aplicación!!!
Responder Con Cita
  #7  
Antiguo 28-08-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Te en cuenta que si trabajas con Jpegs, achicarás tu aplicación en recursos pero incrementarás la cantidad de código, pues tienes que introducir todos los algoritmos de Jpegs. Si los bitmaps son pequeños yo los dejaría como bitmaps.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 14-06-2004
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 22
ebeltete Va por buen camino
Vuelvo al foro porque este tema me tiene bastante confundido, agradezco y entiendo vuestras explicaciones pero sospecho que algo tiene que ver mi aplicacion, pues me pasa en varias pc's cuando ejecuto mi aplicacion, no siempre pero si a veces, y el factor comun es MI APLICACION ; puede ser algo en la forma de pintar las ventanas?, también tengo unos DBGRIDS con codigo en el evento "DrawColumnCell", puede ser algo de eso?
Gracias
Responder Con Cita
  #9  
Antiguo 16-06-2004
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Cita:
Empezado por ebeltete
... también tengo unos DBGRIDS con codigo en el evento "DrawColumnCell", puede ser algo de eso?
Mira si en dicho código creas alguna instancia de la clase TBitmap y luego no la destruyes. Los bitmaps consumen Handles de Windows.
__________________
Guía de Estilo
Responder Con Cita
  #10  
Antiguo 22-06-2004
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 22
ebeltete Va por buen camino
El codigo es algo como esto:

private
{ Private declarations }
UnColor:TColor;


procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataCol=0 then
if Table1Size.AsInteger>10
then UnColor:=clRed
else UnColor:=clBlack;

with (Sender As TDBGrid).Canvas do
begin
Font.Color:=UnColor;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, Column.Field.AsString);
end;
end;
Responder Con Cita
  #11  
Antiguo 22-06-2004
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

En el código que mencionas, resulta evidente que no puede haber una pérdida de memoria/recursos. Mira si utilizas componentes de terceros que pudieran causar dicho consumo exagerado y ten en cuenta que no tiene por qué haber un fallo de programación (el no liberar los recursos u objetos que los consuman) para que los recursos caigan tan bajo, eso sería si al cerrar la aplicación no se restituyeran, simplemente si tu aplicación hace un uso intensivo de los mismos, ya puede ser causa de el error que te sucede.

La filosofía del programa también influye, no es lo mismo que muestres formularios bajo demanda y los destruyas cuando ya no hacen falta, que por ejemplo muestres un form principal con tropecientos controles, por ejemplo divididos en un TabbedBook. Mira también de utilizar TImagesList para concentrar las imágenes en un sólo sitio, en vez de asignar Glyphs a diestro y siniestro (cada uno es un Bitmap diferente) si te es posible.

Bueno, son algunas ideas ...

Saludos
__________________
Guía de Estilo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:49:09.


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
Copyright 1996-2007 Club Delphi