FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Hola; ¿Que sistema operativo estás usando?
Al menos en mi Windows 7 (no se si en versiones anteriores) en el "administrador de tareas" viene un botón para llamar al administrador de recursos, con el que se puede visualizar como se va comiendo la memoria "privada" del programa. Creo que estos problemas lo dan las clases Tcolor y otras, como TFont; No se muy bien porque, pero en un truco de Ian Marteens hablaba de liberar memoria que no se está usando gracias a "SetProcessWorkingSetSize". He probado a poner en cada llamada del timer esta instrucción al iniciar el método y al cabo de un rato he obtenido estos valores en el medidor de recursos: Mem. privada consumida por ejecutable sin liberación de memoria: 2.870 Kb Mem. privada consumida por ejecutable CON liberación de memoria: 380 Kb La instrucción metida al inicio del Ontimer ha sido la siguiente
Espero que te sirva Un saludo |
#2
|
||||
|
||||
Cita:
Cita:
En cuanto al Dormant jaja si tienes razón esque ya despues de varias horas practicamente estaba colocando por todos lados instrucciones por la desesperación jaja xD y ese Dormant se me quedó ahi xD Saludos y gracias por tu ayuda!! Volveré tambien a intentar algo parecido a ver como me va ;D |
#3
|
|||
|
|||
Hola,
el 123,123 que estas pasando a bitblt son la x e y iniciales de tu bitmap, que es de 1x1 y no llega a 123,123. Para coger el color de un unico pixel creo que no vale la pena usar un bitmap, sino accediendo directamente al monitor como ya haces, con el getdc(0). A ver si mas tarde puedo prepararte un ejemplo, aunque creo que hay alguno por aqui el club. Por otra banda, con el bitmap.free es suficiente para liberarlo (no es necesario el freeimage, etc), asi que al finalizar el ontimer queda libre, por lo que probablemente el error te venga de otro lado. saludos.
quiza un poco mas sencillo...a ver si te sirve, saludos. Última edición por coso fecha: 28-12-2010 a las 11:43:05. |
#4
|
||||
|
||||
Que tal ElKurgan, ya eh utilizado la funcion:
Aplicando esta función al programa hace que funcione por más tiempo eso si se notó a primera vista, pero de igual manera despues de un tiempo se va alentando (se nota al mover la ventana) y hasta que llega al limite mostrando el mismo error...x.X Cita:
Tienes razón en cuanto a lo del bitblt, ya probé el código que pusiste (está mejor así ) de igual manera despues de un tiempo (cabe mencionar que trabaja más tiempo que el código inicial que estaba usando) se detiene la ejecución pero ahora muestra el error de que el "Canvas no permite dibujar" algo así xD, no sé igual el problema está en estar creando y creando, y con la manipulación de los handles.... Será posible mandar llamar directamente librerias Dll de windows por ejemplo.... la "user32.dll" qeu es la qeu contiene la función GetDC y la "gdi32.dll" que contiene la función GetPixel, si la puedo mandar llamar directo me retornaría un numero entero del color, en vez de estar manejando handles, así solo sería cuestion de relizar la conversion de ese numero a el color..... Es una idea que tengo pero no se como mandar llamar funciones directamente de una DLL en Delphi. x.X Saludos!! |
#5
|
||||
|
||||
Ya lo eh conseguido!
Hey! compañeros ya ah funcionado! xD.......
Utilizando el código de coso como base, utilizando la función propuesta por ElKurgan y checando más a fondo como se maneja lo del GetDC encontre que hacía falta borrar el DC obtenido al mandar llamar a la función GetDC... Ya lo eh probado por bastante tiempo sin que se comience a alentarse y sin que me arroje algún error..... Para escanear una área de la pantalla creen que sea conveniente utilizar un array bidimensional de Tcolor ó será mejor guardar esa área en un Bitmap?¡? para después hacer la búsqueda del color predominante en dicha área.. Gracias por su ayuda y su tiempo.. Saludoss!! |
#6
|
|||
|
|||
Hola,
el codigo que te puse no provoca error. Lo unico que ocupa memoria es el TControlCanvas, y creo que se pueden crear muchos controlcanvas en la memoria de un pc normal. El error lo debes tener por otro lado, que te esta comiendo recursos. Un saludo. PD: Para lo que dices, creo que lo mejor seria usar bitblt copiando a un bitmap y trabajar con el. Un saludo. |
#7
|
||||
|
||||
Cita:
Ok gracias por la sugerencia lo probaré con el BitBlt..... Saludoss y gracias por tu tiempo! |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Liberación de un Form No Modal | vejerf | OOP | 1 | 06-09-2010 19:41:20 |
Día mundial por la liberación de la cannabis. | poliburro | La Taberna | 54 | 10-05-2008 04:55:56 |
Liberación de memoria de punteros Data de un Tree. | afxe | Varios | 5 | 20-06-2007 17:12:34 |
Liberación de memoria | Jome | OOP | 5 | 22-02-2007 14:44:56 |
Problema con tbitmap | chux | Gráficos | 2 | 09-06-2006 18:11:19 |
|