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.