Ver Mensaje Individual
  #2  
Antiguo 03-01-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Reputación: 21
salvica Va por buen camino
Resuelto

Vale, me respondo a mí mismo

Estaba copiando de un "Jpg" y por eso no sacaba nada en el BitMap, la solución consistía en operar sobre Picture.Graphic y no sobre Picture.BitMap como estaba haciendo.

Dejo la función modificada por si le sirve a alguien

Código Delphi [-]
{
  Esta función localiza un marcador en el documento y "pega" la imágen en su lugar

  parámetros
     Marca -----> es el nombre del marcador (debe existir previamente)
     FileImg ---> el path completo a la imágen
     iHeight ---> la altura que deseo que tenga la imágen (por defecto 100)
     iWidth ----> el ancho  que deseo que tenga la imágen (por defecto 50)
}
Procedure TWordObj.PasteImgToBookMarks( Marca, FileImg:string;
                                        iHeight:integer=100;
                                        iWidth:integer=50 );
var
  Image   : TImage;
  BitMap  : TBitMap;
  Area    : TRect;
  AFormat : Word;
  AData   : THandle;
  APalette: HPALETTE;
  EscalaX : Double;
  EscalaY : Double;
  Escala  : Double;
Begin
{ si existe el marcador, operamos sobre la imagen }
  if WordApp.ActiveDocument.Bookmarks.Exists(Marca) then begin
     Imagen  := TImage.Create( Application.MainForm );
     try
       with Imagen do begin
            Autosize := true;
            Visible  := false;
            Picture.LoadFromFile( FileImg );
          { Hallamos la escala de reducción Horizontal }
            if( Width < iWidth )
                then EscalaX := Width / iWidth
                else EscalaX := iWidth / Width;
          { La escala vertical }
            if( Height < iHeight )
                then EscalaY := Height / iHeight
                else EscalaY := iHeight / Height;
          { Escogemos la menor de las 2 }
            if( EscalaY < EscalaX )
                then Escala := EscalaY
                else Escala := EscalaX;
          { Y la usamos para reducir el rectangulo destino }
            with Area do begin
                 Bottom := Trunc(Height * Escala);
                 Left   := 0;
                 Right  := Trunc(Width  * Escala);
                 Top    := 0;
            end;
       end;
     { Dibujamos el TImage en el TBitMap destino con el nuevo tamaño }
       BitMap  := TBitMap.Create;
       with BitMap do begin
            try
            { formateamos el BitMap }
              Height  := Area.Bottom;
              Width   := Area.Right;
            { dibujamos TImage en TBitMap }
              Canvas.StretchDraw(Area, Imagen.Picture.Graphic);
            { guardarlo en el portapapeles }
              SaveToClipboardFormat(AFormat, AData, APalette);
            finally
            { eliminamos de la memoria el TBitMap }
              free;
            end;
       end;
     finally
     { eliminamos de la memoria el TImage }
       Imagen.Free;
     end;
  end;
{ copiar el portapapeles en el documento }
  ClipBoard.SetAsHandle(AFormat, AData);
  WordApp.ActiveDocument.Bookmarks.Item(Marca).Range.Paste;
end;
SAludos
Salvador

Última edición por salvica fecha: 03-01-2008 a las 18:01:06.
Responder Con Cita