Delphi Xe2带有Firemonkey:您是否可以使用默认Windows非增强绘制风格以外的样式绘制的非客户端区域?

StackOverflow https://stackoverflow.com/questions/9013285

  •  14-11-2019
  •  | 
  •  

这里是我使用firemonkey + delphi xe2的delphi应用程序的样本。

正如您所看到的,您可以在Firemonkey中使用Visual Squest“StyleBook”来自定义窗口框架内大多数东西的外观。但是,窗口框的外部使用Windows决定的任何风格绘制。现在,如果我使用VCL而不是Firemonkey,我可以在深色方案中应用“VCL样式”和“皮肤”整个VCL应用程序。

我的猜测是Delphi Xe2 + Firemonkey尚未使用。任何人都可以展示如何做到这一点?

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

有帮助吗?

解决方案

您可以像往常一样创建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;
.

在以下屏幕截图中,Form1是VCL应用主表单(带碳样式)和带按钮的深灰色区域是嵌入的Firemonkey形式:

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

其他提示

firemonkey是跨平台。by and smarly您无法执行任何在FMX框架本身内依赖的平台。但是,您可以拨打潜在的平台(是Windows,OSX或iOS)来访问平台特定功能。这应该在有条件地编译代码中完成。

,例如。

{$IF DCC}
  something;
{$ENDIF}

{$IF FPC}
  somethingelse;
{$ENDIF}
.

从另一个角度看它,您可以在Trectangle(例如)上执行所有FMX工作,然后使用AddObject(或分配其父),进入VCL表单。

如果将表单borderstyle更改为bsnone,则可以添加您想要的任何Chrome。当然,您将需要手动处理最大化,最小化,关闭,调整等行动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top