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, вы можете добавить любой хром, который вы хотите. Разумеется, вам придется вручную обрабатывать операции максимизации, минимизации, закрытия, изменения размера и т.д.