SoloCodigo

Programación General => Delphi => Mensaje iniciado por: fxge en Viernes 7 de Octubre de 2005, 18:44

Título: Recuperación De Un Metafile Desde El Portapapeles
Publicado por: fxge en Viernes 7 de Octubre de 2005, 18:44
Saludos:

Tengo un metafile en el portapaples y lo estoy tratando de mostrar en un control TImage a traves de la instrucción:

image1.Picture.Metafile.LoadFromClipboardFormat(Aformat,Adata,Apalette);

Según la documentación, esto debería ser suficiente para cargar el gráfico, pero se origina una excepción con el mensaje "Unsupported clipboard format"

El metafile está allí y es correcto (puede cargarse con Word, p. ejemplo) si se verifica el contenido del clipboard con Delphi se encuentran los formatos cf_metafilepict y cf_enhmetafile presentes.

Conseguí una referencia a este problema en la web pero era un foro en un idioma ininteligible para mí (¿turco?)

Agradezco cualquier ayuda que puedan ofrecerme.

Gracias de antemano.
Título: Re: Recuperación De Un Metafile Desde El Portapapeles
Publicado por: bartolomeo en Viernes 7 de Octubre de 2005, 23:45
Hola, disculpa la demora pero tengo que presentar un avance de mi proyecto y estoy supercomplicado con eso:

mirate estos link:

http://www.latiumsoftware.com/es/pascal/0011.php (http://www.latiumsoftware.com/es/pascal/0011.php)

http://community.borland.com/article/0,1410,15878,00.html (http://community.borland.com/article/0,1410,15878,00.html)
Título: Re: Recuperación De Un Metafile Desde El Portapapeles
Publicado por: fxge en Sábado 8 de Octubre de 2005, 17:53
Agradezco tu respuesta pero no veo como utilizar el enfoque de recuperar metaarchivos de bases de datos para resolver mi problema.... Estoy tratando de cargar el metaarchivo presentes en el portapapeles. :)

Saludos
Título: Re: Recuperación De Un Metafile Desde El Portapapeles
Publicado por: bartolomeo en Sábado 8 de Octubre de 2005, 20:28
Nooooo lo visteee?????

bueno aqui te mando mas pistass.


Trucos 252 y 254, te podran servir con algunas modificaciones
Título: Re: Recuperación De Un Metafile Desde El Portapapeles
Publicado por: bartolomeo en Sábado 8 de Octubre de 2005, 20:33
Código: Text
  1. procedure TForm1.WmfToJPG(FicheroJPG:string);
  2. var
  3.    MetaFile:TMetafile;
  4.    BMP:TBitmap;
  5.    JPG:TJpegImage;
  6. begin
  7.    If clipboard.HasFormat(CF_METAFILEPICT)
  8.    then begin
  9.           Metafile:=TMetaFile.create;
  10.           Bmp:=TBitmap.create;
  11.           JPG:=TJpegImage.Create;
  12.           MetaFile.Assign(clipboard);
  13.           with Bmp do
  14.           begin
  15.             Height:=Metafile.Height;
  16.             Width:=Metafile.Width;
  17.             Canvas.Draw(0,0,MetaFile);
  18.           end;
  19.           JPG.Assign(BMP);
  20.           JPG.SaveToFile(FicheroJPG);
  21.           bmp.Free;
  22.           MetaFile.Free;
  23.           JPG.Free;
  24.         end;
  25. end;
  26.  

Pero espera el problema es especificamente en el portapapeles????
Título: Re: Recuperación De Un Metafile Desde El Portapapeles
Publicado por: bartolomeo en Sábado 8 de Octubre de 2005, 20:40
En la ayuda de delphi tienes un ejemplo, busca "SaveToClipboardFormat, SetAsHandle example".

Para cortar y pegar, busca en la ayuda sobre "Clipboard", la unidad en delphi es Clipbrd, añadiendolo a los uses de tu form, ya puedes consultar si hay una imagen en el portapapeles; sería algo así como : if Clipboard.Hasformat(

Código: Text
  1. Código Delphi:
  2. if (Clipboard.HasFormat(CF_BITMAP)) or
  3. (Clipboard.HasFormat(CF_METAFILEPICT)) or
  4. (Clipboard.HasFormat(CF_PICTURE)) then
  5. //CF_BITMAP  A Windows bitmap graphic.
  6. //CF_METAFILEPICT  A Windows metafile graphic.
  7. //CF_PICTURE  An object of type TPicture.
  8. begin
  9. ...
  10. end;
  11.  

 :hola:
Título: Re: Recuperación De Un Metafile Desde El Portapapeles
Publicado por: bartolomeo en Sábado 8 de Octubre de 2005, 20:43
Lo anterior lo encontre en la web y fue publicado por otro forista.

con esto puedes adaptarlo a tu problema y solucionarlo. Chausss
Título: Re: Recuperación De Un Metafile Desde El Portapapeles
Publicado por: bartolomeo en Lunes 10 de Octubre de 2005, 17:32
Mira mas:


Código: Text
  1. uses
  2.   ClipBrd; // No olvides agregar esta línea en los uses
  3.  
  4. procedure TForm1.Button1Click(Sender: TObject);
  5. begin
  6.  if Clipboard.HasFormat(  CF_METAFILEPICT ) then
  7.    Image1.Picture.Metafile.Assign(ClipBoard)
  8.  else
  9.    ShowMessage('El contenido del portapapeles no es un MetaFile');
  10. end;
  11.  
Título: Re: Recuperación De Un Metafile Desde El Portapapeles
Publicado por: fxge en Martes 11 de Octubre de 2005, 15:15
Gracias Bartolomeo, este código si permitió cargar el metafile desde el portapapeles y visualizarlo en unTImage


If clipboard.HasFormat(CF_METAFILEPICT) then begin

      Metafile:=TMetaFile.create;
      MetaFile.Assign(clipboard);

      image1.Picture.Metafile := Metafile;

      MetaFile.Free;

 end;
Título: Re: Recuperación De Un Metafile Desde El Portapapeles
Publicado por: bartolomeo en Martes 11 de Octubre de 2005, 15:23
Pues perfecto, me alegra mucho, aunque fijate bien en la estructura de los codigos que te pase, son perfectamente funcionales yo mismo ya los probe, solo era custeion de adaptarlos a una necesidad especifica