Delphi Xe2 с Firemonkey: у вас есть неклиентская область, которая написана в стиле, отличном от стандартного стиля неклейки Windows?

Вот пример приложения delphi, которое я использую с помощью firemonkey + Delphi XE2.

Как вы можете видеть, вы можете использовать "стиль" стиля визуального стиля в Firemonkey, чтобы настроить внешний вид большинства вещей внутри рамки окна. Однако внешняя рамка окна рисуется с использованием любого стиля, который решает Windows. Теперь, если я использовал VCL вместо Firemonkey, я мог бы применить "VCL Styles" и "skin" все приложение VCL в темной цветовой гамме.

Я предполагаю, что это НЕ ЕСТЬ, возможно, с Delphi XE2 + Firemonkey. Может ли кто-нибудь показать, как это сделать?

enter image description here

В режиме разработки "предварительный просмотр" вашей формы показывает хорошую черную границу. Но когда я запускаю свое приложение, граница темы темы "Луна" Windows XP (синие части на рисунке ниже) выглядит ужасно. Как ни странно, VCL красивее (в XE2 со стилями), чем Firemonkey...

Ответы

Ответ 1

Вы можете создать приложение 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:

Firemonkey form embedded in a VCL form

Обратите внимание, что я не обрабатываю изменение размера родительского окна - он также должен изменить размер сформированной формы, эмулируя выравнивание alClient. Кажется, существует много потенциальных проблем с этим подходом - я думаю, что есть причина, по которой IDE не позволяет вам легко смешивать формы Firemonkey с формами VCL - он предупреждает о возможных "ошибках компиляции или неожиданном поведении".

Ответ 2

Firemonkey - это кросс-платформа. По большому счету, вы не можете делать ничего, что зависит от платформы в рамках самой FMX. Тем не менее вы можете звонить на базовую платформу (будь то Windows, OSX или iOS) для доступа к функциональным возможностям платформы. Это должно быть сделано в рамках условно скомпилированного кода.

например.

{$IF DCC}
  something;
{$ENDIF}

{$IF FPC}
  somethingelse;
{$ENDIF}

Посмотрев на нее с другой точки зрения, вы можете сделать все ваши FMX-работы на TRectangle (например), а затем использовать AddObject (или назначить его родительскую) в форму VCL.

Ответ 3

Если вы измените формы BorderStyle на bsNone, вы можете добавить любой хром, который вы хотите. Разумеется, вам придется вручную обрабатывать операции максимизации, минимизации, закрытия, изменения размера и т.д.