Ver Mensaje Individual
  #2  
Antiguo 30-10-2007
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Reputación: 22
apicito Va por buen camino
Bueno. He conseguido abrir pdfs embebidos en mi formulario
Código Delphi [-]
  Clase:='AcrobatSDIWindow';
  Extension:='pdf';
  OleDoc:= TOleContainer.Create(self);
  OleDoc.Parent:=PDoc;
  OleDoc.Align:=alClient;
  OleDoc.AutoActivate:=aaManual;
  OleDoc.AutoVerbMenu:=True;
  OleDoc.Iconic:=False;
  Stream:=TMemoryStream.Create;
  Stream.Position:=0;
  TBlobField(QueryTra.FieldByName('EXPTRA_TEXTO')).SaveToStream(Stream);
  Stream.Position:=0;
  if fileExists(ExtractFilePath(ParamStr(0))+'vacio.pdf') then
    OleDoc.CreateObjectFromFile(ExtractFilePath(ParamStr(0))+'vacio.pdf',false)
  else begin
    Showmessage('No Existe '+ExtractFilePath(ParamStr(0))+'vacio.pdf. Debe crearse.');
    Close;
    Exit;
  end;
  h := FindWindow(PChar(Clase), nil);
  if (h <> null) then begin
    windows.EnableMenuItem(GetMenu(h), SC_CLOSE, MF_GRAYED);
    Windows.SetParent(h, PDoc.Handle);
    windows.SetWindowLong( h, GWL_STYLE,WS_DLGFRAME ) ;
    ShowWindow(h, SW_MAXIMIZE  );
  end;
  OleDoc.LoadFromStream(Stream);
  Stream.Free;
  OleDoc.DoVerb(ovPrimary);
  OleDoc.Enabled:=True;
  OleDoc.SetFocus;
y grabarlos desde un boton de mi formulario:
Código Delphi [-]
procedure GrabaCampo;
var
  Stream: TMemoryStream;
begin
  Stream:=TMemoryStream.Create;
  Stream.Position:=0;
  OleDoc.SaveToStream(Stream);
  Stream.Position:=0;  
  TBlobField(QueryTra.FieldByName('EXPTRA_TEXTO')).LoadFromStream(Stream);
  Stream.Free;
  OleDoc.Modified:=false;
  OleDoc.UpdateControlState;
  OleDoc.Close;
  OleDoc.Free;
end;
A pesar de que graba correctamente las modificaiones, me lanza un error de que Acrobat a detectado un error y ha tenido que cerrarse al hacer el close. Ademas de un mensaje de: La memoria nose puede "read".
Esto solo sucede si modifico algún dato en el formulario, sino cierra correctamente.
Responder Con Cita