2016-06-07 66 views
-6

我想知道怎么做可以:德尔福XE8加载PDF文件

  1. 点击一个按钮,从目录中打开PDF文件。

  2. 在窗体上查看PDF文件。

+0

不客气! –

+2

你并没有试图做这样的事情。程序不返回值,所以没有* Result *可用。你分配给* s *的是无稽之谈;它与PDF文件的有效名称没有任何关系。以实际编译的形式发布您尝试使用的**实际代码**。此外,这是*问题和答案*网站,而不是*问题*。如果您有多个问题,请创建多个帖子来询问他们,除非他们密切相关。在这种情况下,它们不是,因为其中一个是关于打开一个可以在API中正常工作的PDF,另一个是关于嵌入的,而不是。 –

+0

您是否安装了Adobe Acrobat的完整版本?我问的原因是,如果你这样做,可以使用它的自动化对象来打开PDF文件并将其显示在Delphi应用程序托管的窗口中。如果这就是你想要做的,发布一个新的问题,具体问如何做到这一点。还有其他方法,但只有这个方法才能像Acrobat那样呈现文档。 – MartynA

回答

3

你并不需要所有的跳转赴汤蹈火你在干什么。 Windows会为您找到与PDF文件关联的应用程序。

procedure TForm1.Button1Click(Sender: TObject); 
var 
    s: String;  
    Ret: DWord; 
begin 
    s := 'C:\MyFiles\MyFile.pdf'; 
    Ret := ShellExecute(Handle, nil, PChar(s), nil, nil, SW_SHOW); 
    if Ret < 32 then 
    ShowMessage(SysErrorMessage(GetLastError)); 
end; 

注:通常你应该从未呼叫而不检查返回值的WinAPI的功能。在这种情况下,您将知道它是否无效,因为PDF无法打开。

+0

错误处理已中断。不能在ShellExecute中使用GetLastError。为了正确报告,请使用ShellExecuteEx。 –

0

要嵌入PDF,第2个想法浮现在脑海中会

1)搜索,支持PDF文件的COM对象 - 制作一个快速的搜索:http://www.biopdf.com/guide/com_interface.php,但似乎其他。

2)最差的情况下,你可以嵌入具有沿着这些线路的HTML代码中有一个网络面板:

<object data="test.pdf" type="application/pdf" width="500" height="300"> alt : <a href="test.pdf">test.pdf</a> </object>

+0

这两点都可悲地与问题无关。 –

+0

@ArnaudBouchez是不是指OP的第二个问题? –

+1

@RenéHoffmann我永远不会使用HTML面板在应用程序中嵌入pdf。正确的方法是使用ActiveX IMHO,例如作为https://www.youtube.com/watch?v=n8qDdal-6mY –

1

感谢您的答案,但我最终得到它(几年来一直没有使用德尔福,忘记了用途)。

这就是:“点击按钮后,从目录打开PDF文件。”

uses shellApi; 

procedure TForm1.Button1Click(Sender: TObject); 

begin 
ShellExecute(Handle, 'open', 'C:\pathwaytopdf.pdf', nil, nil, SW_SHOWNORMAL); 
end; 
end. 

谢谢你的答案。