AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Kann man die ScreenOrientation per Runtime festlegen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Kann man die ScreenOrientation per Runtime festlegen ?

Ein Thema von Rollo62 · begonnen am 3. Jul 2015 · letzter Beitrag vom 3. Jul 2015
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#1

Kann man die ScreenOrientation per Runtime festlegen ?

  Alt 3. Jul 2015, 16:53
Hallo zusammen,

ich möchte in meiner Fmx App (RadStudio XE8 Pro, Upd1), für verschiedene Views verschiederne ScreenOrientations festlegen.

Dazu gibe es einen ScreenService, der das wie folgt machen soll:

Code:
// Sets the possible Screen orientations (Portrait, Landscape, InvertedPortrait, InvertedLandscape);
procedure Screen_Orientation_Set(const orientSet : TScreenOrientations );
var
  ScreenService: IFMXScreenService;

begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
  begin
    ScreenService.SetScreenOrientation(orientSet);
  end;
end;
Damit das funktinoiert (auch die Events bei OnOrientationChange übrigens), muss wohl in
den Options\Application\Orientation die Liste der Kandidaten angeclickt sein.


Soweit, so gut.
Aber wenn ich weiter in die Sourcen schaue sieht es bei iOS so aus:

Code:
procedure TPlatformCocoaTouch.SetScreenOrientation(
  AOrientations: TScreenOrientations);
begin
  // Not needed for iOS
end;
Das ist offenbar nie dafür gedacht gewesen die ScreenOrientation mal eben per Runtime festzulegen,
sondern einmal für die ganze App.

Bei Android gibt es etwas im Sourcecode, das muss ich noch ausprobieren,
aber ich möchte das halt für beide gleich haben.

Ich möchte halt die eine View so festlegen:
Code:
Screen_Orientation_Set([Portrait, Landscape, InvertedPortrait, InvertedLandscape] );
und die andere View z.B. so:
Code:
Screen_Orientation_Set([Portrait, InvertedPortrait, ] );
Geht das überhaupt, und wenn ja wie ?

Der ScreenOrientation Service scheint jedenfalls nicht dafür zu gebrauchen zu sein (wofür er
dann überhaupt da ist wäre noch eine andere Frage ...).

Rolf
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kann man die ScreenOrientation per Runtime festlegen ?

  Alt 3. Jul 2015, 17:36
ich habe nach ein bischen Recherche noch ältere Beiträge dazu gefunden, aber
insbesondere beim Checken der Soureces bin ich auf einen Weg gestossen der viel einfacher ist.

Ob das unter Android läuft weiss ich noch nicht, unter iOS scheint es jedenfalls gut zu laufen:

Es reicht offenar einfach die Orientation im Application Object per FormFaktor zu setzen,
dann wird das von den iOS Routinen korrekt verarbeitet.


Code:
procedure Update_FormFactor(FormFactor: TFormFactor; const orientSet : TScreenOrientations);
begin

  FormFactor.Orientations := orientSet;

end;

procedure Form_Orientation_Set(const orientSet : TScreenOrientations );
var
 ScreenService: IFMXScreenService;

begin
{$IFDEF IOS}
  Update_FormFactor(Application.FormFactor, orientSet);
{$ELSE IOS}

  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService) then
  begin
    ScreenService := TPlatformServices.Current.GetPlatformService(IFMXScreenService) as IFMXScreenService;
    ScreenService.SetScreenOrientation(OrientSet);
   end;

{$ENDIF IOS}

end;
Ist vielleicht ein "Hack", aber ein recht schöner
Mit etwas Glück reicht das so auch für Android aus, dann kann ich die Platformservides wieder rausschmeissen.

Rollo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz