Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-12-2008
valeria valeria is offline
Miembro
 
Registrado: dic 2008
Posts: 14
Poder: 0
valeria Va por buen camino
grafico excel

hola mi nombre es Valeria ,ando en problemas....necesito importar un grafico de excel a un reporte trate de hacer con lo que sugirieron en los post anteriores pero me tira error...paso a explicar un poco mejor:
tengo un grafico que lo creo con el componente TEXcelChart lo mando al portapapeles pero cuando quiero levantar esta imagen para guardarla en disco me tira error: parte del codigo es la sigueinte:
var
bitmap: TBitMap;
begin
try
bitmap:= TBitmap.Create;
ExcelChart.CopyPicture(100,100,100);
Image6.Picture.RegisterClipboardFormat(cf_BitMap,TBitmap);
self.Image6.Picture.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);
bitmap.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);

en uses pongo ClipBrd pero me tira el sigueinte error:
'Unsupported Clipboard format'...ya no se que mas probar.....tambien trate de usar la instruccion ExcelChart1.Export(ExtractFilePath( Application.ExeName )+ 'Libro.bmp');
pero esta anda para office 2007 pero no para versiones anteriores....les agradeceria mucho si alguien me puede ayudar.....
muchas gracias
Responder Con Cita
  #2  
Antiguo 12-12-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, el TExcelChart tiene el metodo 'Export' el cual en teoria exporta a un fichero grafico (en teoria, a mi no me ha funcionado). Quiza deberias grabar un gif o bmp temporal y luego cargarlo en tu image. Sobre el formato del clipboard, deberias usar el cf_metafilepict, pues el chart se copia al portapapeles con este formato. Lo malo es que no he encontrado ningun componente que lo soporte . Dejo aqui este codigo (aunque no me ha funcionado tampoco )

Código Delphi [-]
var
     x ,
     c : olevariant;
begin
     x := CreateOleObject('excel.application');
     x.WorkBooks.Open('c:\test.xls');
     c := x.WorkBooks[1].WorkSheets[1].ChartObjects[1].Chart;

     c.Export('c:\test.GIF','GIF',false);

     x.Quit;
end;
y el link

saludos, aunque la ayuda sea algo pobre
Responder Con Cita
  #3  
Antiguo 12-12-2008
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
Hola, podrias usar ese código

Código Delphi [-]
unit EG_ClipboardBitmap32;
{
  Author William Egge. egge@eggcentric.com
  January 17, 2002
  Compiles with ver 1.2 patch #1 of Graphics32

  This unit will copy and paste Bitmap32 pixels to the clipboard and retain the
  alpha channel.

  The clipboard data will still work with regular paint programs because this
  unit adds a new format only for the alpha channel and is kept seperate from
  the regular bitmap storage.
}

interface

uses
  ClipBrd, Windows, SysUtils, GR32;

procedure CopyBitmap32ToClipboard(const Source: TBitmap32);
procedure PasteBitmap32FromClipboard(const Dest: TBitmap32);
function CanPasteBitmap32: Boolean;

implementation

const
  RegisterName = 'G32 Bitmap32 Alpha Channel';
  GlobalUnlockBugErrorCode = ERROR_INVALID_PARAMETER;

var
  FAlphaFormatHandle: Word = 0;

procedure RaiseSysError;
var
  ErrCode: LongWord;
begin
  ErrCode := GetLastError();
  if ErrCode <> NO_ERROR then
    raise Exception.Create(SysErrorMessage(ErrCode));
end;

function GetAlphaFormatHandle: Word;
begin
  if FAlphaFormatHandle = 0 then
  begin
    FAlphaFormatHandle := RegisterClipboardFormat(RegisterName);
    if FAlphaFormatHandle = 0 then
      RaiseSysError;
  end;
  Result := FAlphaFormatHandle;
end;

function CanPasteBitmap32: Boolean;
begin
  Result := Clipboard.HasFormat(CF_BITMAP);
end;

procedure CopyBitmap32ToClipboard(const Source: TBitmap32);
var
  H: HGLOBAL;
  Bytes: LongWord;
  P, Alpha: PByte;
  I: Integer;
begin
  Clipboard.Assign(Source);
  if not OpenClipboard(0) then
    RaiseSysError
  else
    try
      Bytes := 4 + (Source.Width * Source.Height);
      H := GlobalAlloc(GMEM_MOVEABLE and GMEM_DDESHARE, Bytes);
      if H = 0 then
        RaiseSysError;
      P := GlobalLock(H);
      if P = nil then
        RaiseSysError
      else
        try
          PLongWord(P)^ := Bytes - 4;
          Inc(P, 4);
          // Copy Alpha into Array
          Alpha := Pointer(Source.Bits);
          Inc(Alpha, 3); // Align with Alpha
          for I := 1 to (Source.Width * Source.Height) do
          begin
            P^ := Alpha^;
            Inc(Alpha, 4);
            Inc(P);
          end;
        finally
          if (not GlobalUnlock(H)) then
            if (GetLastError() <> GlobalUnlockBugErrorCode) then
              RaiseSysError;
        end;
      SetClipboardData(GetAlphaFormatHandle, H);
    finally
      if not CloseClipboard then
        RaiseSysError;
    end;
end;

procedure PasteBitmap32FromClipboard(const Dest: TBitmap32);
var
  H: HGLOBAL;
  ClipAlpha, Alpha: PByte;
  I, Count, PixelCount: LongWord;
begin
  if Clipboard.HasFormat(CF_BITMAP) then
  begin
    Dest.BeginUpdate;
    try
      Dest.Assign(Clipboard);
      if not OpenClipboard(0) then
        RaiseSysError
      else
        try
          H := GetClipboardData(GetAlphaFormatHandle);
          if H <> 0 then
          begin
            ClipAlpha := GlobalLock(H);
            if ClipAlpha = nil then
              RaiseSysError
            else
              try
                Alpha := Pointer(Dest.Bits);
                Inc(Alpha, 3); // Align with Alpha
                Count := PLongWord(ClipAlpha)^;
                Inc(ClipAlpha, 4);
                PixelCount := Dest.Width * Dest.Height;
                Assert(Count = PixelCount,
                  'Alpha Count does not match Bitmap pixel Count,
                  PasteBitmap32FromClipboard(const Dest: TBitmap32);');

                // Should not happen, but if it does then this is a safety catch.
                if Count > PixelCount then
                  Count := PixelCount;

                for I := 1 to Count do
                begin
                  Alpha^ := ClipAlpha^;
                  Inc(Alpha, 4);
                  Inc(ClipAlpha);
                end;
              finally
                if (not GlobalUnlock(H)) then
                  if (GetLastError() <> GlobalUnlockBugErrorCode) then
                    RaiseSysError;
              end;
          end;
        finally
          if not CloseClipboard then
            RaiseSysError;
        end;
    finally
      Dest.EndUpdate;
      Dest.Changed;
    end;
  end;
end;

end.

Necesitas unit GR32

Está en Torry's Delphi pages
No lo puedo probar porque no se puede accder al sitio, espero q tengas esa unidad
Saludos


Para probar

uses jpeg;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitmap32;
begin
  bmp := TBitmap32.Create;
  try
    bmp.LoadFromFile('C:\test.jpg');
    CopyBitmap32ToClipboard(bmp);
  finally
    bmp.Free;
  end;
end;
Responder Con Cita
  #4  
Antiguo 12-12-2008
valeria valeria is offline
Miembro
 
Registrado: dic 2008
Posts: 14
Poder: 0
valeria Va por buen camino
no tengo la unidad GR32...nadie sabe donde la puedo bajar...
gracias por su ayuda....
Responder Con Cita
  #5  
Antiguo 13-12-2008
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
Hola

de aquí

Saludos
Responder Con Cita
  #6  
Antiguo 15-12-2008
valeria valeria is offline
Miembro
 
Registrado: dic 2008
Posts: 14
Poder: 0
valeria Va por buen camino
Muchisimas gracias roberto....pude instalar la unidad...igualmente no se por que cuando trato de compilar me salta error ( tipos incompatibles en la linea Count := PixelCount; ( del procedimiento PasteBitmap32FromClipboard)
trate de usar solo el procedimiento Copybitmap 32 ,osea primero el self.ExcelChart1.CopyPicture();
CopyBitmap32ToClipboard(bmp);
bmp.savetofile('C:\test.jpg');

pero no sirvio de nada no me copio absolutamente nada.,.,no se si necesitaria antes el metodo de pegado....
pero a mi sorpresa me sirvio el metodo de 'Coso' el de export el cual me sirvio no solo para office 2007 sino para 97 para mi sorpresa....mi unica duda ahora si alguien save es como puedo transformar esa imagen gif que guardo en disco a una imagen bmp o metafile...ya que rave soporta estos dos tipos de imagenes....bueno disculpen que sea tan pesada y un millon de gracias
Responder Con Cita
  #7  
Antiguo 15-12-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
No lo he probado, pero creo que si haces
Código Delphi [-]
c.Export('c:\test.bmp','bmp',false);

te funcionara. saludos.
Responder Con Cita
  #8  
Antiguo 15-12-2008
valeria valeria is offline
Miembro
 
Registrado: dic 2008
Posts: 14
Poder: 0
valeria Va por buen camino
Aunque paresca increible no funciona asi....fue lo primero que probe....la verdad que " supuestamente tendria que funcionar" pero bueno es la magia de microsoft...."
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Exportar el grafico a excel elorza Gráficos 1 20-01-2015 18:58:46
BD a gráfico Excel tcp_ip_es Varios 1 30-04-2008 23:16:42
excel a delphi, como mostrar columnas de excel Vyckso Servers 2 13-08-2007 12:38:08
Como mando a llamar un grafico de excel? Elite237 Gráficos 1 28-07-2007 13:51:30
Problema al actualizar Excel 2000 a Excel XP victork_py Servers 1 06-08-2004 19:20:41


La franja horaria es GMT +2. Ahora son las 11:18:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi