2014-11-17 134 views
0

我正在使用XE7 Rad Studio为Android和iPhone构建“应用程序”。目前专注于Android。如何加载资源

根据需求,我需要在应用程序中加载HTML作为资源字符串。

WebBrowser1.LoadFromStrings(ResourceStrings.HTMLString,''); 
//Loads the resource-string successfully. 

然而,在这种资源字符串我需要加载图像,我无法弄清楚如何做到这一点。我可以在部署中看到将图像加载到项目{Bitmap_1,Bitmap_2,Bitmap_3}中。

如何完成这一行:

resource-string: 

...'<a href="/images/im2.bmp"><img id="img2" class="thumbnail" src="/images/im2.bmp" alt="/images/im2.bmp"/></a>'... 

非常感谢。

+1

我可能失去了一些东西,所以也许你可以澄清的.....事实上,您的HTML字符串指向图像文件在这个时候应该是不相关的。您只需提取一个字符串并将其提供给WebBrowser组件即可处理为HTML。当WebBrowwer决定需要图片时,它会尝试按照HTML中的指示加载图片。很可能它会查找一个物理文件'/ images/im2.bmp'。为了确保它找到可能需要创建/复制到/到正确位置的文件。如果你要提供物理图像文件,那么你也可以提供一个物理HTML文件。 –

+0

我不清楚你真的在问什么。正如你到目前为止所解释的那样,浏览器控件将为其他页面资源发出网络请求。它发送给它的服务器取决于页面的基本URL。是那个URL * localhost *,并且你的程序是一个Web服务器?如果是这样,那么您需要接收这些请求并提供相应的资源。如果你不是服务器,但你仍然想提供这些图像,那么你需要以其他方式将数据发送到浏览器。考虑将'href'属性设置为[** data URIs **](http://en.wikipedia.org/wiki/Data_URI_scheme)。 –

+0

@RobKennedy:TWebBrowser支持数据URI吗? –

回答

0

如果你读了documentationLoadFromStrings(),它说:在TWebBrowser组件内

显示HTML字符串内容。

该方法使用以下参数:

  • 内容:指定要显示的HTML字符串。

  • BaseUrl:指定用于解析加载页面内的相对URL的路径。为了澄清,请考虑以下情形:此参数设置为www.mycompany.com/departments/,并且加载的页面定义了链接<a href=’Sales.html’>Sales dept</a>。在给定的情况下,点击此链接打开http:// www.mycompany.com/departments/Sales.html

也就是说你正在运行到确切的情况。您的HTML包含与外部图像的相对链接,但您没有提供BaseURL,所以WebBrowser无法解析它加载这些图像所需的正确URL。

在部署管理器中,将图像文件的远程路径设置为StartUp/Documents/images/StartUp/Library/Application Support/images/。 在应用程序启动时,Delphi会将以StartUp开头的文件复制到设备上的相应文件夹。然后,你可以调用LoadFromStrings()当做到以下几点:

// note sure which function to use for 'StartUp/Library/Application Support/', 
// maybe TPath.GetLibraryPath()? This example is for '/StartUp/Documents/'... 
WebBrowser1.LoadFromStrings(ResourceStrings.HTMLString, 'file://' + TPath.GetDocumentsPath); 

这将使"/images/im2.bmp"解析到类似file:///data/data/<application ID>/files/images/im2.bmp"