PDA

Ver la Versión Completa : Error con Clipboard


chavetaz
13-11-2003, 17:24:49
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;

delphi.com.ar
13-11-2003, 17:31:06
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!

chavetaz
13-11-2003, 18:06:05
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.

delphi.com.ar
13-11-2003, 18:23:50
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!

chavetaz
13-11-2003, 19:30:25
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