• Viernes 8 de Noviembre de 2024, 18:44

Autor Tema:  Recuperación De Un Metafile Desde El Portapapeles  (Leído 2636 veces)

fxge

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Recuperación De Un Metafile Desde El Portapapeles
« en: Viernes 7 de Octubre de 2005, 18:44 »
0
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.

bartolomeo

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: Recuperación De Un Metafile Desde El Portapapeles
« Respuesta #1 en: Viernes 7 de Octubre de 2005, 23:45 »
0
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://community.borland.com/article/0,1410,15878,00.html

[size=109]Por que Rolo soy yo¡¡¡¡¡[/size]

fxge

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Recuperación De Un Metafile Desde El Portapapeles
« Respuesta #2 en: Sábado 8 de Octubre de 2005, 17:53 »
0
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

bartolomeo

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: Recuperación De Un Metafile Desde El Portapapeles
« Respuesta #3 en: Sábado 8 de Octubre de 2005, 20:28 »
0
Nooooo lo visteee?????

bueno aqui te mando mas pistass.


Trucos 252 y 254, te podran servir con algunas modificaciones

[size=109]Por que Rolo soy yo¡¡¡¡¡[/size]

bartolomeo

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: Recuperación De Un Metafile Desde El Portapapeles
« Respuesta #4 en: Sábado 8 de Octubre de 2005, 20:33 »
0
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????

[size=109]Por que Rolo soy yo¡¡¡¡¡[/size]

bartolomeo

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: Recuperación De Un Metafile Desde El Portapapeles
« Respuesta #5 en: Sábado 8 de Octubre de 2005, 20:40 »
0
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:

[size=109]Por que Rolo soy yo¡¡¡¡¡[/size]

bartolomeo

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: Recuperación De Un Metafile Desde El Portapapeles
« Respuesta #6 en: Sábado 8 de Octubre de 2005, 20:43 »
0
Lo anterior lo encontre en la web y fue publicado por otro forista.

con esto puedes adaptarlo a tu problema y solucionarlo. Chausss

[size=109]Por que Rolo soy yo¡¡¡¡¡[/size]

bartolomeo

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: Recuperación De Un Metafile Desde El Portapapeles
« Respuesta #7 en: Lunes 10 de Octubre de 2005, 17:32 »
0
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.  

[size=109]Por que Rolo soy yo¡¡¡¡¡[/size]

fxge

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Recuperación De Un Metafile Desde El Portapapeles
« Respuesta #8 en: Martes 11 de Octubre de 2005, 15:15 »
0
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;

bartolomeo

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: Recuperación De Un Metafile Desde El Portapapeles
« Respuesta #9 en: Martes 11 de Octubre de 2005, 15:23 »
0
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

[size=109]Por que Rolo soy yo¡¡¡¡¡[/size]