如何在FireMonkey TWebBrowser中旋转照片



我刚刚在Delphi 10.3.3中尝试了FMX TWebBrowser。我无法在img标签中旋转照片。以下页面在谷歌浏览器中运行。但它在Delphi 10.3.3的FireMonkey TWebBrowser中不起作用。怎么了?请有人帮帮我!

<!DOCTYPE html>
<html>
<head>
<style>
    img {
      display: block;
      width: 300px;
      height: auto;
   }
</style>
</head>
<body>
<button onclick="rotate();">Rotate 90 degrees</button>
<br />
<img src="20190228-1.JPG" id="theID" />
<script>
    function rotate() {
      var imgX=document.getElementById("theID");
      imgX.style.transform = "rotate(90deg)";
      imgX.style.display = "block";
    }
</script>
</body>
</html>

我猜您的目标平台是Windows。TWebBrowser将基于IE的web浏览器控件封装在Windows上,默认情况下以IE7标准模式显示页面。此模式不支持CSS转换。你有多种选择来解决这个问题。

选项1:使用不推荐使用的-ms-filter CSS属性

-ms-filerfilter是用于将图形过滤器集合应用于对象的Microsoft CSS扩展。它还支持旋转:

imgX.style.filter = "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";

选项2:通过注册表强制Egde标准模式

这也是TWebBrowser文档鼓励您在Windows平台上执行的操作。您基本上需要手动或以编程方式将应用程序的EXE名称登记在HKEY_CURRENT_USERSOFTWAREMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION下,作为定义应用程序兼容性模式的DWORD值。11001($2AF9(用于IE11边缘模式。有关更多值,请参见浏览器仿真。此设置将影响应用程序中任何web浏览器控件中加载的所有页面。

选项3:使用x-ua-compatible标头指定传统模式

您应该能够通过在HTML:中的<meta>标记注入x-ua-compatible标头来实现与选项2中相同的效果

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  …

有关详细信息,请参见指定旧文档模式。


以上所有内容均适用于Windows平台。从选项中选择时请记住这一点。选项1很可能在其他平台上不起作用。

当你在做的时候,还可以考虑通过利用CSS类将JavaScript与CSS分离:

<style>
img {
  display: block;
  width: 300px;
  height: auto;
}
.rotated {
  transform: rotate(90deg);
}
</style>
…
<script>
function rotate() {
  var imgX = document.getElementById("theID");
  imgX.classList.toggle("rotated");
}
</script>

最新更新