Ориентация экрана на iOS - PullRequest
       116

Ориентация экрана на iOS

0 голосов
/ 12 октября 2019

За этот вопрос в Delphi приложение FMX можно выборочно перевести в альбомную или портретную ориентацию с помощью кода, подобного следующему:

procedure TForm1.Chart1Click(Sender: TObject);
begin
  if Application.FormFactor.Orientations = [TScreenOrientation.Landscape] then
     Application.FormFactor.Orientations := [TScreenOrientation.Portrait]
  else
     Application.FormFactor.Orientations := [TScreenOrientation.Landscape];
  end;
end;

Я не могу понять, как перевести этот кодвыше для C ++ Builder. Я попробовал следующий код, основанный на для этого поста , но он дает нарушение прав доступа как на iOS, так и на Android:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 _di_IInterface Intf;
 if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXScreenService), Intf))
 {
 _di_IFMXScreenService ScreenService = Intf;
 TScreenOrientations Orientation;
 Orientation << TScreenOrientation::Landscape;
 ScreenService->SetScreenOrientation(Orientation);
 }
}

Это возможно даже в FMX с C ++ Builder?

1 Ответ

1 голос
/ 14 октября 2019

Эта строка:

if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXScreenService), Intf))

должна быть такой:

if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXScreenService), &Intf))

Обратите внимание на добавление оператора &в последнем параметре. Это даже указано в документации :

Примечание. Учтите, что вам нужно добавить и перед Intf, как вы можете видеть в приведенном выше примере кода.

Кроме того, Intf действительно должно быть объявлено в соответствии с интерфейсом, который вы запрашиваете, например:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    _di_IFMXScreenService ScreenService;
    if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXScreenService), &ScreenService))
    {
        TScreenOrientations Orientation;
        Orientation << TScreenOrientation::Landscape;
        ScreenService->SetScreenOrientation(Orientation);
    }
}
...