Delphi Xe2带有Firemonkey:您是否可以使用默认Windows非增强绘制风格以外的样式绘制的非客户端区域?
-
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。当然,您将需要手动处理最大化,最小化,关闭,调整等行动。