FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error con Clipboard
estoy intentando copiar un bitmap al clipboard pero me sale un error "Out of system resources" en la linea indicada abajo
alguien podria explicarme porque ocurre este error? uses Clipbrd MyBitmap : TBitmap; MyFormat : Word; AData : Cardinal; APalette : HPALETTE; MyBitmap := TBitmap.Create; try MyBitmap.Handle := hbmTempBitmap; ==> MyBitmap.SaveToClipBoardFormat(MyFormat,AData,APalette); ClipBoard.SetAsHandle(MyFormat,AData); finally MyBitmap.Free; end; |
#2
|
||||
|
||||
El código que pasas tiene que funcionar sin problemas, siempre y cuando hbmTempBitmap sea un HBITMAP válido. El problema que tienes es que te estas quedando sin recursos, seguramente porque tienes demasiadas aplicaciones abiertas o el bitmap es demasiado grande. Te recomiendo probar la aplicación sin tener otras aplicaciones corriendo.
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
El problema debe ser otro, porque probe el programa compilado, sin cargar el delphi con la maquina recien reiniciada, y sigue dando el mismo error, tendra algo que ver que el objeto sea un TBitmap ?
si hago MyBitmap.savetofile me genera un archivo .bmp de 2.5 MB sera que es muy grande para el clipboad? hbmTempBitmap es una copia del desktop. |
#4
|
||||
|
||||
También hay que tener en cuenta lo que haces anteriormente en la aplicación, prueba ese código en un proyecto nuevo, sin agregados!
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
|||
|
|||
Gracias por tu ayuda, he encontrado la solucion, no se bien que hace pero funciona, use el procedimiento Dormant del objeto TBitmap.
Aparentemente Handle y SaveToClipboardFormat usan 2 copias distintas del bitmap, al usar Dormant libero una de ellas (creo que la del Handle). el codigo queda asi: try MyBitmap.Handle := hbmTempBitmap; MyBitmap.Dormant; MyBitmap.SaveToClipBoardFormat(MyFormat,AData,APalette); ClipBoard.SetAsHandle(MyFormat,AData); finally |
|
|
|