带Firemonkey的Delphi Xe2:您是否可以使用非默认Windows非客户端绘画样式绘制的非客户区?

War*_* P 14 delphi delphi-xe2 firemonkey

这是我使用firemonkey + Delphi XE2制作的delphi应用程序示例.

如您所见,您可以使用Firemonkey中的视觉样式"stylebook"来自定义窗口框架内大多数内容的外观.然而,窗框的外部是使用Windows决定的任何样式绘制的.现在,如果我使用的是VCL而不是Firemonkey,我可以在暗色方案中应用"VCL样式"和"皮肤"整个VCL应用程序.

我的猜测是,这与Delphi XE2 + Firemonkey无关.任何人都可以说明如何做到这一点?

在此输入图像描述

在设计时,表单的"预览"显示一个漂亮的黑色边框.但是当我运行我的应用程序时,Windows XP"Luna"主题边框(下图中的蓝色部分)看起来很糟糕.具有讽刺意味的是,VCL比Firemonkey更漂亮(在样式的XE2中)......

Ond*_*lle 4

您可以像往常一样创建一个 VCL Forms 应用程序,如果您喜欢的话可以使用样式,在运行时加载您的 Firemonkey 表单并将您的 VCL 表单设置为其父表单:

uses
  FMX.Platform.Win, FMX.Forms,
  Unit2;

procedure TForm1.FormCreate(Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(nil);
  Form2.BorderStyle := FMX.Forms.TFmxFormBorderStyle.bsNone;
  Form2.SetBounds(0, 0, ClientWidth, ClientHeight);
  Winapi.Windows.SetParent(FmxHandleToHWND(Form2.Handle), Handle);
  Form2.Show;
end;
Run Code Online (Sandbox Code Playgroud)

在下面的截图中,Form1是VCL应用程序主窗体(Carbon风格),带有按钮的深灰色区域是嵌入的Firemonkey窗体:

嵌入 VCL 表单中的 Firemonkey 表单

请注意,我没有处理父窗口的大小调整 - 它也应该调整嵌入表单的大小,模拟 alClient 对齐。这种方法似乎存在许多潜在问题 - 我认为 IDE 不允许您轻松地将 Firemonkey 表单与 VCL 表单混合在一起是有原因的 - 它会警告可能的“编译错误或意外行为”。