Delphi - levantar bmp en contendor ole

 
Vista:

levantar bmp en contendor ole

Publicado por pablo (8 intervenciones) el 21/06/2005 23:03:00
hola... tengo incrustando el paint en un OLE Contanier, y cuando dibujo algo, utilizo este codigo (q me pasaron) para grabarlo como BMP y no como objeto ole:

var
Data: IDataObject; //un objeto de transferencia de datos OLE, en unit ActiveX
SM: TStgMedium; //en unit ActiveX, manejador de memoria para transferencia de datos
FormatEtc: TFormatEtc;//en unit ActiveX, generaliza el formato clipboard
Bmp: TBitmap; //bmp generic
OleContainer :TOleContainer; //ole container generico
begin
OleContainer := TFAreaDeTrabajo(ActiveMDIChild).OleContainer1; //tomo el olecontainer el area a guardar
OleContainer.DoVerb(ovShow); //hago que se muestre el contenido
Data := OleContainer.OleObjectInterface as IDataObject;//accedo a bajo nivel a la API OLE y la castea como el objeto ole que contiene

//Defino formato del objeto a obtener
FormatEtc.cfFormat := CF_BITMAP; //quiero formato bmp
FormatEtc.tymed := TYMED_GDI; //indica el tipo de medio de almacenamiento: GDI: Interfaz de diseño de graficos?
FormatEtc.ptd := nil; //puntero a estructura con informacion del dispositivo destino
FormatEtc.dwAspect := DVASPECT_CONTENT;//constante que indica tipo de render a realizar al contenido
FormatEtc.lindex := -1;//indica aspecto de la imagen cerca de los limites de pagina

Bmp := TBitmap.Create; //creo el bitmap
try
OleCheck(Data.GetData(FormatEtc, SM));
{oleChek recubre rutinas COM, si éstas fallan, se podra manejar el resultado.
con getData, pasamos el formato (bmp), y devuelve un SM TStageMedium}
try
Bmp.LoadFromClipboardFormat(CF_BITMAP, SM.hBitmap,0);
{cargamos en BMP, desde el clipboard, indico que el formato sea BMP, un manejador del bitmap quien
apunta al bitmap, 0 referencia a la paleta}
Bmp.SaveToFile('c:\'+nombre+'.bmp');
{grabamos a un archivo generico}
finally
ReleaseStgMedium(SM); //liberamos espacio ocupado por SM
end;
finally
Bmp.Free; //liberamos el bitmap
end;

Ahora bien, probe 1000 variantes pero no pude hacer que al elegir un archivo .bmp, me aparezca en el contenedor ole (osea el inverso de este modulo)... algo de lo que probe fue usar la misma logica con que fue hecho este modulo, pero al usar OleCheck(Data.SetData(... recibo un mensaje de error que dice Error OLE C000005...

alguien me podria dar una mano???
un saludo
pablo!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:levantar bmp en contendor ole

Publicado por pepo (1 intervención) el 03/03/2006 23:29:51
suicidate es lo mejor q puedes hacer..

jeje
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar